diff --git a/src/Dependency/DependencyResolver.php b/src/Dependency/DependencyResolver.php index eacf0a6e45..bf63becacb 100644 --- a/src/Dependency/DependencyResolver.php +++ b/src/Dependency/DependencyResolver.php @@ -122,8 +122,9 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies foreach ($returnType->getReferencedClasses() as $referencedClass) { $this->addClassToDependencies($referencedClass, $dependenciesReflections); } - } elseif ($node instanceof Node\Expr\MethodCall || $node instanceof Node\Expr\PropertyFetch) { - $classNames = $scope->getType($node->var)->getReferencedClasses(); + } elseif ($node instanceof Node\Expr\MethodCall) { + $calledOnType = $scope->getType($node->var); + $classNames = $calledOnType->getReferencedClasses(); foreach ($classNames as $className) { $this->addClassToDependencies($className, $dependenciesReflections); } @@ -132,6 +133,31 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies foreach ($returnType->getReferencedClasses() as $referencedClass) { $this->addClassToDependencies($referencedClass, $dependenciesReflections); } + + if ($node->name instanceof Node\Identifier) { + $methodReflection = $scope->getMethodReflection($calledOnType, $node->name->toString()); + if ($methodReflection !== null) { + $this->addClassToDependencies($methodReflection->getDeclaringClass()->getName(), $dependenciesReflections); + } + } + } elseif ($node instanceof Node\Expr\PropertyFetch) { + $fetchedOnType = $scope->getType($node->var); + $classNames = $fetchedOnType->getReferencedClasses(); + foreach ($classNames as $className) { + $this->addClassToDependencies($className, $dependenciesReflections); + } + + $propertyType = $scope->getType($node); + foreach ($propertyType->getReferencedClasses() as $referencedClass) { + $this->addClassToDependencies($referencedClass, $dependenciesReflections); + } + + if ($node->name instanceof Node\Identifier) { + $propertyReflection = $scope->getPropertyReflection($fetchedOnType, $node->name->toString()); + if ($propertyReflection !== null) { + $this->addClassToDependencies($propertyReflection->getDeclaringClass()->getName(), $dependenciesReflections); + } + } } elseif ( $node instanceof Node\Expr\StaticCall || $node instanceof Node\Expr\ClassConstFetch