Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions