Skip to content

Error - Could not process file.php file, due to System error - ClassMethodAndPropertyAnalyzer::isLocalPropertyVariableAssign #9567

@MasterGHD

Description

@MasterGHD

Bug Report

Subject Details
Rector version 2.2.14
PHP version 8.2.30 NTS x64 (Ubuntu)
Symfony version 5.4.50

Hello team,

I was testing an upgrade from an old symfony code - from 3.4 to 5.4 - and it was going great until today.

Everytime I try to run the demo, it returns the folloing exception: "System error: "PhpParser\NodeAbstract::getComments(): Return value must be of type array, bool returned".

Minimal PHP Code Causing Issue

For some reason, the demo throws the message: Expected config should return callable RectorConfig instance

rector.php

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
use Rector\Symfony\Set\SymfonySetList;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->paths([
        __DIR__ . '/src',
        __DIR__ . '/tests',
    ]);

    $rectorConfig->importNames(true, false);

    $rectorConfig->skip([
        __DIR__ . '/assets',
        __DIR__ . '/templates',
        __DIR__ . '/docs',
        __DIR__ . '/public',
        __DIR__ . '/web',
        __DIR__ . '/node_modules',
        __DIR__ . '/vendor',
        // Skip all naming rules in entities
        SetList::NAMING => [
            __DIR__ . '/src/GroupName/*/Entity/*',
        ],
    ]);

    $rectorConfig->sets([
        \Rector\Set\ValueObject\LevelSetList::UP_TO_PHP_82,
        SymfonySetList::SYMFONY_54,
        SymfonySetList::SYMFONY_CODE_QUALITY,
        SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
        SetList::CODE_QUALITY,
        SetList::DEAD_CODE,
        SetList::TYPE_DECLARATION,
        SetList::PRIVATIZATION,
        SetList::INSTANCEOF,
        SetList::EARLY_RETURN,
    ]);
};

IpListTextareaType.php

<?php 

declare(strict_types=1);

namespace GroupName\PackageBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;

final class IpListTextareaType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        parent::buildForm($builder, $options);

        $builder->addModelTransformer(new CallbackTransformer(
            function ($ipsAsArray): string {
                return (!empty($ipsAsArray)) ? implode(';', $ipsAsArray) : '';
            },
            function ($ipsAsString): array {
                return array_unique(
                    preg_split(
                        "/[\s;,\r\n]/",
                        (string)$ipsAsString,
                        0,
                        PREG_SPLIT_NO_EMPTY
                    )
                );
            }
        ));
    }

    public function getParent(): string
    {
        return TextareaType::class;
    }
}

Stack trace

[ERROR] Could not process                                                                                              
         "/home/username/projects/project-upgrade/src/GroupName/PackageBundle/Form/Type/IpListTex
         tareaType.php" file, due to:                                                                                   
         "System error: "PhpParser\NodeAbstract::getComments(): Return value must be of type array, bool returned"      
                                                                                                                        
         Stack trace:                                                                                                   
         #0 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php(119):                           
         PhpParser\NodeAbstract->getComments()                                                                          
         #1 vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfoFactory.php(77):                           
         PhpParser\NodeAbstract->getDocComment()                                                                        
         #2 vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php(152):                        
         Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory->createFromNode()                                       
         #3 vendor/rector/rector/src/Rector/AbstractRector.php(115):                                                    
         Rector\Php80\Rector\Class_\AnnotationToAttributeRector->refactor()                                             
         #4 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(91):                    
         Rector\Rector\AbstractRector->enterNode()                                                                      
         #5 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #6 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):                    
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #7 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(114):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #8 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #9 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):                    
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #10 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(114):                  
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #11 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                  
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #12 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #13 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                  
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #14 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #15 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                  
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #16 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #17 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):                  
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()                                  
         #18 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(60):                   
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()                                 
         #19 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(51):                              
         Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverse()                                      
         #20 vendor/rector/rector/src/Application/FileProcessor.php(95):                                                
         Rector\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()                                                 
         #21 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(178):                                    
         Rector\Application\FileProcessor->processFile()                                                                
         #22 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(152):                                    
         Rector\Application\ApplicationFileProcessor->processFile()                                                     
         #23 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(128):                                    
         Rector\Application\ApplicationFileProcessor->processFiles()                                                    
         #24 vendor/rector/rector/src/Console/Command/ProcessCommand.php(182):                                          
         Rector\Application\ApplicationFileProcessor->run()                                                             
         #25 vendor/rector/rector/vendor/symfony/console/Command/Command.php(289):                                      
         Rector\Console\Command\ProcessCommand->execute()                                                               
         #26 vendor/rector/rector/vendor/symfony/console/Application.php(899):                                          
         RectorPrefix202512\Symfony\Component\Console\Command\Command->run()                                            
         #27 vendor/rector/rector/vendor/symfony/console/Application.php(279):                                          
         RectorPrefix202512\Symfony\Component\Console\Application->doRunCommand()                                       
         #28 vendor/rector/rector/src/Console/ConsoleApplication.php(60):                                               
         RectorPrefix202512\Symfony\Component\Console\Application->doRun()                                              
         #29 vendor/rector/rector/vendor/symfony/console/Application.php(162):                                          
         Rector\Console\ConsoleApplication->doRun()                                                                     
         #30 vendor/rector/rector/bin/rector.php(130): RectorPrefix202512\Symfony\Component\Console\Application->run()  
         #31 vendor/rector/rector/bin/rector(5): require_once('...')                                                    
         #32 vendor/bin/rector(117): include('...')                                                                     
         #33 {main}". On line: 110  

Expected Behaviour

The minimum behaviour is to warn the developer to refactor the code or to rector change it by itself.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions