diff --git a/src/Type/PHPUnit/GetMockBuilderDynamicReturnTypeExtension.php b/src/Type/PHPUnit/GetMockBuilderDynamicReturnTypeExtension.php index 4c7dbe6..f4bff04 100644 --- a/src/Type/PHPUnit/GetMockBuilderDynamicReturnTypeExtension.php +++ b/src/Type/PHPUnit/GetMockBuilderDynamicReturnTypeExtension.php @@ -4,15 +4,24 @@ use PhpParser\Node\Expr\MethodCall; use PHPStan\Analyser\Scope; +use PHPStan\Broker\Broker; use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\Type; use PHPStan\Type\TypeWithClassName; -class GetMockBuilderDynamicReturnTypeExtension implements \PHPStan\Type\DynamicMethodReturnTypeExtension +class GetMockBuilderDynamicReturnTypeExtension implements \PHPStan\Type\DynamicMethodReturnTypeExtension, \PHPStan\Reflection\BrokerAwareExtension { + /** @var \PHPStan\Broker\Broker */ + private $broker; + + public function setBroker(Broker $broker): void + { + $this->broker = $broker; + } + public function getClass(): string { return 'PHPUnit\Framework\TestCase'; @@ -37,6 +46,9 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method $class = $argType->getValue(); + if (!$this->broker->hasClass($class)) { + return $mockBuilderType; + } if (!$mockBuilderType instanceof TypeWithClassName) { throw new \PHPStan\ShouldNotHappenException(); }