Skip to content

[BetterPhpDocParser] Wrong detection of @ORM\Entity #2085

@ostrolucky

Description

@ostrolucky
Subject Details
PHP version PHP 7.3
Full Command ./vendor/bin/rector process --set symfony33 src/AppBundle/Controller/PaymentController.php --debug

Current Behaviour

Rector v0.5.13

[parsing] /Users/gostrolucky/PhpstormProjects/calida/community/src/AppBundle/Controller/PaymentController.php
[refactoring] /Users/gostrolucky/PhpstormProjects/calida/community/src/AppBundle/Controller/PaymentController.php
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
[applying] Rector\Rector\Argument\ArgumentAdderRector
[applying] Rector\Renaming\Rector\Class_\RenameClassRector
PHP Fatal error:  Uncaught Rector\Exception\ShouldNotHappenException: Look at "Rector\BetterPhpDocParser\PhpDocNodeFactory\Doctrine\Class_\EntityPhpDocNodeFactory::createFromNodeAndTokens()" on line 24 in /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocNodeFactory/Doctrine/Class_/EntityPhpDocNodeFactory.php:24
Stack trace:
#0 /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocParser/BetterPhpDocParser.php(159): Rector\BetterPhpDocParser\PhpDocNodeFactory\Doctrine\Class_\EntityPhpDocNodeFactory->createFromNodeAndTokens(Object(PhpParser\Node\Stmt\ClassMethod), Object(PHPStan\PhpDocParser\Parser\TokenIterator))
#1 /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocParser/BetterPhpDocParser.php(141): Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parseTagValue(Object(PHPStan\PhpDocParser\Parser\TokenIterator), '@Entity')
#2 /Users/gostr in /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocNodeFactory/Doctrine/Class_/EntityPhpDocNodeFactory.php on line 24

Fatal error: Uncaught Rector\Exception\ShouldNotHappenException: Look at "Rector\BetterPhpDocParser\PhpDocNodeFactory\Doctrine\Class_\EntityPhpDocNodeFactory::createFromNodeAndTokens()" on line 24 in /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocNodeFactory/Doctrine/Class_/EntityPhpDocNodeFactory.php:24
Stack trace:
#0 /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocParser/BetterPhpDocParser.php(159): Rector\BetterPhpDocParser\PhpDocNodeFactory\Doctrine\Class_\EntityPhpDocNodeFactory->createFromNodeAndTokens(Object(PhpParser\Node\Stmt\ClassMethod), Object(PHPStan\PhpDocParser\Parser\TokenIterator))
#1 /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocParser/BetterPhpDocParser.php(141): Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parseTagValue(Object(PHPStan\PhpDocParser\Parser\TokenIterator), '@Entity')
#2 /Users/gostr in /Users/gostrolucky/PhpstormProjects/calida/community/vendor/rector/rector/packages/BetterPhpDocParser/src/PhpDocNodeFactory/Doctrine/Class_/EntityPhpDocNodeFactory.php on line 24
use AppBundle\Document;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Component\HttpFoundation\Response;

final class PaymentController extends Controller
{
    /**
     * @Entity("user", expr="repository.findOneBy({'legalInformation.payment.uboDeclarationId': uboDeclarationId})")
     */
    public function hookUboAction(Document\User $user): Response
    {
        return new Response();
    }
}

Expected Behaviour

This is not an ORM\Entity, but Sensio Entity annotation. Doc parser contains logic to compare full namespace, but failing to do so ignores it for some reason and matches only last part of FCQN. It should not match EntityPhpDocNodeFactory for given example code.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions