mirror of https://github.com/rectorphp/rector.git
Updated Rector to commit c6ca4f1f5ccdf73d9aa0f8f441267725e07aee67
c6ca4f1f5c
[Performance][TypeDeclaration] Avoid using AstResolver on class is on same file on AllAssignNodePropertyTypeInferer (#5387)
This commit is contained in:
parent
06a8e6394a
commit
462b60a70a
|
@ -148,7 +148,7 @@ CODE_SAMPLE
|
|||
if (!$property instanceof Property) {
|
||||
return \false;
|
||||
}
|
||||
$type = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection);
|
||||
$type = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection, $this->file);
|
||||
return $type instanceof ArrayType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,7 +160,7 @@ CODE_SAMPLE
|
|||
if (!$this->makePropertyTypedGuard->isLegal($property, $classReflection, $this->inlinePublic)) {
|
||||
continue;
|
||||
}
|
||||
$inferredType = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection);
|
||||
$inferredType = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection, $this->file);
|
||||
if (!$inferredType instanceof Type) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -3,11 +3,14 @@
|
|||
declare (strict_types=1);
|
||||
namespace Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\ValueObject\Application\File;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer;
|
||||
final class AllAssignNodePropertyTypeInferer
|
||||
|
@ -27,16 +30,31 @@ final class AllAssignNodePropertyTypeInferer
|
|||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(AssignToPropertyTypeInferer $assignToPropertyTypeInferer, NodeNameResolver $nodeNameResolver, AstResolver $astResolver)
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
public function __construct(AssignToPropertyTypeInferer $assignToPropertyTypeInferer, NodeNameResolver $nodeNameResolver, AstResolver $astResolver, BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->assignToPropertyTypeInferer = $assignToPropertyTypeInferer;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->astResolver = $astResolver;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
public function inferProperty(Property $property, ClassReflection $classReflection) : ?Type
|
||||
public function inferProperty(Property $property, ClassReflection $classReflection, File $file) : ?Type
|
||||
{
|
||||
/** @var ClassLike $classLike */
|
||||
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);
|
||||
if ($classReflection->getFileName() === $file->getFilePath()) {
|
||||
$className = $classReflection->getName();
|
||||
$classLike = $this->betterNodeFinder->findFirst($file->getNewStmts(), function (Node $node) use($className) : bool {
|
||||
return $node instanceof ClassLike && $this->nodeNameResolver->isName($node, $className);
|
||||
});
|
||||
} else {
|
||||
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);
|
||||
}
|
||||
if (!$classLike instanceof ClassLike) {
|
||||
return null;
|
||||
}
|
||||
$propertyName = $this->nodeNameResolver->getName($property);
|
||||
return $this->assignToPropertyTypeInferer->inferPropertyInClassLike($property, $propertyName, $classLike);
|
||||
}
|
||||
|
|
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = '012e8bb2ed77516c792e3fb9c777066c3776abcc';
|
||||
public const PACKAGE_VERSION = 'c6ca4f1f5ccdf73d9aa0f8f441267725e07aee67';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-12-24 02:19:52';
|
||||
public const RELEASE_DATE = '2023-12-24 10:09:23';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue