Skip to content

Commit

Permalink
refactor: use ClassUtil::getAllClassesFromObject() for `class_paren…
Browse files Browse the repository at this point in the history
…ts()` + `class_implements()` (#77)
  • Loading branch information
priyadi committed Jun 21, 2024
1 parent cc42373 commit 25a52c0
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 49 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
27 changes: 27 additions & 0 deletions src/Util/ClassUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,4 +145,31 @@ public static function getSkippedProperties(

return $skippedProperties;
}


/**
* @param object|class-string $objectOrClass
* @return array<int,class-string>
*/
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),
];
}
}
35 changes: 1 addition & 34 deletions src/Util/TypeUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down Expand Up @@ -404,39 +404,6 @@ public static function getAllTypeStrings(
return $typeStrings;
}

/**
* @param object|class-string $objectOrClass
* @return array<int,class-string>
*/
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<int,Type>
Expand Down

0 comments on commit 25a52c0

Please sign in to comment.