diff --git a/packages/NodeCollector/NodeCollector/NodeRepository.php b/packages/NodeCollector/NodeCollector/NodeRepository.php index b758859a377..999928e6a28 100644 --- a/packages/NodeCollector/NodeCollector/NodeRepository.php +++ b/packages/NodeCollector/NodeCollector/NodeRepository.php @@ -7,14 +7,12 @@ use RectorPrefix20210624\Nette\Utils\Arrays; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; -use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Interface_; @@ -272,10 +270,6 @@ final class NodeRepository { return $this->parsedNodeCollector->findClass($name); } - public function findClassConstByClassConstFetch(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : ?\PhpParser\Node\Stmt\ClassConst - { - return $this->parsedNodeCollector->findClassConstByClassConstFetch($classConstFetch); - } /** * @param PropertyFetch|StaticPropertyFetch $expr */ @@ -304,10 +298,6 @@ final class NodeRepository { return $this->parsedNodeCollector->getClasses(); } - public function findClassConstant(string $className, string $constantName) : ?\PhpParser\Node\Stmt\ClassConst - { - return $this->parsedNodeCollector->findClassConstant($className, $constantName); - } public function findTrait(string $name) : ?\PhpParser\Node\Stmt\Trait_ { return $this->parsedNodeCollector->findTrait($name); diff --git a/packages/NodeCollector/NodeCollector/ParsedNodeCollector.php b/packages/NodeCollector/NodeCollector/ParsedNodeCollector.php index ca0c3477063..ced6569254b 100644 --- a/packages/NodeCollector/NodeCollector/ParsedNodeCollector.php +++ b/packages/NodeCollector/NodeCollector/ParsedNodeCollector.php @@ -47,10 +47,6 @@ final class ParsedNodeCollector * @var Class_[] */ private $classes = []; - /** - * @var array - */ - private $constantsByType = []; /** * @var Interface_[] */ @@ -120,13 +116,6 @@ final class ParsedNodeCollector } return null; } - public function findClassConstant(string $className, string $constantName) : ?\PhpParser\Node\Stmt\ClassConst - { - if (\strpos($constantName, '\\') !== \false) { - throw new \Rector\Core\Exception\ShouldNotHappenException(\sprintf('Switched arguments in "%s"', __METHOD__)); - } - return $this->constantsByType[$className][$constantName] ?? null; - } public function isCollectableNode(\PhpParser\Node $node) : bool { foreach (self::COLLECTABLE_NODE_TYPES as $collectableNodeType) { @@ -147,29 +136,11 @@ final class ParsedNodeCollector $this->collectInterfaceOrTrait($node); return; } - if ($node instanceof \PhpParser\Node\Stmt\ClassConst) { - $this->addClassConstant($node); - return; - } if ($node instanceof \PhpParser\Node\Expr\StaticCall) { $this->staticCalls[] = $node; return; } } - public function findClassConstByClassConstFetch(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : ?\PhpParser\Node\Stmt\ClassConst - { - $className = $this->nodeNameResolver->getName($classConstFetch->class); - if ($className === null) { - return null; - } - $class = $this->resolveClassConstant($classConstFetch, $className); - if ($class === null) { - return null; - } - /** @var string $constantName */ - $constantName = $this->nodeNameResolver->getName($classConstFetch->name); - return $this->findClassConstant($class, $constantName); - } /** * @return StaticCall[] */ @@ -203,24 +174,4 @@ final class ParsedNodeCollector $this->traits[$name] = $classLike; } } - private function addClassConstant(\PhpParser\Node\Stmt\ClassConst $classConst) : void - { - $className = $classConst->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME); - if ($className === null) { - // anonymous class constant - return; - } - $constantName = $this->nodeNameResolver->getName($classConst); - $this->constantsByType[$className][$constantName] = $classConst; - } - private function resolveClassConstant(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch, string $className) : ?string - { - if ($className === 'self') { - return $classConstFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME); - } - if ($className === 'parent') { - return $this->parentClassScopeResolver->resolveParentClassName($classConstFetch); - } - return $className; - } } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index da0cbfa5338..15a1414cb6c 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -16,11 +16,11 @@ final class VersionResolver /** * @var string */ - public const PACKAGE_VERSION = '24fc2e6068e7991fcb361187294a6c8cffd88c66'; + public const PACKAGE_VERSION = '27198867e50e21044f2f29e5bff6f8508785d81f'; /** * @var string */ - public const RELEASE_DATE = '2021-06-24 10:51:06'; + public const RELEASE_DATE = '2021-06-24 13:31:39'; public static function resolvePackageVersion() : string { $process = new \RectorPrefix20210624\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__); diff --git a/src/Php/Regex/RegexPatternArgumentManipulator.php b/src/Php/Regex/RegexPatternArgumentManipulator.php index f08faa60437..a6073da1aee 100644 --- a/src/Php/Regex/RegexPatternArgumentManipulator.php +++ b/src/Php/Regex/RegexPatternArgumentManipulator.php @@ -5,6 +5,7 @@ namespace Rector\Core\Php\Regex; use RectorPrefix20210624\Nette\Utils\Strings; use PhpParser\Node; +use PhpParser\Node\Const_; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\ClassConstFetch; @@ -12,12 +13,11 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar\String_; -use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Type\ObjectType; use Rector\Core\PhpParser\Comparing\NodeComparator; use Rector\Core\PhpParser\Node\BetterNodeFinder; -use Rector\NodeCollector\NodeCollector\NodeRepository; +use Rector\Core\PhpParser\NodeFinder\LocalConstantFinder; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; @@ -44,19 +44,19 @@ final class RegexPatternArgumentManipulator */ private $nodeTypeResolver; /** - * @var \Rector\NodeCollector\NodeCollector\NodeRepository + * @var \Rector\Core\PhpParser\NodeFinder\LocalConstantFinder */ - private $nodeRepository; + private $localConstantFinder; /** * @var \Rector\Core\PhpParser\Comparing\NodeComparator */ private $nodeComparator; - public function __construct(\Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeCollector\NodeCollector\NodeRepository $nodeRepository, \Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator) + public function __construct(\Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\Core\PhpParser\NodeFinder\LocalConstantFinder $localConstantFinder, \Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator) { $this->betterNodeFinder = $betterNodeFinder; $this->nodeNameResolver = $nodeNameResolver; $this->nodeTypeResolver = $nodeTypeResolver; - $this->nodeRepository = $nodeRepository; + $this->localConstantFinder = $localConstantFinder; $this->nodeComparator = $nodeComparator; } /** @@ -128,7 +128,7 @@ final class RegexPatternArgumentManipulator return $strings; } if ($expr instanceof \PhpParser\Node\Expr\ClassConstFetch) { - return $this->resolveClassConstFetchValue($expr); + return $this->matchClassConstFetchStringValue($expr); } return []; } @@ -154,14 +154,14 @@ final class RegexPatternArgumentManipulator /** * @return String_[] */ - private function resolveClassConstFetchValue(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : array + private function matchClassConstFetchStringValue(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : array { - $classConstNode = $this->nodeRepository->findClassConstByClassConstFetch($classConstFetch); - if (!$classConstNode instanceof \PhpParser\Node\Stmt\ClassConst) { + $classConst = $this->localConstantFinder->match($classConstFetch); + if (!$classConst instanceof \PhpParser\Node\Const_) { return []; } - if ($classConstNode->consts[0]->value instanceof \PhpParser\Node\Scalar\String_) { - return [$classConstNode->consts[0]->value]; + if ($classConst->value instanceof \PhpParser\Node\Scalar\String_) { + return [$classConst->value]; } return []; } diff --git a/src/PhpParser/NodeFinder/LocalConstantFinder.php b/src/PhpParser/NodeFinder/LocalConstantFinder.php new file mode 100644 index 00000000000..d78c812707c --- /dev/null +++ b/src/PhpParser/NodeFinder/LocalConstantFinder.php @@ -0,0 +1,59 @@ +nodeTypeResolver = $nodeTypeResolver; + $this->nodeNameResolver = $nodeNameResolver; + } + public function match(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : ?\PhpParser\Node\Const_ + { + $class = $classConstFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE); + if (!$class instanceof \PhpParser\Node\Stmt\Class_) { + return null; + } + $constantClassType = $this->nodeTypeResolver->resolve($classConstFetch->class); + if (!$constantClassType instanceof \PHPStan\Type\TypeWithClassName) { + return null; + } + if (!$this->nodeNameResolver->isName($class, $constantClassType->getClassName())) { + return null; + } + $constatName = $this->nodeNameResolver->getName($classConstFetch->name); + if ($constatName === null) { + return null; + } + return $this->findConstantByName($class, $constatName); + } + private function findConstantByName(\PhpParser\Node\Stmt\Class_ $class, string $constatName) : ?\PhpParser\Node\Const_ + { + foreach ($class->getConstants() as $classConsts) { + foreach ($classConsts->consts as $const) { + if (!$this->nodeNameResolver->isName($const->name, $constatName)) { + continue; + } + return $const; + } + } + return null; + } +} diff --git a/vendor/autoload.php b/vendor/autoload.php index 28ff4b9ae1e..2888fef648a 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b::getLoader(); +return ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8::getLoader(); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 1a7707172ee..33a3da87796 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1871,6 +1871,7 @@ return array( 'Rector\\Core\\PHPStan\\Reflection\\VariadicAnalyzer' => $baseDir . '/src/PHPStan/Reflection/VariadicAnalyzer.php', 'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => $baseDir . '/src/PhpParser/Comparing/ConditionSearcher.php', 'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => $baseDir . '/src/PhpParser/Comparing/NodeComparator.php', + 'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalConstantFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => $baseDir . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php', 'Rector\\Core\\PhpParser\\NodeTransformer' => $baseDir . '/src/PhpParser/NodeTransformer.php', 'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => $baseDir . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index b2c738122df..122e5cb6a7b 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b +class ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8 { private static $loader; @@ -22,15 +22,15 @@ class ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); - spl_autoload_unregister(array('ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit6515764947f388ff945f44d9f30180c8::getInitializer($loader)); } else { $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { @@ -42,19 +42,19 @@ class ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit6515764947f388ff945f44d9f30180c8::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire239d1d0dc4beb79ba2f57f2e858e9f4b($fileIdentifier, $file); + composerRequire6515764947f388ff945f44d9f30180c8($fileIdentifier, $file); } return $loader; } } -function composerRequire239d1d0dc4beb79ba2f57f2e858e9f4b($fileIdentifier, $file) +function composerRequire6515764947f388ff945f44d9f30180c8($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 576170ef097..14414486a8c 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b +class ComposerStaticInit6515764947f388ff945f44d9f30180c8 { public static $files = array ( 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', @@ -2226,6 +2226,7 @@ class ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b 'Rector\\Core\\PHPStan\\Reflection\\VariadicAnalyzer' => __DIR__ . '/../..' . '/src/PHPStan/Reflection/VariadicAnalyzer.php', 'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/ConditionSearcher.php', 'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/NodeComparator.php', + 'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalConstantFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php', 'Rector\\Core\\PhpParser\\NodeTransformer' => __DIR__ . '/../..' . '/src/PhpParser/NodeTransformer.php', 'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => __DIR__ . '/../..' . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php', @@ -3875,9 +3876,9 @@ class ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit239d1d0dc4beb79ba2f57f2e858e9f4b::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/scoper-autoload.php b/vendor/scoper-autoload.php index 6f0ce996ac0..521f86b01a7 100644 --- a/vendor/scoper-autoload.php +++ b/vendor/scoper-autoload.php @@ -21,8 +21,8 @@ if (!class_exists('SomeTestCase', false) && !interface_exists('SomeTestCase', fa if (!class_exists('CheckoutEntityFactory', false) && !interface_exists('CheckoutEntityFactory', false) && !trait_exists('CheckoutEntityFactory', false)) { spl_autoload_call('RectorPrefix20210624\CheckoutEntityFactory'); } -if (!class_exists('ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b', false) && !interface_exists('ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b', false) && !trait_exists('ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b', false)) { - spl_autoload_call('RectorPrefix20210624\ComposerAutoloaderInit239d1d0dc4beb79ba2f57f2e858e9f4b'); +if (!class_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false) && !interface_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false) && !trait_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false)) { + spl_autoload_call('RectorPrefix20210624\ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8'); } if (!class_exists('Doctrine\Inflector\Inflector', false) && !interface_exists('Doctrine\Inflector\Inflector', false) && !trait_exists('Doctrine\Inflector\Inflector', false)) { spl_autoload_call('RectorPrefix20210624\Doctrine\Inflector\Inflector'); @@ -3323,9 +3323,9 @@ if (!function_exists('print_node')) { return \RectorPrefix20210624\print_node(...func_get_args()); } } -if (!function_exists('composerRequire239d1d0dc4beb79ba2f57f2e858e9f4b')) { - function composerRequire239d1d0dc4beb79ba2f57f2e858e9f4b() { - return \RectorPrefix20210624\composerRequire239d1d0dc4beb79ba2f57f2e858e9f4b(...func_get_args()); +if (!function_exists('composerRequire6515764947f388ff945f44d9f30180c8')) { + function composerRequire6515764947f388ff945f44d9f30180c8() { + return \RectorPrefix20210624\composerRequire6515764947f388ff945f44d9f30180c8(...func_get_args()); } } if (!function_exists('parseArgs')) {