From c7a64f8897d6dce40b762a18bebae5e415edc3c8 Mon Sep 17 00:00:00 2001 From: Jan Skrasek Date: Mon, 31 Aug 2020 23:08:00 +0200 Subject: [PATCH] mapper type extension: fix resolving parent class --- src/Types/MapperMethodReturnTypeExtension.php | 13 +++++++++++-- tests/testbox/Types/fixtures/AuthorsMapper.php | 7 +++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Types/MapperMethodReturnTypeExtension.php b/src/Types/MapperMethodReturnTypeExtension.php index ed9236c..1dc1e88 100644 --- a/src/Types/MapperMethodReturnTypeExtension.php +++ b/src/Types/MapperMethodReturnTypeExtension.php @@ -70,11 +70,20 @@ public function getTypeFromMethodCall( return $defaultReturn; } - $mapperClass = $mapper->getClassName(); + $currentMapper = $this->reflectionProvider->getClass($mapper->getClassName()); + assert($currentMapper !== false); + do { + $mapperClass = $currentMapper->getName(); /** @phpstan-var class-string<\Nextras\Orm\Repository\Repository> $repositoryClass */ $repositoryClass = \str_replace('Mapper', 'Repository', $mapperClass); - $mapperClass = \get_parent_class($mapperClass); + + $currentMapper = $this->reflectionProvider->getClass($mapperClass)->getParentClass(); + if ($currentMapper === false) { + break; + } + $mapperClass = $currentMapper->getName(); + assert(is_string($mapperClass)); } while (!\class_exists($repositoryClass) && $mapperClass !== DbalMapper::class); diff --git a/tests/testbox/Types/fixtures/AuthorsMapper.php b/tests/testbox/Types/fixtures/AuthorsMapper.php index 54d1748..fc39300 100644 --- a/tests/testbox/Types/fixtures/AuthorsMapper.php +++ b/tests/testbox/Types/fixtures/AuthorsMapper.php @@ -2,9 +2,16 @@ namespace NextrasTests\OrmPhpStan\Types; +use Nextras\Orm\Collection\ICollection; use Nextras\Orm\Mapper\Mapper; class AuthorsMapper extends Mapper { + public function findAllWithTranslatedIps(): ICollection + { + return $this->toCollection( + $this->builder()->addSelect('inet6_ntoa([ip]) as [ip]') + ); + } }