diff --git a/phpunit.rector.xml b/phpunit.rector.xml index 25e0d25aa..73fbee8e5 100644 --- a/phpunit.rector.xml +++ b/phpunit.rector.xml @@ -1,13 +1,24 @@ - - - - utils/rector/tests - - - - - utils/rector/src - - + + + + utils/rector/tests + + + + + utils/rector/src + + diff --git a/utils/rector/src/Rector/ChillBundleAddNormalizationMethodsOnExportRector.php b/utils/rector/src/Rector/ChillBundleAddNormalizationMethodsOnExportRector.php index e5d265ed4..cd660a5ef 100644 --- a/utils/rector/src/Rector/ChillBundleAddNormalizationMethodsOnExportRector.php +++ b/utils/rector/src/Rector/ChillBundleAddNormalizationMethodsOnExportRector.php @@ -78,9 +78,13 @@ class ChillBundleAddNormalizationMethodsOnExportRector extends AbstractRector foreach ($node->stmts as $k => $stmt) { if ($stmt instanceof Node\Stmt\TraitUse) { - if (ExportDataNormalizerTrait::class === $stmt->traits[0]->toString()) { + $trait = $stmt->traits[0]; + + if (str_contains($trait->toString(), ExportDataNormalizerTrait::class)) { $hasTraitHelper = true; } + + continue; } elseif (!$stmt instanceof Node\Stmt\ClassMethod) { continue; } @@ -97,6 +101,10 @@ class ChillBundleAddNormalizationMethodsOnExportRector extends AbstractRector } } + if ($hasDenormalizeMethod && $hasNormalizedMethod && $hasGetVersionMethod) { + return null; + } + $toAddBefore = []; $toAdd = []; @@ -105,17 +113,20 @@ class ChillBundleAddNormalizationMethodsOnExportRector extends AbstractRector $propertiesOnForm = $this->getPropertiesOnForm($buildForm); // if the trait is not present, we add it into the statements - if (!$hasTraitHelper && array_reduce( - $propertiesOnForm, - function (bool $carry, string $item): bool { - if ('entity' === $item || 'date' === $item) { - return true; - } + if ( + !$hasTraitHelper + && (!$hasNormalizedMethod || !$hasDenormalizeMethod) + && array_reduce( + $propertiesOnForm, + function (bool $carry, string $item): bool { + if ('entity' === $item || 'date' === $item) { + return true; + } - return $carry; - }, - false, - )) { + return $carry; + }, + false, + )) { $toAddBefore[] = new Node\Stmt\TraitUse([ new Node\Name('\\'.ExportDataNormalizerTrait::class), ]); diff --git a/utils/rector/tests/ChillBundleAddNormalizationMethodsOnExportRector/Fixture/add-method-with-already-trait.php.inc b/utils/rector/tests/ChillBundleAddNormalizationMethodsOnExportRector/Fixture/add-method-with-already-trait.php.inc new file mode 100644 index 000000000..8911a671d --- /dev/null +++ b/utils/rector/tests/ChillBundleAddNormalizationMethodsOnExportRector/Fixture/add-method-with-already-trait.php.inc @@ -0,0 +1,109 @@ +add('entity', EntityType::class, []); + } + + public function getFormDefaultData(): array + { + return []; + } + + public function describeAction($data, $format = 'string') + { + return []; + } + + public function addRole(): ?string + { + return null; + } + + public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext) + { + // nothing to add here + } + + public function applyOn() + { + return ['something']; + } +} + +?> +----- +add('entity', EntityType::class, []); + } + public function getNormalizationVersion(): int + { + return 1; + } + public function normalizeFormData(array $formData): array + { + return ['entity' => $this->normalizeDoctrineEntity($formData['entity'])]; + } + public function denormalizeFormData(array $formData, int $fromVersion): array + { + return ['entity' => $this->denormalizeDoctrineEntity($formData['entity'], $this->someRepository)]; + } + + public function getFormDefaultData(): array + { + return []; + } + + public function describeAction($data, $format = 'string') + { + return []; + } + + public function addRole(): ?string + { + return null; + } + + public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext) + { + // nothing to add here + } + + public function applyOn() + { + return ['something']; + } +} + +?>