rector: Getting Rector\Core\Exception\ShouldNotHappenException on php5.6 code

Bug Report

Subject Details
Rector version v0.7.6
Installed as prefixed Rector PHAR

I am on PHP 7.4.3 (cli) (built: Feb 26 2020 12:17:01) I am running this command: vendor/bin/rector process . --set php74 --dry-run --verbose After rector finishes parsing all the files I get the following:

[refactoring] admin/CategorySelection/CategorySelection.php

In NodeNameResolver.php line 81:
                                                                 
  [Rector\Core\Exception\ShouldNotHappenException]               
  Pick more specific node than "PhpParser\Node\Expr\MethodCall"  
   
Exception trace:
  at phar:///projectName/common/vendor/rector/rector-prefixed/rector/packages/node-name-resolver/src/NodeNameResolver.php:81
 Rector\NodeNameResolver\NodeNameResolver->getName() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/Node/Manipulator/ClassMethodPropertyFetchManipulator.php:47
 Rector\Core\PhpParser\Node\Manipulator\ClassMethodPropertyFetchManipulator->Rector\Core\PhpParser\Node\Manipulator\{closure}() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:42
 class@anonymous\phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:26$23b->enterNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:113
 PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
 PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:85
 PhpParser\NodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:22
 Rector\Core\PhpParser\NodeTraverser\CallableNodeTraverser->traverseNodesWithCallable() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/Node/Manipulator/ClassMethodPropertyFetchManipulator.php:49
 Rector\Core\PhpParser\Node\Manipulator\ClassMethodPropertyFetchManipulator->resolveParamForPropertyFetch() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/type-declaration/src/TypeInferer/PropertyTypeInferer/ConstructorPropertyTypeInferer.php:54
 Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer\ConstructorPropertyTypeInferer->inferProperty() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/type-declaration/src/TypeInferer/PropertyTypeInferer.php:40
 Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer->inferProperty() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/php-74/src/Rector/Property/TypedPropertyRector.php:78
 Rector\Php74\Rector\Property\TypedPropertyRector->refactor() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Rector/AbstractRector.php:123
 Rector\Core\Rector\AbstractRector->enterNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:176
 PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:105
 PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
 PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:105
 PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
 PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:85
 PhpParser\NodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php:53
 Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/FileProcessor.php:100
 Rector\Core\Application\FileProcessor->refactor() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:123
 Rector\Core\Application\RectorApplication->Rector\Core\Application\{closure}() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:176
 Rector\Core\Application\RectorApplication->tryCatchWrapper() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:124
 Rector\Core\Application\RectorApplication->runOnFileInfos() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Command/ProcessCommand.php:128
 Rector\Core\Console\Command\ProcessCommand->execute() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Command/Command.php:228
 _HumbugBoxe941696e063c\Symfony\Component\Console\Command\Command->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Command/AbstractCommand.php:30
 Rector\Core\Console\Command\AbstractCommand->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:849
 _HumbugBoxe941696e063c\Symfony\Component\Console\Application->doRunCommand() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:235
 _HumbugBoxe941696e063c\Symfony\Component\Console\Application->doRun() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Application.php:76
 Rector\Core\Console\Application->doRun() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:136
 _HumbugBoxe941696e063c\Symfony\Component\Console\Application->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/bin/rector:40
 require() at /projectName/common/vendor/rector/rector-prefixed/rector:6
                                                              

Minimal PHP Code Causing Issue

This is the contents of the file admin/CategorySelection/CategorySelection.php

<?php
namespace ProjectName\Admin\CategorySelection;

abstract class CategorySelection
{
    protected $categories = [];

    public function __construct($category_mod)
    {
        $this->categories = Categories::getInstance($category_mod)->getCategories();
    }

    public function getSelectDropDown($selected_cat_id = 0)
    {
        return $this->getDisplayString($this->categories, $selected_cat_id, 1);
    }

    abstract protected function getDisplayString($categories, $selected_cat_id, $depth);

    protected function getPrefix($depth)
    {
        if ($depth == 1) {
            return '';
        } else {
            return str_repeat("&nbsp;", $depth) . "&raquo;";
        }
    }
}

Expected Behaviour

I have no idea because I haven’t been able to get rector to ever work on any of the projects I’ve tried it on, so I hope that this time is different and I do get it to work on my current project.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 20 (14 by maintainers)

Commits related to this issue

Most upvoted comments

Sure, send PR

I don’t use Docker. Failing CI is need to verify though

I tried it running on the file content locally, but with no error.

What happens when you analyze only the file?

-vendor/bin/rector process . --set php74 --dry-run --verbose
+vendor/bin/rector process absolute/file/path.php --set php74 --dry-run --verbose

Also, you should never use . in any command. Always specify the directories and files. It can analyse vendor and break on so many cases.