From 9f5d6b9c9ab814382bacc1c127e1807ecc7aaec0 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 20 Apr 2023 12:38:51 +0200 Subject: [PATCH] Remove runtime autoloading from NodeTypeResolver (#3627) * Remove runtime autoloading from NodeTypeResolver * refactor --- .../NodeTypeResolver/NodeTypeResolver.php | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/NodeTypeResolver/NodeTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver.php index ae09c036710..d6eb0bc0bd0 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver.php @@ -52,11 +52,6 @@ final class NodeTypeResolver */ private array $nodeTypeResolvers = []; - /** - * @var array - */ - private array $traitExistsCache = []; - /** * @param NodeTypeResolverInterface[] $nodeTypeResolvers */ @@ -341,32 +336,36 @@ private function resolveByNodeTypeResolvers(Node $node): ?Type private function isObjectTypeOfObjectType(ObjectType $resolvedObjectType, ObjectType $requiredObjectType): bool { - if ($resolvedObjectType->getClassName() === $requiredObjectType->getClassName()) { + $requiredClassName = $requiredObjectType->getClassName(); + $resolvedClassName = $resolvedObjectType->getClassName(); + + if ($resolvedClassName === $requiredClassName) { return true; } - if ($resolvedObjectType->isInstanceOf($requiredObjectType->getClassName())->yes()) { + if ($resolvedObjectType->isInstanceOf($requiredClassName)->yes()) { return true; } - if (! $this->reflectionProvider->hasClass($resolvedObjectType->getClassName())) { + if (! $this->reflectionProvider->hasClass($requiredClassName)) { return false; } + $requiredClassReflection = $this->reflectionProvider->getClass($requiredClassName); - $classReflection = $this->reflectionProvider->getClass($resolvedObjectType->getClassName()); - if (! isset($this->traitExistsCache[$classReflection->getName()])) { - $this->traitExistsCache[$classReflection->getName()] = \trait_exists($requiredObjectType->getClassName()); + if (! $this->reflectionProvider->hasClass($resolvedClassName)) { + return false; } + $resolvedClassReflection = $this->reflectionProvider->getClass($resolvedClassName); - if ($this->traitExistsCache[$classReflection->getName()]) { - foreach ($classReflection->getAncestors() as $ancestorClassReflection) { - if ($ancestorClassReflection->hasTraitUse($requiredObjectType->getClassName())) { + if ($requiredClassReflection->isTrait()) { + foreach ($resolvedClassReflection->getAncestors() as $ancestorClassReflection) { + if ($ancestorClassReflection->hasTraitUse($requiredClassName)) { return true; } } } - return $classReflection->isSubclassOf($requiredObjectType->getClassName()); + return $resolvedClassReflection->isSubclassOf($requiredClassName); } private function resolveObjectType(ObjectType $resolvedObjectType, ObjectType $requiredObjectType): bool