diff --git a/packages/better-php-doc-parser/src/AnnotationReader/NodeAnnotationReader.php b/packages/better-php-doc-parser/src/AnnotationReader/NodeAnnotationReader.php index 48de1310ab3f..a1e2c1add568 100644 --- a/packages/better-php-doc-parser/src/AnnotationReader/NodeAnnotationReader.php +++ b/packages/better-php-doc-parser/src/AnnotationReader/NodeAnnotationReader.php @@ -58,12 +58,14 @@ public function readMethodAnnotation(ClassMethod $classMethod, string $annotatio /** @var object[] $methodAnnotations */ $methodAnnotations = $this->reader->getMethodAnnotations($reflectionMethod); + foreach ($methodAnnotations as $methodAnnotation) { if (! is_a($methodAnnotation, $annotationClassName, true)) { continue; } $objectHash = md5(spl_object_hash($classMethod) . serialize($methodAnnotation)); + if (in_array($objectHash, $this->alreadyProvidedAnnotations, true)) { continue; } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Symfony/SymfonyRoutePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Symfony/SymfonyRoutePhpDocNodeFactory.php index 9d7532a17ca1..6e744c6bb819 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Symfony/SymfonyRoutePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Symfony/SymfonyRoutePhpDocNodeFactory.php @@ -38,7 +38,7 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator return new SymfonyRouteTagValueNode( $route->getPath(), - method_exists($route, 'getLocalizedPaths') ? $route->getLocalizedPaths() : [], + $this->getLocalizedPaths($route), $route->getName(), $route->getMethods(), $route->getOptions(), @@ -49,4 +49,13 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator $annotationContent ); } + + private function getLocalizedPaths(Route $route): array + { + if (method_exists($route, 'getLocalizedPaths')) { + return $route->getLocalizedPaths(); + } + + return []; + } } diff --git a/packages/better-php-doc-parser/src/Printer/PhpDocInfoPrinter.php b/packages/better-php-doc-parser/src/Printer/PhpDocInfoPrinter.php index c36e591188dc..ba4756ffb617 100644 --- a/packages/better-php-doc-parser/src/Printer/PhpDocInfoPrinter.php +++ b/packages/better-php-doc-parser/src/Printer/PhpDocInfoPrinter.php @@ -145,6 +145,11 @@ private function printPhpDocNode(AttributeAwarePhpDocNode $attributeAwarePhpDocN $output = '/**' . $output; } + // fix missing end + if (Strings::match($output, '#^(/\*\*)#') && $output && ! Strings::match($output, '#\s\*\/(\s+)?$#')) { + $output .= ' */'; + } + return $output; } diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/DoctrineTest.php b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/DoctrineTest.php index 70ed17e2afac..b68afdf65512 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/DoctrineTest.php +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/DoctrineTest.php @@ -11,6 +11,7 @@ use Rector\BetterPhpDocParser\Tests\PhpDocInfo\PhpDocInfoPrinter\Source\Doctrine\CaseSensitive; use Rector\BetterPhpDocParser\Tests\PhpDocInfo\PhpDocInfoPrinter\Source\Doctrine\IndexInTable; use Rector\BetterPhpDocParser\Tests\PhpDocInfo\PhpDocInfoPrinter\Source\Doctrine\Short; +use Symplify\SmartFileSystem\SmartFileInfo; final class DoctrineTest extends AbstractPhpDocInfoPrinterTest { @@ -22,11 +23,10 @@ public function testClass(string $docFilePath, Node $node): void $docComment = FileSystem::read($docFilePath); $phpDocInfo = $this->createPhpDocInfoFromDocCommentAndNode($docComment, $node); - $this->assertSame( - $docComment, - $this->phpDocInfoPrinter->printFormatPreserving($phpDocInfo), - 'Caused in ' . $docFilePath - ); + $fileInfo = new SmartFileInfo($docFilePath); + $message = $fileInfo->getRelativeFilePathFromCwd(); + + $this->assertSame($docComment, $this->phpDocInfoPrinter->printFormatPreserving($phpDocInfo), $message); } public function provideDataClass(): Iterator diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/MultilineTest.php b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/MultilineTest.php index 99ce7a156542..f5cfdbce1959 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/MultilineTest.php +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/MultilineTest.php @@ -20,6 +20,7 @@ use Rector\BetterPhpDocParser\Tests\PhpDocInfo\PhpDocInfoPrinter\Source\SinglePropertyClass; use Rector\BetterPhpDocParser\Tests\PhpDocInfo\PhpDocInfoPrinter\Source\TableClass; use Rector\NodeTypeResolver\Node\AttributeKey; +use Symplify\SmartFileSystem\SmartFileInfo; final class MultilineTest extends AbstractPhpDocInfoPrinterTest { @@ -33,7 +34,10 @@ public function test(string $docFilePath, Node $node): void $docComment = FileSystem::read($docFilePath); $phpDocInfo = $this->createPhpDocInfoFromDocCommentAndNode($docComment, $node); - $this->assertSame($docComment, $this->phpDocInfoPrinter->printFormatPreserving($phpDocInfo)); + $fileInfo = new SmartFileInfo($docFilePath); + $message = $fileInfo->getRelativeFilePathFromCwd(); + + $this->assertSame($docComment, $this->phpDocInfoPrinter->printFormatPreserving($phpDocInfo), $message); } public function provideData(): Iterator diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/case_sensitive.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/case_sensitive.txt index 7ddbf089b1a8..c93e2d976b9c 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/case_sensitive.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/case_sensitive.txt @@ -6,3 +6,4 @@ * @Orm\Index(name="dateTo_idx", columns={"dateTo"}), * } * ) + */ diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/short.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/short.txt index 04c0f4db1041..e6d9fcf1777a 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/short.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Doctrine/short.txt @@ -4,3 +4,4 @@ * @UniqueConstraint(name="content_status_unique", columns={"content_id", "site_id", "lang"}) * } * ) + */ diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize.txt index bb1e1bfeb7cf..e4ccdcb75191 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize.txt @@ -6,4 +6,3 @@ * @Serializer\Type("boolean") * @var bool */ -public $anotherProperty; diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize_single_line.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize_single_line.txt index 6e9049c8a3b6..3912c81150b0 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize_single_line.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/assert_serialize_single_line.txt @@ -3,4 +3,3 @@ * "bool" * ) */ -public $anotherSerializeSingleLine; diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/many_to.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/many_to.txt index d8913f425157..cf246d44df4c 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/many_to.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/many_to.txt @@ -10,4 +10,3 @@ * protocols = {"https"} * ) */ -private $manyTo; \ No newline at end of file diff --git a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/multiline6.txt b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/multiline6.txt index 204eb1db10c1..9651d358aabb 100644 --- a/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/multiline6.txt +++ b/packages/better-php-doc-parser/tests/PhpDocInfo/PhpDocInfoPrinter/Source/Multiline/multiline6.txt @@ -5,4 +5,3 @@ * @ORM\JoinColumn(referencedColumnName="id") * }) */ -protected $someProperty; diff --git a/packages/better-php-doc-parser/tests/PhpDocParser/TagValueNodeReprint/Fixture/DoctrineColumn/InlinedColumn.php b/packages/better-php-doc-parser/tests/PhpDocParser/TagValueNodeReprint/Fixture/DoctrineColumn/InlinedColumn.php new file mode 100644 index 000000000000..5493b5485f69 --- /dev/null +++ b/packages/better-php-doc-parser/tests/PhpDocParser/TagValueNodeReprint/Fixture/DoctrineColumn/InlinedColumn.php @@ -0,0 +1,13 @@ +