From c7379ec641e50e8227f9d3b4ef1306fba324ce6e Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 23 Apr 2023 08:02:36 +0200 Subject: [PATCH] Improve ParentClassMethodTypeOverrideGuard performance (#3660) * Improve ParentClassMethodTypeOverrideGuard performance * use instanceof --- .../ParentClassMethodTypeOverrideGuard.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/VendorLocker/ParentClassMethodTypeOverrideGuard.php b/packages/VendorLocker/ParentClassMethodTypeOverrideGuard.php index fe649f05ec0..43288c41759 100644 --- a/packages/VendorLocker/ParentClassMethodTypeOverrideGuard.php +++ b/packages/VendorLocker/ParentClassMethodTypeOverrideGuard.php @@ -37,14 +37,20 @@ public function getParentClassMethod(ClassMethod $classMethod): ?MethodReflectio /** @var string $methodName */ $methodName = $this->nodeNameResolver->getName($classMethod); - $parentClassReflections = array_merge($classReflection->getParents(), $classReflection->getInterfaces()); + $parentClassReflection = $classReflection->getParentClass(); + while ($parentClassReflection instanceof ClassReflection) { + if ($parentClassReflection->hasNativeMethod($methodName)) { + return $parentClassReflection->getNativeMethod($methodName); + } + $parentClassReflection = $parentClassReflection->getParentClass(); + } - foreach ($parentClassReflections as $parentClassReflection) { - if (! $parentClassReflection->hasNativeMethod($methodName)) { + foreach ($classReflection->getInterfaces() as $interfaceReflection) { + if (! $interfaceReflection->hasNativeMethod($methodName)) { continue; } - return $parentClassReflection->getNativeMethod($methodName); + return $interfaceReflection->getNativeMethod($methodName); } return null;