From 25a52c00ef82156f3ef160abbfc0d2272d55be54 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Fri, 21 Jun 2024 13:51:51 +0700 Subject: [PATCH] refactor: use `ClassUtil::getAllClassesFromObject()` for `class_parents()` + `class_implements()` (#77) --- CHANGELOG.md | 2 ++ .../ObjectToObjectMetadataFactory.php | 16 +-------- src/Util/ClassUtil.php | 27 ++++++++++++++ src/Util/TypeUtil.php | 35 +------------------ 4 files changed, 31 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3c86be..372c4ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * build: add github-actions to dependabot * build: update php-cs-fixer +* refactor: use `ClassUtil::getAllClassesFromObject()` for `class_parents()` + + `class_implements()` ## 1.5.0 diff --git a/src/Transformer/ObjectToObjectMetadata/Implementation/ObjectToObjectMetadataFactory.php b/src/Transformer/ObjectToObjectMetadata/Implementation/ObjectToObjectMetadataFactory.php index cf1044a..ea5fb2a 100644 --- a/src/Transformer/ObjectToObjectMetadata/Implementation/ObjectToObjectMetadataFactory.php +++ b/src/Transformer/ObjectToObjectMetadata/Implementation/ObjectToObjectMetadataFactory.php @@ -89,21 +89,7 @@ private function resolveTargetClass( // or an interface, we try to find the InheritanceMap from the // source - $parents = class_parents($sourceClass, true); - if ($parents === false) { - $parents = []; - } - - $interfaces = class_implements($sourceClass, true); - if ($interfaces === false) { - $interfaces = []; - } - - $sourceClasses = [ - $sourceClass, - ...$parents, - ...$interfaces, - ]; + $sourceClasses = ClassUtil::getAllClassesFromObject($sourceClass); foreach ($sourceClasses as $currentSourceClass) { $sourceReflection = new \ReflectionClass($currentSourceClass); diff --git a/src/Util/ClassUtil.php b/src/Util/ClassUtil.php index 7713647..318c4a1 100644 --- a/src/Util/ClassUtil.php +++ b/src/Util/ClassUtil.php @@ -145,4 +145,31 @@ public static function getSkippedProperties( return $skippedProperties; } + + + /** + * @param object|class-string $objectOrClass + * @return array + */ + public static function getAllClassesFromObject( + object|string $objectOrClass + ): array { + $class = is_object($objectOrClass) ? $objectOrClass::class : $objectOrClass; + + $parents = class_parents($class, true); + if ($parents === false) { + $parents = []; + } + + $interfaces = class_implements($class, true); + if ($interfaces === false) { + $interfaces = []; + } + + return [ + $class, + ...array_values($parents), + ...array_values($interfaces), + ]; + } } diff --git a/src/Util/TypeUtil.php b/src/Util/TypeUtil.php index 1b8e7ee..d4ff760 100644 --- a/src/Util/TypeUtil.php +++ b/src/Util/TypeUtil.php @@ -114,7 +114,7 @@ private static function getTypePermutations( /** @var class-string */ $typeClass = $type->getClassName(); - foreach (self::getAllClassesFromObject($typeClass) as $class) { + foreach (ClassUtil::getAllClassesFromObject($typeClass) as $class) { $newTypes[] = new Type( builtinType: $type->getBuiltinType(), nullable: $type->isNullable(), @@ -404,39 +404,6 @@ public static function getAllTypeStrings( return $typeStrings; } - /** - * @param object|class-string $objectOrClass - * @return array - */ - private static function getAllClassesFromObject( - object|string $objectOrClass - ): array { - $classes = []; - - $class = is_object($objectOrClass) ? $objectOrClass::class : $objectOrClass; - $classes[] = $class; - - $parents = class_parents($class); - if ($parents === false) { - $parents = []; - } - - foreach ($parents as $parentClass) { - $classes[] = $parentClass; - } - - $interfaces = class_implements($class); - if ($interfaces === false) { - $interfaces = []; - } - - foreach ($interfaces as $interface) { - $classes[] = $interface; - } - - return $classes; - } - /** * @param Type|MixedType $type * @return array