nodeNameResolver = $nodeNameResolver; $this->reflectionProvider = $reflectionProvider; } public function resolveFromAttribute(Attribute $attribute) : ?string { foreach ($attribute->args as $arg) { if (!$arg->name instanceof Identifier) { continue; } if ($arg->name->toString() !== EntityMappingKey::TARGET_ENTITY) { continue; } return $this->resolveFromExpr($arg->value); } return null; } public function resolveFromExpr(Expr $targetEntityExpr) : ?string { if ($targetEntityExpr instanceof ClassConstFetch) { $targetEntity = (string) $this->nodeNameResolver->getName($targetEntityExpr->class); if (!$this->reflectionProvider->hasClass($targetEntity)) { return null; } return $targetEntity; } if ($targetEntityExpr instanceof String_) { $targetEntity = $targetEntityExpr->value; if (!$this->reflectionProvider->hasClass($targetEntity)) { return null; } return $targetEntity; } $errorMessage = \sprintf('Add support for "%s" targetEntity in "%s"', \get_class($targetEntityExpr), self::class); throw new NotImplementedYetException($errorMessage); } }