-
-
Notifications
You must be signed in to change notification settings - Fork 737
Closed
rectorphp/rector-src
#2808Labels
Description
Bug Report
| Subject | Details |
|---|---|
| Rector version | 0.14.0 |
When running rector on fairly complex Laravel project it crashes when using importNames() option on files with anonymouse migration classes.
After some digging I've found that it is related to the @SupressWarnings annotation for phpmd placed in the docblock and extends clause to the anonymous class.
Minimal PHP Code Causing Issue
https://getrector.org/demo/7c707108-2446-4131-840c-06902b157199
Hovewer the error differs from the error that I found in the rector output:
[ERROR] Could not process "database/migrations/2021_10_11_200031_create_tagging_tagged.php" file, due to:
"System error: "Undefined array key "AnonymousClass74d2a512287fe15ba1fc9f5f8e6c8dd5""
Stack trace:
#0 C:\project\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(257):
Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Undefined array...', 'C:\\laragon\\www\\...', 234)
#1
C:\project\vendor\rector\rector\vendor\nette\utils\src\Utils\Reflection.php(234):
Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}(2, 'Undefined array...',
'C:\\laragon\\www\\...', 234)
#2
C:\project\vendor\rector\rector\vendor\nette\utils\src\Utils\Reflection.php(208):
RectorPrefix202208\Nette\Utils\Reflection::getUseStatements(Object(PHPStan\BetterReflection\Reflection\Adapter\Reflectio
nClass))
#3 C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ShortNameResolver.php(214):
RectorPrefix202208\Nette\Utils\Reflection::expandClassName('SuppressWarning...',
Object(PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass))
#4
C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ShortNameResolver.php(185):
Rector\CodingStyle\ClassNameImport\ShortNameResolver->fqnizeShortNames(Array,
Object(PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass), Array)
#5
C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ShortNameResolver.php(150):
Rector\CodingStyle\ClassNameImport\ShortNameResolver->resolveFromStmtsDocBlocks(Array)
#6
C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ShortNameResolver.php(96):
Rector\CodingStyle\ClassNameImport\ShortNameResolver->resolveForStmts(Array)
#7
C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\FullyQualified
NameClassNameImportSkipVoter.php(35):
Rector\CodingStyle\ClassNameImport\ShortNameResolver->resolveFromFile(Object(Rector\Core\ValueObject\Application\File))
#8 C:\project\vendor\rector\rector\rules\CodingStyle\ClassNameImport\ClassNameImportSkipper.php(37):
Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\FullyQualifiedNameClassNameImportSkipVoter->shouldSkip(Obje
ct(Rector\Core\ValueObject\Application\File), Object(Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType),
Object(PhpParser\Node\Name\FullyQualified))
#9
C:\project\vendor\rector\rector\rules\CodingStyle\Node\NameImporter.php(118):
Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper->shouldSkipNameForFullyQualifiedObjectType(Object(Rector\Core
\ValueObject\Application\File), Object(PhpParser\Node\Name\FullyQualified),
Object(Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType))
#10
C:\project\vendor\rector\rector\rules\CodingStyle\Node\NameImporter.php(86):
Rector\CodingStyle\Node\NameImporter->importNameAndCollectNewUseStatement(Object(Rector\Core\ValueObject\Application\Fi
le), Object(PhpParser\Node\Name\FullyQualified),
Object(Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType), 'Illuminate\\Data...')
#11
C:\project\vendor\rector\rector\packages\PostRector\Rector\NameImportingPostRector.php(131):
Rector\CodingStyle\Node\NameImporter->importName(Object(PhpParser\Node\Name\FullyQualified),
Object(Rector\Core\ValueObject\Application\File), Array)
#12
C:\project\vendor\rector\rector\packages\PostRector\Rector\NameImportingPostRector.php(87):
Rector\PostRector\Rector\NameImportingPostRector->processNodeName(Object(PhpParser\Node\Name\FullyQualified),
Object(Rector\Core\ValueObject\Application\File))
#13
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(113):
Rector\PostRector\Rector\NameImportingPostRector->enterNode(Object(PhpParser\Node\Name\FullyQualified))
#14
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(133):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Class_))
#15
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(133):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Expr\New_))
#16
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Return_))
#17
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray(Array)
#18
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode(Object(Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace))
#19
C:\project\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(85):
PhpParser\NodeTraverser->traverseArray(Array)
#20
C:\project\vendor\rector\rector\packages\PostRector\Application\PostFileProcessor.php(58):
PhpParser\NodeTraverser->traverse(Array)
#21
C:\project\vendor\rector\rector\src\Application\FileProcessor\PhpFileProcessor.php(95):
Rector\PostRector\Application\PostFileProcessor->traverse(Array)
#22
C:\project\vendor\rector\rector\packages\Parallel\WorkerRunner.php(99):
Rector\Core\Application\FileProcessor\PhpFileProcessor->process(Object(Rector\Core\ValueObject\Application\File),
Object(Rector\Core\ValueObject\Configuration))
#23
C:\project\vendor\rector\rector\vendor\evenement\evenement\src\Evenement\EventEmitterTrait.php(97):
Rector\Parallel\WorkerRunner->Rector\Parallel\{closure}(Array)
#24
C:\project\vendor\rector\rector\vendor\clue\ndjson-react\src\Decoder.php(110):
RectorPrefix202208\Evenement\EventEmitter->emit('data', Array)
#25
C:\project\vendor\rector\rector\vendor\evenement\evenement\src\Evenement\EventEmitterTrait.php(97):
RectorPrefix202208\Clue\React\NDJson\Decoder->handleData(Array)
#26
C:\project\vendor\rector\rector\vendor\react\stream\src\Util.php(62):
RectorPrefix202208\Evenement\EventEmitter->emit('data', Array)
#27
C:\project\vendor\rector\rector\vendor\evenement\evenement\src\Evenement\EventEmitterTrait.php(97):
RectorPrefix202208\React\Stream\Util::RectorPrefix202208\React\Stream\{closure}('{"action":"main...')
#28
C:\project\vendor\rector\rector\vendor\react\stream\src\DuplexResourceStream.php(154):
RectorPrefix202208\Evenement\EventEmitter->emit('data', Array)
#29
C:\project\vendor\rector\rector\vendor\react\event-loop\src\StreamSelectLoop.php(201):
RectorPrefix202208\React\Stream\DuplexResourceStream->handleData(Resource id #3825)
#30
C:\project\vendor\rector\rector\vendor\react\event-loop\src\StreamSelectLoop.php(173):
RectorPrefix202208\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)
#31
C:\project\vendor\rector\rector\src\Console\Command\WorkerCommand.php(63):
RectorPrefix202208\React\EventLoop\StreamSelectLoop->run()
#32
C:\project\vendor\rector\rector\vendor\symfony\console\Command\Command.php(307):
Rector\Core\Console\Command\WorkerCommand->execute(Object(RectorPrefix202208\Symfony\Component\Console\Input\ArgvInput)
, Object(RectorPrefix202208\Symfony\Component\Console\Output\ConsoleOutput))
#33
C:\project\vendor\rector\rector\vendor\symfony\console\Application.php(891):
RectorPrefix202208\Symfony\Component\Console\Command\Command->run(Object(RectorPrefix202208\Symfony\Component\Console\I
nput\ArgvInput), Object(RectorPrefix202208\Symfony\Component\Console\Output\ConsoleOutput))
#34
C:\project\vendor\rector\rector\vendor\symfony\console\Application.php(310):
RectorPrefix202208\Symfony\Component\Console\Application->doRunCommand(Object(Rector\Core\Console\Command\WorkerCommand
), Object(RectorPrefix202208\Symfony\Component\Console\Input\ArgvInput),
Object(RectorPrefix202208\Symfony\Component\Console\Output\ConsoleOutput))
#35
C:\project\vendor\rector\rector\src\Console\ConsoleApplication.php(49):
RectorPrefix202208\Symfony\Component\Console\Application->doRun(Object(RectorPrefix202208\Symfony\Component\Console\Inp
ut\ArgvInput), Object(RectorPrefix202208\Symfony\Component\Console\Output\ConsoleOutput))
#36
C:\project\vendor\rector\rector\vendor\symfony\console\Application.php(208):
Rector\Core\Console\ConsoleApplication->doRun(Object(RectorPrefix202208\Symfony\Component\Console\Input\ArgvInput),
Object(RectorPrefix202208\Symfony\Component\Console\Output\ConsoleOutput))
#37
C:\project\vendor\rector\rector\bin\rector.php(128):
RectorPrefix202208\Symfony\Component\Console\Application->run()
#38
C:\project\vendor\rector\rector\bin\rector(5): require_once('C:\\project\\...')
#39 {main}". On
line: 234
Expected Behaviour
The phpmdm supress annotation should not make rector crash.