diff --git a/src/Reflection/Annotations/AnnotationsMethodsClassReflectionExtension.php b/src/Reflection/Annotations/AnnotationsMethodsClassReflectionExtension.php index fff338b30f..b7d9c7fbbc 100644 --- a/src/Reflection/Annotations/AnnotationsMethodsClassReflectionExtension.php +++ b/src/Reflection/Annotations/AnnotationsMethodsClassReflectionExtension.php @@ -84,21 +84,23 @@ private function findClassReflectionWithMethod( return $methodWithDeclaringClass; } - foreach ($classReflection->getParents() as $parentClass) { + $parentClass = $classReflection->getParentClass(); + while ($parentClass !== null) { $methodWithDeclaringClass = $this->findClassReflectionWithMethod($parentClass, $parentClass, $methodName); - if ($methodWithDeclaringClass === null) { - foreach ($parentClass->getTraits() as $traitClass) { - $parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithMethod($traitClass, $parentClass, $methodName); - if ($parentTraitMethodWithDeclaringClass === null) { - continue; - } + if ($methodWithDeclaringClass !== null) { + return $methodWithDeclaringClass; + } - return $parentTraitMethodWithDeclaringClass; + foreach ($parentClass->getTraits() as $traitClass) { + $parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithMethod($traitClass, $parentClass, $methodName); + if ($parentTraitMethodWithDeclaringClass === null) { + continue; } - continue; + + return $parentTraitMethodWithDeclaringClass; } - return $methodWithDeclaringClass; + $parentClass = $parentClass->getParentClass(); } foreach ($classReflection->getInterfaces() as $interfaceClass) { diff --git a/src/Reflection/Annotations/AnnotationsPropertiesClassReflectionExtension.php b/src/Reflection/Annotations/AnnotationsPropertiesClassReflectionExtension.php index 9c6cd14b48..f787609d88 100644 --- a/src/Reflection/Annotations/AnnotationsPropertiesClassReflectionExtension.php +++ b/src/Reflection/Annotations/AnnotationsPropertiesClassReflectionExtension.php @@ -74,21 +74,23 @@ private function findClassReflectionWithProperty( return $methodWithDeclaringClass; } - foreach ($classReflection->getParents() as $parentClass) { + $parentClass = $classReflection->getParentClass(); + while ($parentClass !== null) { $methodWithDeclaringClass = $this->findClassReflectionWithProperty($parentClass, $parentClass, $propertyName); - if ($methodWithDeclaringClass === null) { - foreach ($parentClass->getTraits() as $traitClass) { - $parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithProperty($traitClass, $parentClass, $propertyName); - if ($parentTraitMethodWithDeclaringClass === null) { - continue; - } + if ($methodWithDeclaringClass !== null) { + return $methodWithDeclaringClass; + } - return $parentTraitMethodWithDeclaringClass; + foreach ($parentClass->getTraits() as $traitClass) { + $parentTraitMethodWithDeclaringClass = $this->findClassReflectionWithProperty($traitClass, $parentClass, $propertyName); + if ($parentTraitMethodWithDeclaringClass === null) { + continue; } - continue; + + return $parentTraitMethodWithDeclaringClass; } - return $methodWithDeclaringClass; + $parentClass = $parentClass->getParentClass(); } foreach ($classReflection->getInterfaces() as $interfaceClass) { diff --git a/src/Reflection/Mixin/MixinMethodsClassReflectionExtension.php b/src/Reflection/Mixin/MixinMethodsClassReflectionExtension.php index ed0172fda6..484690a8b7 100644 --- a/src/Reflection/Mixin/MixinMethodsClassReflectionExtension.php +++ b/src/Reflection/Mixin/MixinMethodsClassReflectionExtension.php @@ -74,13 +74,14 @@ private function findMethod(ClassReflection $classReflection, string $methodName return new MixinMethodReflection($method, $static); } - foreach ($classReflection->getParents() as $parentClass) { + $parentClass = $classReflection->getParentClass(); + while ($parentClass !== null) { $method = $this->findMethod($parentClass, $methodName); - if ($method === null) { - continue; + if ($method !== null) { + return $method; } - return $method; + $parentClass = $parentClass->getParentClass(); } return null; diff --git a/src/Reflection/Mixin/MixinPropertiesClassReflectionExtension.php b/src/Reflection/Mixin/MixinPropertiesClassReflectionExtension.php index 1aae970c83..b891da3894 100644 --- a/src/Reflection/Mixin/MixinPropertiesClassReflectionExtension.php +++ b/src/Reflection/Mixin/MixinPropertiesClassReflectionExtension.php @@ -65,13 +65,14 @@ private function findProperty(ClassReflection $classReflection, string $property return $property; } - foreach ($classReflection->getParents() as $parentClass) { + $parentClass = $classReflection->getParentClass(); + while ($parentClass !== null) { $property = $this->findProperty($parentClass, $propertyName); - if ($property === null) { - continue; + if ($property !== null) { + return $property; } - return $property; + $parentClass = $parentClass->getParentClass(); } return null;