Skip to content

Commit

Permalink
DependencyResolver - add method/property declaring classes to depende…
Browse files Browse the repository at this point in the history
…ncies
  • Loading branch information
ondrejmirtes committed Oct 20, 2022
1 parent bc9301d commit e1c1366
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/Dependency/DependencyResolver.php
Expand Up @@ -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);
}
Expand All @@ -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
Expand Down

0 comments on commit e1c1366

Please sign in to comment.