mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-08 04:10:51 +00:00
[Core] Use ReflectionResolver to get ClassReflection when possible (#2226)
* [Core] Use ReflectionResolver to get ClassReflection when possible * on ClassDependencyManipulator * on ParentClassMethodTypeOverrideGuard * on AddPropertyTypeDeclarationRector * on ReturnTypeFromReturnNewRector * on ParamTypeByMethodCallTypeRector * [ci-review] Rector Rectify * on ParamTypeByParentCallTypeRector * on ClassMethodParamVendorLockResolver * on AddVoidReturnTypeWhereNoReturnRector * on PropertyTypeOverrideGuard * on AddInterfaceByTraitRector * LocallyCalledStaticMethodToNonStaticRector * on MakePropertyTypedGuard * on FinalizeClassesWithoutChildrenRector * on ClassMethodReturnTypeOverrideGuard * on PrivatizeFinalClassMethodRector * scope fix * [ci-review] Rector Rectify * class * [ci-review] Rector Rectify * on ClassMethodReturnVendorLockResolver * on CurrentAndParentClassMethodComparator * on CurrentAndParentClassMethodComparator * on DowngradeStringReturnTypeOnToStringRector * on DowngradeStaticTypeDeclarationRector * on DowngradeContravariantArgumentTypeRector * on DowngradeSelfTypeDeclarationRector * [ci-review] Rector Rectify * on RemoveUnusedPrivateClassConstantRector * [ci-review] Rector Rectify * on SetterNodeReturnTypeInfererTypeInferer * [ci-review] Rector Rectify * [ci-review] Rector Rectify * fix Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
parent
6327904617
commit
129ce269d3
|
@ -5,11 +5,10 @@ declare(strict_types=1);
|
|||
namespace Rector\VendorLocker\NodeVendorLocker;
|
||||
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Symplify\SmartFileSystem\Normalizer\PathNormalizer;
|
||||
|
||||
final class ClassMethodParamVendorLockResolver
|
||||
|
@ -17,7 +16,8 @@ final class ClassMethodParamVendorLockResolver
|
|||
public function __construct(
|
||||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly PathNormalizer $pathNormalizer,
|
||||
private readonly FamilyRelationsAnalyzer $familyRelationsAnalyzer
|
||||
private readonly FamilyRelationsAnalyzer $familyRelationsAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ final class ClassMethodParamVendorLockResolver
|
|||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $this->resolveClassReflection($classMethod);
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ final class ClassMethodParamVendorLockResolver
|
|||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $this->resolveClassReflection($classMethod);
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
@ -84,16 +84,6 @@ final class ClassMethodParamVendorLockResolver
|
|||
return false;
|
||||
}
|
||||
|
||||
private function resolveClassReflection(ClassMethod $classMethod): ClassReflection | null
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $scope->getClassReflection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Has interface even in our project?
|
||||
* Better skip it, as PHPStan has access only to just analyzed classes.
|
||||
|
|
|
@ -7,9 +7,7 @@ namespace Rector\VendorLocker\NodeVendorLocker;
|
|||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
//use PHPStan\Analyser\Scope;
|
||||
use PhpParser\Node\Stmt\Return_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\ReflectionProvider;
|
||||
use PHPStan\Type\ArrayType;
|
||||
|
@ -17,9 +15,9 @@ use PHPStan\Type\Generic\GenericClassStringType;
|
|||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\StringType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
|
@ -38,7 +36,8 @@ final class ClassMethodReturnTypeOverrideGuard
|
|||
private readonly ReflectionProvider $reflectionProvider,
|
||||
private readonly FamilyRelationsAnalyzer $familyRelationsAnalyzer,
|
||||
private readonly BetterNodeFinder $betterNodeFinder,
|
||||
private readonly AstResolver $astResolver
|
||||
private readonly AstResolver $astResolver,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -54,14 +53,9 @@ final class ClassMethodReturnTypeOverrideGuard
|
|||
return true;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
throw new ShouldNotHappenException();
|
||||
return true;
|
||||
}
|
||||
|
||||
$childrenClassReflections = $this->familyRelationsAnalyzer->getChildrenOfClassReflection($classReflection);
|
||||
|
@ -73,7 +67,7 @@ final class ClassMethodReturnTypeOverrideGuard
|
|||
return true;
|
||||
}
|
||||
|
||||
if ($this->shouldSkipHasChildNoReturn($childrenClassReflections, $classMethod, $scope)) {
|
||||
if ($this->shouldSkipHasChildNoReturn($childrenClassReflections, $classMethod)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -98,12 +92,11 @@ final class ClassMethodReturnTypeOverrideGuard
|
|||
/**
|
||||
* @param ClassReflection[] $childrenClassReflections
|
||||
*/
|
||||
private function shouldSkipHasChildNoReturn(
|
||||
array $childrenClassReflections,
|
||||
ClassMethod $classMethod,
|
||||
Scope $scope
|
||||
): bool {
|
||||
private function shouldSkipHasChildNoReturn(array $childrenClassReflections, ClassMethod $classMethod): bool
|
||||
{
|
||||
$methodName = $this->nodeNameResolver->getName($classMethod);
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
|
||||
foreach ($childrenClassReflections as $childClassReflection) {
|
||||
if (! $childClassReflection->hasMethod($methodName)) {
|
||||
continue;
|
||||
|
@ -126,14 +119,9 @@ final class ClassMethodReturnTypeOverrideGuard
|
|||
|
||||
private function shouldSkipChaoticClassMethods(ClassMethod $classMethod): bool
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (self::CHAOTIC_CLASS_METHOD_NAMES as $chaoticClass => $chaoticMethodNames) {
|
||||
|
|
|
@ -5,28 +5,23 @@ declare(strict_types=1);
|
|||
namespace Rector\VendorLocker\NodeVendorLocker;
|
||||
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\FunctionVariantWithPhpDocs;
|
||||
use PHPStan\Type\MixedType;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
|
||||
final class ClassMethodReturnVendorLockResolver
|
||||
{
|
||||
public function __construct(
|
||||
private readonly NodeNameResolver $nodeNameResolver
|
||||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
public function isVendorLocked(ClassMethod $classMethod): bool
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ declare(strict_types=1);
|
|||
namespace Rector\VendorLocker;
|
||||
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\FunctionVariantWithPhpDocs;
|
||||
use PHPStan\Reflection\MethodReflection;
|
||||
|
@ -13,9 +12,9 @@ use PHPStan\Reflection\ParametersAcceptorSelector;
|
|||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\TypeDeclaration\TypeInferer\ParamTypeInferer;
|
||||
use Symplify\SmartFileSystem\Normalizer\PathNormalizer;
|
||||
|
||||
|
@ -25,7 +24,8 @@ final class ParentClassMethodTypeOverrideGuard
|
|||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly PathNormalizer $pathNormalizer,
|
||||
private readonly AstResolver $astResolver,
|
||||
private readonly ParamTypeInferer $paramTypeInferer
|
||||
private readonly ParamTypeInferer $paramTypeInferer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -68,10 +68,8 @@ final class ParentClassMethodTypeOverrideGuard
|
|||
* - one of them in /vendor/ -> not allowed
|
||||
* - both not in /vendor/ -> allowed
|
||||
*/
|
||||
/** @var Scope $scope */
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
/** @var ClassReflection $currentClassReflection */
|
||||
$currentClassReflection = $scope->getClassReflection();
|
||||
$currentClassReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
/** @var string $currentFileName */
|
||||
$currentFileName = $currentClassReflection->getFileName();
|
||||
|
||||
|
@ -121,20 +119,15 @@ final class ParentClassMethodTypeOverrideGuard
|
|||
|
||||
public function getParentClassMethod(ClassMethod $classMethod): ?MethodReflection
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** @var string $methodName */
|
||||
$methodName = $this->nodeNameResolver->getName($classMethod);
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$parentClassReflections = array_merge($classReflection->getParents(), $classReflection->getInterfaces());
|
||||
|
||||
foreach ($parentClassReflections as $parentClassReflection) {
|
||||
if (! $parentClassReflection->hasNativeMethod($methodName)) {
|
||||
continue;
|
||||
|
|
|
@ -16,6 +16,7 @@ use PHPStan\Reflection\ParametersAcceptorSelector;
|
|||
use Rector\Core\Enum\ObjectReference;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\Comparing\NodeComparator;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\DeadCode\Comparator\Parameter\ParameterDefaultsComparator;
|
||||
use Rector\DeadCode\Comparator\Parameter\ParameterTypeComparator;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
|
@ -27,7 +28,8 @@ final class CurrentAndParentClassMethodComparator
|
|||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly ParameterDefaultsComparator $parameterDefaultsComparator,
|
||||
private readonly ParameterTypeComparator $parameterTypeComparator,
|
||||
private readonly NodeComparator $nodeComparator
|
||||
private readonly NodeComparator $nodeComparator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -94,12 +96,7 @@ final class CurrentAndParentClassMethodComparator
|
|||
ClassMethod $classMethod,
|
||||
StaticCall $staticCall
|
||||
): bool {
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -11,16 +11,15 @@ use PhpParser\Node\Expr\MethodCall;
|
|||
use PhpParser\Node\Expr\StaticCall;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\PhpParser\Node\Value\ValueResolver;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodMatcher;
|
||||
use Rector\NodeCollector\ValueObject\ArrayCallable;
|
||||
use Rector\NodeCollector\ValueObject\ArrayCallableDynamicMethod;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
|
||||
final class IsClassMethodUsedAnalyzer
|
||||
{
|
||||
|
@ -30,7 +29,8 @@ final class IsClassMethodUsedAnalyzer
|
|||
private readonly BetterNodeFinder $betterNodeFinder,
|
||||
private readonly ValueResolver $valueResolver,
|
||||
private readonly ArrayCallableMethodMatcher $arrayCallableMethodMatcher,
|
||||
private readonly CallCollectionAnalyzer $callCollectionAnalyzer
|
||||
private readonly CallCollectionAnalyzer $callCollectionAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -149,12 +149,7 @@ final class IsClassMethodUsedAnalyzer
|
|||
|
||||
private function doesMethodExistInTrait(ClassMethod $classMethod, string $classMethodName): bool
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -6,12 +6,11 @@ namespace Rector\DeadCode\Rector\ClassConst;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassConst;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\NodeAnalyzer\EnumAnalyzer;
|
||||
use Rector\Core\NodeManipulator\ClassConstManipulator;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
@ -23,6 +22,7 @@ final class RemoveUnusedPrivateClassConstantRector extends AbstractRector
|
|||
public function __construct(
|
||||
private readonly ClassConstManipulator $classConstManipulator,
|
||||
private readonly EnumAnalyzer $enumAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -70,12 +70,7 @@ CODE_SAMPLE
|
|||
return null;
|
||||
}
|
||||
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -9,12 +9,11 @@ use PhpParser\Node\Expr\MethodCall;
|
|||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\DeadCode\NodeAnalyzer\IsClassMethodUsedAnalyzer;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
@ -24,7 +23,8 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
|||
final class RemoveUnusedPrivateMethodRector extends AbstractRector
|
||||
{
|
||||
public function __construct(
|
||||
private readonly IsClassMethodUsedAnalyzer $isClassMethodUsedAnalyzer
|
||||
private readonly IsClassMethodUsedAnalyzer $isClassMethodUsedAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -92,12 +92,7 @@ CODE_SAMPLE
|
|||
|
||||
private function shouldSkip(ClassMethod $classMethod): bool
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -6,12 +6,11 @@ namespace Rector\DowngradePhp70\Rector\ClassMethod;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\ThisType;
|
||||
use Rector\BetterPhpDocParser\PhpDocParser\PhpDocFromTypeDeclarationDecorator;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
@ -22,6 +21,7 @@ final class DowngradeSelfTypeDeclarationRector extends AbstractRector
|
|||
{
|
||||
public function __construct(
|
||||
private readonly PhpDocFromTypeDeclarationDecorator $phpDocFromTypeDeclarationDecorator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -71,12 +71,7 @@ CODE_SAMPLE
|
|||
*/
|
||||
public function refactor(Node $node): ?Node
|
||||
{
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -10,13 +10,12 @@ use PhpParser\Node\Param;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Function_;
|
||||
use PhpParser\Node\UnionType;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
|
||||
use Rector\Core\NodeAnalyzer\ParamAnalyzer;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use ReflectionMethod;
|
||||
use ReflectionNamedType;
|
||||
use ReflectionParameter;
|
||||
|
@ -32,7 +31,8 @@ final class DowngradeContravariantArgumentTypeRector extends AbstractRector
|
|||
{
|
||||
public function __construct(
|
||||
private readonly PhpDocTypeChanger $phpDocTypeChanger,
|
||||
private readonly ParamAnalyzer $paramAnalyzer
|
||||
private readonly ParamAnalyzer $paramAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -134,13 +134,7 @@ CODE_SAMPLE
|
|||
|
||||
private function getDifferentParamTypeFromAncestorClass(Param $param, ClassMethod|Function_ $functionLike): ?string
|
||||
{
|
||||
$scope = $functionLike->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
// possibly trait
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($functionLike);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ use PhpParser\Node\Name;
|
|||
use PhpParser\Node\NullableType;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\UnionType;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\Php\PhpMethodReflection;
|
||||
use PHPStan\Type\MixedType;
|
||||
|
@ -20,6 +19,7 @@ use PHPStan\Type\ThisType;
|
|||
use PHPStan\Type\Type;
|
||||
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\DeadCode\PhpDoc\TagRemover\ReturnTagRemover;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
|
||||
|
@ -38,7 +38,8 @@ final class DowngradeCovariantReturnTypeRector extends AbstractRector
|
|||
public function __construct(
|
||||
private readonly PhpDocTypeChanger $phpDocTypeChanger,
|
||||
private readonly PrivatesCaller $privatesCaller,
|
||||
private readonly ReturnTagRemover $returnTagRemover
|
||||
private readonly ReturnTagRemover $returnTagRemover,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -148,13 +149,7 @@ CODE_SAMPLE
|
|||
ClassMethod $classMethod,
|
||||
UnionType | NullableType | Name | Identifier | ComplexType $returnTypeNode
|
||||
): Type {
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
// possibly trait
|
||||
return new MixedType();
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return new MixedType();
|
||||
}
|
||||
|
|
|
@ -6,12 +6,11 @@ namespace Rector\DowngradePhp80\Rector\ClassMethod;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\StaticType;
|
||||
use Rector\BetterPhpDocParser\PhpDocParser\PhpDocFromTypeDeclarationDecorator;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
@ -22,6 +21,7 @@ final class DowngradeStaticTypeDeclarationRector extends AbstractRector
|
|||
{
|
||||
public function __construct(
|
||||
private readonly PhpDocFromTypeDeclarationDecorator $phpDocFromTypeDeclarationDecorator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -71,12 +71,7 @@ CODE_SAMPLE
|
|||
*/
|
||||
public function refactor(Node $node): ?Node
|
||||
{
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -7,12 +7,11 @@ namespace Rector\DowngradePhp80\Rector\ClassMethod;
|
|||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\MixedType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\FamilyTree\NodeAnalyzer\ClassChildAnalyzer;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
@ -22,7 +21,8 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
|||
final class DowngradeStringReturnTypeOnToStringRector extends AbstractRector
|
||||
{
|
||||
public function __construct(
|
||||
private readonly ClassChildAnalyzer $classChildAnalyzer
|
||||
private readonly ClassChildAnalyzer $classChildAnalyzer,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -103,12 +103,7 @@ CODE_SAMPLE
|
|||
return true;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -5,12 +5,11 @@ declare(strict_types=1);
|
|||
namespace Rector\Php74\Guard;
|
||||
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\NodeAnalyzer\PropertyAnalyzer;
|
||||
use Rector\Core\NodeManipulator\PropertyManipulator;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Privatization\Guard\ParentPropertyLookupGuard;
|
||||
|
||||
final class MakePropertyTypedGuard
|
||||
|
@ -19,7 +18,8 @@ final class MakePropertyTypedGuard
|
|||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly PropertyAnalyzer $propertyAnalyzer,
|
||||
private readonly PropertyManipulator $propertyManipulator,
|
||||
private readonly ParentPropertyLookupGuard $parentPropertyLookupGuard
|
||||
private readonly ParentPropertyLookupGuard $parentPropertyLookupGuard,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -33,12 +33,7 @@ final class MakePropertyTypedGuard
|
|||
return false;
|
||||
}
|
||||
|
||||
$scope = $property->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($property);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -6,10 +6,9 @@ namespace Rector\Privatization\Rector\ClassMethod;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Privatization\NodeManipulator\VisibilityManipulator;
|
||||
use Rector\Privatization\VisibilityGuard\ClassMethodVisibilityGuard;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
|
@ -23,6 +22,7 @@ final class PrivatizeFinalClassMethodRector extends AbstractRector
|
|||
public function __construct(
|
||||
private readonly ClassMethodVisibilityGuard $classMethodVisibilityGuard,
|
||||
private readonly VisibilityManipulator $visibilityManipulator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -67,20 +67,15 @@ CODE_SAMPLE
|
|||
*/
|
||||
public function refactor(Node $node): ?Node
|
||||
{
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($scope->isInTrait()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (! $classReflection->isClass()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (! $classReflection->isFinal()) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -7,12 +7,11 @@ namespace Rector\Privatization\Rector\Class_;
|
|||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name\FullyQualified;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Privatization\NodeManipulator\VisibilityManipulator;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
@ -42,6 +41,7 @@ final class FinalizeClassesWithoutChildrenRector extends AbstractRector
|
|||
private readonly ClassAnalyzer $classAnalyzer,
|
||||
private readonly FamilyRelationsAnalyzer $familyRelationsAnalyzer,
|
||||
private readonly VisibilityManipulator $visibilityManipulator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -106,12 +106,7 @@ CODE_SAMPLE
|
|||
return null;
|
||||
}
|
||||
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -10,11 +10,10 @@ use PhpParser\Node\Expr\StaticCall;
|
|||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Privatization\NodeManipulator\VisibilityManipulator;
|
||||
use Rector\Privatization\VisibilityGuard\ClassMethodVisibilityGuard;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
|
@ -28,6 +27,7 @@ final class LocallyCalledStaticMethodToNonStaticRector extends AbstractRector
|
|||
public function __construct(
|
||||
private readonly ClassMethodVisibilityGuard $classMethodVisibilityGuard,
|
||||
private readonly VisibilityManipulator $visibilityManipulator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -100,12 +100,7 @@ CODE_SAMPLE
|
|||
return null;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -7,11 +7,10 @@ namespace Rector\Transform\Rector\Class_;
|
|||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name\FullyQualified;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
@ -26,6 +25,10 @@ final class AddInterfaceByTraitRector extends AbstractRector implements Configur
|
|||
*/
|
||||
private array $interfaceByTrait = [];
|
||||
|
||||
public function __construct(private readonly ReflectionResolver $reflectionResolver)
|
||||
{
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Add interface by used trait', [
|
||||
|
@ -64,9 +67,7 @@ CODE_SAMPLE
|
|||
*/
|
||||
public function refactor(Node $node): ?Node
|
||||
{
|
||||
/** @var Scope $scope */
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -5,32 +5,27 @@ declare(strict_types=1);
|
|||
namespace Rector\TypeDeclaration\Guard;
|
||||
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
|
||||
final class PropertyTypeOverrideGuard
|
||||
{
|
||||
public function __construct(
|
||||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
public function isLegal(Property $property): bool
|
||||
{
|
||||
$propertyName = $this->nodeNameResolver->getName($property);
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($property);
|
||||
|
||||
$propertyScope = $property->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $propertyScope instanceof Scope) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $propertyScope->getClassReflection();
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$propertyName = $this->nodeNameResolver->getName($property);
|
||||
foreach ($classReflection->getParents() as $parentClassReflection) {
|
||||
$nativeReflectionClass = $parentClassReflection->getNativeReflection();
|
||||
|
||||
|
|
|
@ -9,15 +9,14 @@ use PhpParser\Node\Expr\Closure;
|
|||
use PhpParser\Node\Identifier;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Function_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\NeverType;
|
||||
use PHPStan\Type\VoidType;
|
||||
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
|
||||
use Rector\Core\Contract\Rector\AllowEmptyConfigurableRectorInterface;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\PhpVersionFeature;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver;
|
||||
use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnVendorLockResolver;
|
||||
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
|
||||
|
@ -40,7 +39,8 @@ final class AddVoidReturnTypeWhereNoReturnRector extends AbstractRector implemen
|
|||
public function __construct(
|
||||
private readonly SilentVoidResolver $silentVoidResolver,
|
||||
private readonly ClassMethodReturnVendorLockResolver $classMethodReturnVendorLockResolver,
|
||||
private readonly PhpDocTypeChanger $phpDocTypeChanger
|
||||
private readonly PhpDocTypeChanger $phpDocTypeChanger,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -167,12 +167,7 @@ CODE_SAMPLE
|
|||
|
||||
private function isInsideFinalClass(ClassMethod $classMethod): bool
|
||||
{
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -18,9 +18,9 @@ use PhpParser\Node\Param;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\If_;
|
||||
use PhpParser\Node\UnionType;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\TypeDeclaration\NodeAnalyzer\CallerParamMatcher;
|
||||
use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard;
|
||||
|
@ -36,7 +36,8 @@ final class ParamTypeByMethodCallTypeRector extends AbstractRector
|
|||
public function __construct(
|
||||
private readonly CallerParamMatcher $callerParamMatcher,
|
||||
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser,
|
||||
private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard
|
||||
private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -150,12 +151,7 @@ CODE_SAMPLE
|
|||
return true;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ use PHPStan\Analyser\Scope;
|
|||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Core\Enum\ObjectReference;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\TypeDeclaration\NodeAnalyzer\CallerParamMatcher;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
|
@ -23,7 +24,8 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
|||
final class ParamTypeByParentCallTypeRector extends AbstractRector
|
||||
{
|
||||
public function __construct(
|
||||
private readonly CallerParamMatcher $callerParamMatcher
|
||||
private readonly CallerParamMatcher $callerParamMatcher,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -161,12 +163,7 @@ CODE_SAMPLE
|
|||
return true;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ use PhpParser\Node\Name;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Function_;
|
||||
use PhpParser\Node\Stmt\Return_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\ReflectionProvider;
|
||||
use PHPStan\Type\ObjectType;
|
||||
|
@ -20,8 +19,8 @@ use PHPStan\Type\StaticType;
|
|||
use Rector\Core\Enum\ObjectReference;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\PhpVersionFeature;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
|
||||
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
|
||||
use Rector\StaticTypeMapper\ValueObject\Type\SelfStaticType;
|
||||
|
@ -37,6 +36,7 @@ final class ReturnTypeFromReturnNewRector extends AbstractRector implements MinP
|
|||
public function __construct(
|
||||
private readonly TypeFactory $typeFactory,
|
||||
private readonly ReflectionProvider $reflectionProvider,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -129,12 +129,7 @@ CODE_SAMPLE
|
|||
}
|
||||
|
||||
if ($className === ObjectReference::STATIC()->getValue() || $className === ObjectReference::SELF()->getValue()) {
|
||||
$scope = $new->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($new);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
|
|
|
@ -6,13 +6,12 @@ namespace Rector\TypeDeclaration\Rector\Property;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\StringType;
|
||||
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
|
||||
use Rector\TypeDeclaration\ValueObject\AddPropertyTypeDeclaration;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
|
@ -29,6 +28,10 @@ final class AddPropertyTypeDeclarationRector extends AbstractRector implements C
|
|||
*/
|
||||
private array $addPropertyTypeDeclarations = [];
|
||||
|
||||
public function __construct(private readonly ReflectionResolver $reflectionResolver)
|
||||
{
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
$configuration = [new AddPropertyTypeDeclaration('ParentClass', 'name', new StringType())];
|
||||
|
@ -75,12 +78,7 @@ CODE_SAMPLE
|
|||
return null;
|
||||
}
|
||||
|
||||
$scope = $node->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($node);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ namespace Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer;
|
|||
use PhpParser\Node\FunctionLike;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\Php\PhpPropertyReflection;
|
||||
use PHPStan\Type\MixedType;
|
||||
|
@ -15,6 +14,7 @@ use PHPStan\Type\Type;
|
|||
use Rector\Core\NodeManipulator\FunctionLikeManipulator;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
|
||||
use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface;
|
||||
|
@ -27,7 +27,8 @@ final class SetterNodeReturnTypeInfererTypeInferer implements ReturnTypeInfererI
|
|||
private readonly FunctionLikeManipulator $functionLikeManipulator,
|
||||
private readonly TypeFactory $typeFactory,
|
||||
private readonly BetterNodeFinder $betterNodeFinder,
|
||||
private readonly AstResolver $astResolver
|
||||
private readonly AstResolver $astResolver,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -39,18 +40,14 @@ final class SetterNodeReturnTypeInfererTypeInferer implements ReturnTypeInfererI
|
|||
}
|
||||
|
||||
$returnedPropertyNames = $this->functionLikeManipulator->getReturnedLocalPropertyNames($functionLike);
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classLike);
|
||||
|
||||
$scope = $classLike->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return new MixedType();
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return new MixedType();
|
||||
}
|
||||
|
||||
$types = [];
|
||||
$scope = $classLike->getAttribute(AttributeKey::SCOPE);
|
||||
foreach ($returnedPropertyNames as $returnedPropertyName) {
|
||||
if (! $classReflection->hasProperty($returnedPropertyName)) {
|
||||
continue;
|
||||
|
|
|
@ -20,6 +20,7 @@ use Rector\Core\NodeAnalyzer\PropertyPresenceChecker;
|
|||
use Rector\Core\NodeManipulator\Dependency\DependencyClassMethodDecorator;
|
||||
use Rector\Core\Php\PhpVersionProvider;
|
||||
use Rector\Core\PhpParser\Node\NodeFactory;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Core\ValueObject\PhpVersionFeature;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
|
@ -40,7 +41,8 @@ final class ClassDependencyManipulator
|
|||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly NodesToRemoveCollector $nodesToRemoveCollector,
|
||||
private readonly AutowiredClassMethodOrPropertyAnalyzer $autowiredClassMethodOrPropertyAnalyzer,
|
||||
private readonly DependencyClassMethodDecorator $dependencyClassMethodDecorator
|
||||
private readonly DependencyClassMethodDecorator $dependencyClassMethodDecorator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -176,12 +178,7 @@ final class ClassDependencyManipulator
|
|||
|
||||
private function hasClassParentClassMethod(Class_ $class, string $methodName): bool
|
||||
{
|
||||
$scope = $class->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($class);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -11,15 +11,14 @@ use PhpParser\Node\Name\FullyQualified;
|
|||
use PhpParser\Node\Param;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\Comparing\NodeComparator;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\Reflection\ReflectionResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
|
||||
final class ClassMethodManipulator
|
||||
|
@ -29,7 +28,8 @@ final class ClassMethodManipulator
|
|||
private readonly NodeNameResolver $nodeNameResolver,
|
||||
private readonly NodeTypeResolver $nodeTypeResolver,
|
||||
private readonly NodeComparator $nodeComparator,
|
||||
private readonly FuncCallManipulator $funcCallManipulator
|
||||
private readonly FuncCallManipulator $funcCallManipulator,
|
||||
private readonly ReflectionResolver $reflectionResolver
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -87,12 +87,7 @@ final class ClassMethodManipulator
|
|||
return false;
|
||||
}
|
||||
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
if (! $scope instanceof Scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$classReflection = $scope->getClassReflection();
|
||||
$classReflection = $this->reflectionResolver->resolveClassReflection($classMethod);
|
||||
if (! $classReflection instanceof ClassReflection) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -12,8 +12,10 @@ use PhpParser\Node\Expr\StaticCall;
|
|||
use PhpParser\Node\Expr\StaticPropertyFetch;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassConst;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Function_;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
|
@ -56,8 +58,9 @@ final class ReflectionResolver
|
|||
return $this->reflectionProvider->getClass($className);
|
||||
}
|
||||
|
||||
public function resolveClassReflection(ClassMethod|Property $classMethod): ?ClassReflection
|
||||
{
|
||||
public function resolveClassReflection(
|
||||
ClassMethod|Property|ClassLike|New_|Function_|ClassConst $classMethod
|
||||
): ?ClassReflection {
|
||||
$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
|
||||
|
||||
if (! $scope instanceof Scope) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user