From c61c01bfdfd03c92195f77e95756aeb662e05fdf Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 10 Sep 2019 15:34:47 +0200 Subject: [PATCH] add skip of one to one relations with mapped by --- ...AddUuidMirrorForRelationPropertyRector.php | 16 ++++++++- ...uidMirrorForRelationPropertyRectorTest.php | 2 ++ .../Fixture/skip_one_to_one_mapped_by.php.inc | 35 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc diff --git a/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php b/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php index 44af9d549a7a..d0f3491d650c 100644 --- a/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php +++ b/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php @@ -13,6 +13,7 @@ use Rector\Doctrine\Collector\UuidMigrationDataCollector; use Rector\Doctrine\PhpDocParser\Ast\PhpDoc\PhpDocTagNodeFactory; use Rector\DoctrinePhpDocParser\Ast\PhpDoc\Property_\JoinColumnTagValueNode; +use Rector\DoctrinePhpDocParser\Ast\PhpDoc\Property_\OneToOneTagValueNode; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\DoctrineRelationTagValueNodeInterface; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\ToManyTagNodeInterface; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\ToOneTagNodeInterface; @@ -176,7 +177,6 @@ private function shouldSkipProperty(Class_ $class, Property $property): bool } $uuidPropertyName = $this->getName($property) . 'Uuid'; - if ($this->hasClassPropertyName($class, $uuidPropertyName)) { return true; } @@ -190,6 +190,20 @@ private function shouldSkipProperty(Class_ $class, Property $property): bool return true; } + /** @var PhpDocInfo|null $propertyPhpDocInfo */ + $propertyPhpDocInfo = $this->getPhpDocInfo($property); + if ($propertyPhpDocInfo === null) { + return true; + } + + $oneToOneTagValueNode = $propertyPhpDocInfo->getByType(OneToOneTagValueNode::class); + if ($oneToOneTagValueNode) { + // skip mappedBy oneToOne, as the column doesn't really exist + if ($oneToOneTagValueNode->getMappedBy()) { + return true; + } + } + return false; } diff --git a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php index d8a1c5126e6b..2a35218bb4d7 100644 --- a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php +++ b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php @@ -22,8 +22,10 @@ public function provideDataForTest(): iterable { yield [__DIR__ . '/Fixture/to_one.php.inc']; yield [__DIR__ . '/Fixture/to_many.php.inc']; + // skip yield [__DIR__ . '/Fixture/skip_already_added.php.inc']; yield [__DIR__ . '/Fixture/skip_to_many_without_target_entity_uuid.php.inc']; + yield [__DIR__ . '/Fixture/skip_one_to_one_mapped_by.php.inc']; } protected function getRectorClass(): string diff --git a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc new file mode 100644 index 000000000000..36090d853b78 --- /dev/null +++ b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc @@ -0,0 +1,35 @@ +