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:
Tomas Votruba 2023-12-24 03:11:42 +00:00
parent 06a8e6394a
commit 462b60a70a
4 changed files with 26 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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
*/