From 75a43ae08f7c702909bb2cfda2797b7f21875d26 Mon Sep 17 00:00:00 2001 From: Pavel Alexeev Date: Thu, 6 Jan 2022 01:03:30 +0300 Subject: [PATCH 1/2] #38 Try search parent class in the same namespace --- src/Parser/ClassParser.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Parser/ClassParser.php b/src/Parser/ClassParser.php index e23a069..9cec5c6 100644 --- a/src/Parser/ClassParser.php +++ b/src/Parser/ClassParser.php @@ -190,11 +190,21 @@ private function getParentClassStatements(): ?array return []; } - if (null !== $usedClasses[$this->getParentClassName()]) { + if (null !== @$usedClasses[$this->getParentClassName()]) { $parentClass = $usedClasses[$this->getParentClassName()]; } - $rc = new ReflectionClass($parentClass); + try { + $rc = new ReflectionClass($parentClass); + } + catch (\ReflectionException $e) { + try { + $rc = new ReflectionClass($this->getNamespace() . '\\' . $parentClass); + } + catch (\ReflectionException $e) { + throw new ReflectionException("Parent class [{$parentClass}] for [{$this->getNamespace()}\\{$this->getClassName()}] not found!", $e->getCode(), $e); + } + } $filename = $rc->getFileName(); if (false === $filename) { From 46b8934889338dff18e2bd2e9e2cbef6f94f7a3f Mon Sep 17 00:00:00 2001 From: Pavel Alexeev Date: Thu, 6 Jan 2022 01:25:55 +0300 Subject: [PATCH 2/2] Account use aliases in resolving parent classes --- src/Parser/ClassParser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Parser/ClassParser.php b/src/Parser/ClassParser.php index 9cec5c6..0864d76 100644 --- a/src/Parser/ClassParser.php +++ b/src/Parser/ClassParser.php @@ -104,7 +104,7 @@ public function getUsedClasses(): array if ($nStatement instanceof Use_) { /** @var UseUse $use */ foreach ($nStatement->uses as $use) { - $className = $use->name->parts[array_key_last($use->name->parts)]; + $className = $use->alias ? $use->alias->name : $use->name->parts[array_key_last($use->name->parts)]; $usedClasses[$className] = implode('\\', $use->name->parts); } }