mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-08 04:10:51 +00:00
Updated Rector to commit d320ac74b9bf2f19dae9405449f3253e546c318c
d320ac74b9
[PhpParser] Reduce AstResolver complexity by move check fileName is null to parseFileNameToDecoratedNodes() (#5138)
This commit is contained in:
parent
ba8a9c44c4
commit
738c193e65
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = 'b29a6f80c319c6819007a604cc20b788e3abe59c';
|
||||
public const PACKAGE_VERSION = 'd320ac74b9bf2f19dae9405449f3253e546c318c';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-10-07 04:55:21';
|
||||
public const RELEASE_DATE = '2023-10-07 12:16:42';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
|
@ -26,6 +26,7 @@ use PHPStan\Reflection\MethodReflection;
|
|||
use PHPStan\Reflection\Php\PhpPropertyReflection;
|
||||
use PHPStan\Reflection\ReflectionProvider;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\Reflection\MethodReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
|
@ -70,16 +71,16 @@ final class AstResolver
|
|||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\ClassLikeAstResolver
|
||||
*/
|
||||
private $classLikeAstResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\Reflection\MethodReflectionResolver
|
||||
*/
|
||||
private $methodReflectionResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* Parsing files is very heavy performance, so this will help to leverage it
|
||||
* The value can be also null, when no statements could be parsed from the file.
|
||||
|
@ -87,7 +88,7 @@ final class AstResolver
|
|||
* @var array<string, Stmt[]|null>
|
||||
*/
|
||||
private $parsedFileNodes = [];
|
||||
public function __construct(SmartPhpParser $smartPhpParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, \Rector\Core\PhpParser\ClassLikeAstResolver $classLikeAstResolver, MethodReflectionResolver $methodReflectionResolver)
|
||||
public function __construct(SmartPhpParser $smartPhpParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, MethodReflectionResolver $methodReflectionResolver, BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->smartPhpParser = $smartPhpParser;
|
||||
$this->nodeScopeAndMetadataDecorator = $nodeScopeAndMetadataDecorator;
|
||||
|
@ -95,8 +96,8 @@ final class AstResolver
|
|||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->reflectionProvider = $reflectionProvider;
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
$this->classLikeAstResolver = $classLikeAstResolver;
|
||||
$this->methodReflectionResolver = $methodReflectionResolver;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
/**
|
||||
* @api downgrade
|
||||
|
@ -114,14 +115,7 @@ final class AstResolver
|
|||
{
|
||||
$classReflection = $methodReflection->getDeclaringClass();
|
||||
$fileName = $classReflection->getFileName();
|
||||
// probably native PHP method → un-parseable
|
||||
if ($fileName === null) {
|
||||
return null;
|
||||
}
|
||||
$nodes = $this->parseFileNameToDecoratedNodes($fileName);
|
||||
if ($nodes === []) {
|
||||
return null;
|
||||
}
|
||||
$classLikeName = $classReflection->getName();
|
||||
$methodName = $methodReflection->getName();
|
||||
$classMethod = null;
|
||||
|
@ -156,13 +150,7 @@ final class AstResolver
|
|||
public function resolveFunctionFromFunctionReflection(FunctionReflection $functionReflection) : ?Function_
|
||||
{
|
||||
$fileName = $functionReflection->getFileName();
|
||||
if ($fileName === null) {
|
||||
return null;
|
||||
}
|
||||
$nodes = $this->parseFileNameToDecoratedNodes($fileName);
|
||||
if ($nodes === []) {
|
||||
return null;
|
||||
}
|
||||
$functionName = $functionReflection->getName();
|
||||
$functionNode = null;
|
||||
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($functionName, &$functionNode) : ?int {
|
||||
|
@ -213,7 +201,20 @@ final class AstResolver
|
|||
*/
|
||||
public function resolveClassFromClassReflection(ClassReflection $classReflection)
|
||||
{
|
||||
return $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection, $this);
|
||||
if ($classReflection->isBuiltin()) {
|
||||
return null;
|
||||
}
|
||||
$fileName = $classReflection->getFileName();
|
||||
$stmts = $this->parseFileNameToDecoratedNodes($fileName);
|
||||
$className = $classReflection->getName();
|
||||
/** @var Class_|Trait_|Interface_|Enum_|null $classLike */
|
||||
$classLike = $this->betterNodeFinder->findFirst($stmts, function (Node $node) use($className) : bool {
|
||||
if (!$node instanceof ClassLike) {
|
||||
return \false;
|
||||
}
|
||||
return $this->nodeNameResolver->isName($node, $className);
|
||||
});
|
||||
return $classLike;
|
||||
}
|
||||
/**
|
||||
* @return Trait_[]
|
||||
|
@ -225,13 +226,7 @@ final class AstResolver
|
|||
$traits = [];
|
||||
foreach ($classLikes as $classLike) {
|
||||
$fileName = $classLike->getFileName();
|
||||
if ($fileName === null) {
|
||||
continue;
|
||||
}
|
||||
$nodes = $this->parseFileNameToDecoratedNodes($fileName);
|
||||
if ($nodes === []) {
|
||||
continue;
|
||||
}
|
||||
$traitName = $classLike->getName();
|
||||
$traitNode = null;
|
||||
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($traitName, &$traitNode) : ?int {
|
||||
|
@ -258,9 +253,6 @@ final class AstResolver
|
|||
{
|
||||
$classReflection = $phpPropertyReflection->getDeclaringClass();
|
||||
$fileName = $classReflection->getFileName();
|
||||
if ($fileName === null) {
|
||||
return null;
|
||||
}
|
||||
$nodes = $this->parseFileNameToDecoratedNodes($fileName);
|
||||
if ($nodes === []) {
|
||||
return null;
|
||||
|
@ -293,8 +285,12 @@ final class AstResolver
|
|||
/**
|
||||
* @return Stmt[]
|
||||
*/
|
||||
public function parseFileNameToDecoratedNodes(string $fileName) : array
|
||||
public function parseFileNameToDecoratedNodes(?string $fileName) : array
|
||||
{
|
||||
// probably native PHP → un-parseable
|
||||
if ($fileName === null) {
|
||||
return [];
|
||||
}
|
||||
if (isset($this->parsedFileNodes[$fileName])) {
|
||||
return $this->parsedFileNodes[$fileName];
|
||||
}
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Core\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Enum_;
|
||||
use PhpParser\Node\Stmt\Interface_;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
/**
|
||||
* @internal called from AstResolver
|
||||
*/
|
||||
final class ClassLikeAstResolver
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
}
|
||||
/**
|
||||
* @return \PhpParser\Node\Stmt\Trait_|\PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Interface_|\PhpParser\Node\Stmt\Enum_|null
|
||||
*/
|
||||
public function resolveClassFromClassReflection(ClassReflection $classReflection, \Rector\Core\PhpParser\AstResolver $astResolver)
|
||||
{
|
||||
if ($classReflection->isBuiltin()) {
|
||||
return null;
|
||||
}
|
||||
$fileName = $classReflection->getFileName();
|
||||
// probably internal class
|
||||
if ($fileName === null) {
|
||||
return null;
|
||||
}
|
||||
$stmts = $astResolver->parseFileNameToDecoratedNodes($fileName);
|
||||
if ($stmts === []) {
|
||||
return null;
|
||||
}
|
||||
$className = $classReflection->getName();
|
||||
/** @var Class_|Trait_|Interface_|Enum_|null $classLike */
|
||||
$classLike = $this->betterNodeFinder->findFirst($stmts, function (Node $node) use($className) : bool {
|
||||
if (!$node instanceof ClassLike) {
|
||||
return \false;
|
||||
}
|
||||
return $this->nodeNameResolver->isName($node, $className);
|
||||
});
|
||||
return $classLike;
|
||||
}
|
||||
}
|
1
vendor/composer/autoload_classmap.php
vendored
1
vendor/composer/autoload_classmap.php
vendored
|
@ -1237,7 +1237,6 @@ return array(
|
|||
'Rector\\Core\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php',
|
||||
'Rector\\Core\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php',
|
||||
'Rector\\Core\\PhpParser\\AstResolver' => $baseDir . '/src/PhpParser/AstResolver.php',
|
||||
'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => $baseDir . '/src/PhpParser/ClassLikeAstResolver.php',
|
||||
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => $baseDir . '/src/PhpParser/Comparing/NodeComparator.php',
|
||||
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
|
||||
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => $baseDir . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
|
||||
|
|
1
vendor/composer/autoload_static.php
vendored
1
vendor/composer/autoload_static.php
vendored
|
@ -1456,7 +1456,6 @@ class ComposerStaticInit46a0b0ac2ea1371bb06be09a20f71c2b
|
|||
'Rector\\Core\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php',
|
||||
'Rector\\Core\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php',
|
||||
'Rector\\Core\\PhpParser\\AstResolver' => __DIR__ . '/../..' . '/src/PhpParser/AstResolver.php',
|
||||
'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => __DIR__ . '/../..' . '/src/PhpParser/ClassLikeAstResolver.php',
|
||||
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/NodeComparator.php',
|
||||
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
|
||||
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
|
||||
|
|
Loading…
Reference in New Issue
Block a user