Skip to content

Commit 2d58174

Browse files
authored
Made parent class reflection resolving lazier
1 parent 6754c23 commit 2d58174

4 files changed

Lines changed: 34 additions & 28 deletions

src/Reflection/Annotations/AnnotationsMethodsClassReflectionExtension.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,23 @@ private function findClassReflectionWithMethod(
8484
return $methodWithDeclaringClass;
8585
}
8686

87-
foreach ($classReflection->getParents() as $parentClass) {
87+
$parentClass = $classReflection->getParentClass();
88+
while ($parentClass !== null) {
8889
$methodWithDeclaringClass = $this->findClassReflectionWithMethod($parentClass, $parentClass, $methodName);
89-
if ($methodWithDeclaringClass === null) {
90-
foreach ($parentClass->getTraits() as $traitClass) {
91-
$parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithMethod($traitClass, $parentClass, $methodName);
92-
if ($parentTraitMethodWithDeclaringClass === null) {
93-
continue;
94-
}
90+
if ($methodWithDeclaringClass !== null) {
91+
return $methodWithDeclaringClass;
92+
}
9593

96-
return $parentTraitMethodWithDeclaringClass;
94+
foreach ($parentClass->getTraits() as $traitClass) {
95+
$parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithMethod($traitClass, $parentClass, $methodName);
96+
if ($parentTraitMethodWithDeclaringClass === null) {
97+
continue;
9798
}
98-
continue;
99+
100+
return $parentTraitMethodWithDeclaringClass;
99101
}
100102

101-
return $methodWithDeclaringClass;
103+
$parentClass = $parentClass->getParentClass();
102104
}
103105

104106
foreach ($classReflection->getInterfaces() as $interfaceClass) {

src/Reflection/Annotations/AnnotationsPropertiesClassReflectionExtension.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,23 @@ private function findClassReflectionWithProperty(
7474
return $methodWithDeclaringClass;
7575
}
7676

77-
foreach ($classReflection->getParents() as $parentClass) {
77+
$parentClass = $classReflection->getParentClass();
78+
while ($parentClass !== null) {
7879
$methodWithDeclaringClass = $this->findClassReflectionWithProperty($parentClass, $parentClass, $propertyName);
79-
if ($methodWithDeclaringClass === null) {
80-
foreach ($parentClass->getTraits() as $traitClass) {
81-
$parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithProperty($traitClass, $parentClass, $propertyName);
82-
if ($parentTraitMethodWithDeclaringClass === null) {
83-
continue;
84-
}
80+
if ($methodWithDeclaringClass !== null) {
81+
return $methodWithDeclaringClass;
82+
}
8583

86-
return $parentTraitMethodWithDeclaringClass;
84+
foreach ($parentClass->getTraits() as $traitClass) {
85+
$parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithProperty($traitClass, $parentClass, $propertyName);
86+
if ($parentTraitMethodWithDeclaringClass === null) {
87+
continue;
8788
}
88-
continue;
89+
90+
return $parentTraitMethodWithDeclaringClass;
8991
}
9092

91-
return $methodWithDeclaringClass;
93+
$parentClass = $parentClass->getParentClass();
9294
}
9395

9496
foreach ($classReflection->getInterfaces() as $interfaceClass) {

src/Reflection/Mixin/MixinMethodsClassReflectionExtension.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,14 @@ private function findMethod(ClassReflection $classReflection, string $methodName
7474
return new MixinMethodReflection($method, $static);
7575
}
7676

77-
foreach ($classReflection->getParents() as $parentClass) {
77+
$parentClass = $classReflection->getParentClass();
78+
while ($parentClass !== null) {
7879
$method = $this->findMethod($parentClass, $methodName);
79-
if ($method === null) {
80-
continue;
80+
if ($method !== null) {
81+
return $method;
8182
}
8283

83-
return $method;
84+
$parentClass = $parentClass->getParentClass();
8485
}
8586

8687
return null;

src/Reflection/Mixin/MixinPropertiesClassReflectionExtension.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,14 @@ private function findProperty(ClassReflection $classReflection, string $property
6565
return $property;
6666
}
6767

68-
foreach ($classReflection->getParents() as $parentClass) {
68+
$parentClass = $classReflection->getParentClass();
69+
while ($parentClass !== null) {
6970
$property = $this->findProperty($parentClass, $propertyName);
70-
if ($property === null) {
71-
continue;
71+
if ($property !== null) {
72+
return $property;
7273
}
7374

74-
return $property;
75+
$parentClass = $parentClass->getParentClass();
7576
}
7677

7778
return null;

0 commit comments

Comments
 (0)