Skip to content

Commit e1c1366

Browse files
committed
DependencyResolver - add method/property declaring classes to dependencies
1 parent bc9301d commit e1c1366

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/Dependency/DependencyResolver.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,9 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies
122122
foreach ($returnType->getReferencedClasses() as $referencedClass) {
123123
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
124124
}
125-
} elseif ($node instanceof Node\Expr\MethodCall || $node instanceof Node\Expr\PropertyFetch) {
126-
$classNames = $scope->getType($node->var)->getReferencedClasses();
125+
} elseif ($node instanceof Node\Expr\MethodCall) {
126+
$calledOnType = $scope->getType($node->var);
127+
$classNames = $calledOnType->getReferencedClasses();
127128
foreach ($classNames as $className) {
128129
$this->addClassToDependencies($className, $dependenciesReflections);
129130
}
@@ -132,6 +133,31 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies
132133
foreach ($returnType->getReferencedClasses() as $referencedClass) {
133134
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
134135
}
136+
137+
if ($node->name instanceof Node\Identifier) {
138+
$methodReflection = $scope->getMethodReflection($calledOnType, $node->name->toString());
139+
if ($methodReflection !== null) {
140+
$this->addClassToDependencies($methodReflection->getDeclaringClass()->getName(), $dependenciesReflections);
141+
}
142+
}
143+
} elseif ($node instanceof Node\Expr\PropertyFetch) {
144+
$fetchedOnType = $scope->getType($node->var);
145+
$classNames = $fetchedOnType->getReferencedClasses();
146+
foreach ($classNames as $className) {
147+
$this->addClassToDependencies($className, $dependenciesReflections);
148+
}
149+
150+
$propertyType = $scope->getType($node);
151+
foreach ($propertyType->getReferencedClasses() as $referencedClass) {
152+
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
153+
}
154+
155+
if ($node->name instanceof Node\Identifier) {
156+
$propertyReflection = $scope->getPropertyReflection($fetchedOnType, $node->name->toString());
157+
if ($propertyReflection !== null) {
158+
$this->addClassToDependencies($propertyReflection->getDeclaringClass()->getName(), $dependenciesReflections);
159+
}
160+
}
135161
} elseif (
136162
$node instanceof Node\Expr\StaticCall
137163
|| $node instanceof Node\Expr\ClassConstFetch

0 commit comments

Comments
 (0)