Skip to content

Commit

Permalink
the fix
Browse files Browse the repository at this point in the history
  • Loading branch information
priyadi committed Jun 21, 2024
1 parent 2e5b13b commit 131aade
Showing 1 changed file with 10 additions and 21 deletions.
31 changes: 10 additions & 21 deletions src/CustomMapper/Implementation/PropertyMapperResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@

use Rekalogika\Mapper\CustomMapper\PropertyMapperResolverInterface;
use Rekalogika\Mapper\ServiceMethod\ServiceMethodSpecification;
use Rekalogika\Mapper\Util\ClassUtil;

/**
* @internal
*
* Not in hot path, no caching needed.
*/
final class PropertyMapperResolver implements PropertyMapperResolverInterface
{
Expand Down Expand Up @@ -52,28 +55,14 @@ public function getPropertyMapper(
string $targetClass,
string $property
): ?ServiceMethodSpecification {
if (!isset($this->propertyMappers[$targetClass][$property])) {
return null;
}

$propertyMappers = $this->propertyMappers[$targetClass][$property];

$sourceClassReflection = new \ReflectionClass($sourceClass);

do {
if (isset($propertyMappers[$sourceClassReflection->getName()])) {
return $propertyMappers[$sourceClassReflection->getName()];
}
} while ($sourceClassReflection = $sourceClassReflection->getParentClass());

$interfaces = class_implements($sourceClass);
if ($interfaces === false) {
return null;
}
$sourceClasses = ClassUtil::getAllClassesFromObject($sourceClass);
$targetClasses = ClassUtil::getAllClassesFromObject($targetClass);

foreach ($interfaces as $interface) {
if (isset($propertyMappers[$interface])) {
return $propertyMappers[$interface];
foreach ($sourceClasses as $sourceClass) {
foreach ($targetClasses as $targetClass) {
if (isset($this->propertyMappers[$targetClass][$property][$sourceClass])) {
return $this->propertyMappers[$targetClass][$property][$sourceClass];
}
}
}

Expand Down

0 comments on commit 131aade

Please sign in to comment.