Skip to content

Commit

Permalink
[PhpParser] Remove #[Required] on ClassLikeAstResolver (#4688)
Browse files Browse the repository at this point in the history
* [PhpParser] Remove #[Required] on ClassLikeAstResolver

* [ci-review] Rector Rectify

* Fix phpstan

* Fix phpstan

---------

Co-authored-by: GitHub Action <actions@github.com>
  • Loading branch information
samsonasik and actions-user committed Aug 7, 2023
1 parent 0d62894 commit e9a9746
Show file tree
Hide file tree
Showing 11 changed files with 31 additions and 35 deletions.
8 changes: 4 additions & 4 deletions packages/NodeTypeResolver/TypeAnalyzer/ArrayTypeAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\NodeTypeResolver;
Expand All @@ -34,7 +34,7 @@ public function __construct(
private readonly NodeTypeResolver $nodeTypeResolver,
private readonly PhpDocInfoFactory $phpDocInfoFactory,
private readonly ReflectionResolver $reflectionResolver,
private readonly ClassLikeAstResolver $classLikeAstResolver
private readonly AstResolver $astResolver
) {
}

Expand Down Expand Up @@ -112,7 +112,7 @@ private function isPropertyFetchWithArrayDocblockWithoutDefault(Expr $expr): boo
}

/** @var ClassLike $classLike */
$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);
$property = $classLike->getProperty($propertyName);

if (! $property instanceof Property) {
Expand Down Expand Up @@ -148,7 +148,7 @@ private function isPropertyFetchWithArrayDefault(Expr $expr): bool
}

/** @var ClassLike $classLike */
$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);
$propertyName = $this->nodeNameResolver->getName($expr->name);

if ($propertyName === null) {
Expand Down
11 changes: 4 additions & 7 deletions packages/StaticTypeMapper/Naming/NameScopeFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
use PHPStan\Type\Generic\TemplateTypeMap;
use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\Naming\Naming\UseImportsResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
Expand All @@ -33,10 +33,9 @@ final class NameScopeFactory

private ReflectionResolver $reflectionResolver;

private ClassLikeAstResolver $classLikeAstResolver;

public function __construct(
private readonly UseImportsResolver $useImportsResolver,
private readonly AstResolver $astResolver
) {
}

Expand All @@ -46,13 +45,11 @@ public function __construct(
public function autowire(
PhpDocInfoFactory $phpDocInfoFactory,
StaticTypeMapper $staticTypeMapper,
ReflectionResolver $reflectionResolver,
ClassLikeAstResolver $classLikeAstResolver
ReflectionResolver $reflectionResolver
): void {
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->staticTypeMapper = $staticTypeMapper;
$this->reflectionResolver = $reflectionResolver;
$this->classLikeAstResolver = $classLikeAstResolver;
}

public function createNameScopeFromNodeWithoutTemplateTypes(Node $node): NameScope
Expand Down Expand Up @@ -120,7 +117,7 @@ private function templateTemplateTypeMap(Node $node): TemplateTypeMap

$classReflection = $this->reflectionResolver->resolveClassReflection($node);
if ($classReflection instanceof ClassReflection) {
$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);

if ($classLike instanceof ClassLike) {
$classTemplateTypes = $this->resolveTemplateTypesFromNode($classLike);
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ parameters:
message: '#\$this as argument is not allowed\. Refactor method to service composition#'
paths:
- src/Rector/AbstractRector.php
- src/PhpParser/AstResolver.php

- '#Property Rector\\Core\\PhpParser\\Node\\AssignAndBinaryMap\:\:\$binaryOpToAssignClasses \(array<class\-string<PhpParser\\Node\\Expr\\BinaryOp\>, class\-string<PhpParser\\Node\\Expr\\BinaryOp\>\>\) does not accept array#'

Expand Down
5 changes: 3 additions & 2 deletions rules/Php71/NodeAnalyzer/CountableAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use PHPStan\Type\TypeWithClassName;
use PHPStan\Type\UnionType;
use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeNameResolver\NodeNameResolver;
Expand All @@ -35,7 +36,7 @@ public function __construct(
private readonly PropertyFetchAnalyzer $propertyFetchAnalyzer,
private readonly ConstructorAssignDetector $constructorAssignDetector,
private readonly ReflectionResolver $reflectionResolver,
private readonly ClassLikeAstResolver $classLikeAstResolver
private readonly AstResolver $astResolver
) {
}

Expand Down Expand Up @@ -122,7 +123,7 @@ private function isIterableOrFilledAtConstruct(
return false;
}

$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);

if (! $classLike instanceof ClassLike) {
return false;
Expand Down
5 changes: 3 additions & 2 deletions rules/Php80/NodeAnalyzer/PhpAttributeAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Property;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\PhpAttribute\Enum\DocTagNodeState;

final class PhpAttributeAnalyzer
{
public function __construct(
private readonly ClassLikeAstResolver $classLikeAstResolver,
private readonly AstResolver $astResolver,
private readonly NodeNameResolver $nodeNameResolver,
private readonly ReflectionProvider $reflectionProvider,
) {
Expand Down Expand Up @@ -54,7 +55,7 @@ public function hasInheritedPhpAttribute(Class_ $class, string $attributeClass):
$ancestorClassReflections = array_merge($classReflection->getParents(), $classReflection->getInterfaces());

foreach ($ancestorClassReflections as $ancestorClassReflection) {
$resolvedClass = $this->classLikeAstResolver->resolveClassFromClassReflection($ancestorClassReflection);
$resolvedClass = $this->astResolver->resolveClassFromClassReflection($ancestorClassReflection);

if (! $resolvedClass instanceof Class_) {
continue;
Expand Down
5 changes: 3 additions & 2 deletions rules/Privatization/Guard/ParentPropertyLookupGuard.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Rector\Core\Enum\ObjectReference;
use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer;
use Rector\Core\NodeManipulator\PropertyManipulator;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\Util\Reflection\PrivatesAccessor;
Expand All @@ -26,7 +27,7 @@ public function __construct(
private readonly BetterNodeFinder $betterNodeFinder,
private readonly NodeNameResolver $nodeNameResolver,
private readonly PropertyFetchAnalyzer $propertyFetchAnalyzer,
private readonly ClassLikeAstResolver $classLikeAstResolver,
private readonly AstResolver $astResolver,
private readonly PropertyManipulator $propertyManipulator,
private readonly PrivatesAccessor $privatesAccessor
) {
Expand Down Expand Up @@ -74,7 +75,7 @@ private function isFoundInParentClassMethods(
string $propertyName,
string $className
): bool {
$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($parentClassReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($parentClassReflection);
if (! $classLike instanceof Class_) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use PhpParser\Node\Stmt\Property;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer;
Expand All @@ -17,14 +18,14 @@ final class AllAssignNodePropertyTypeInferer
public function __construct(
private readonly AssignToPropertyTypeInferer $assignToPropertyTypeInferer,
private readonly NodeNameResolver $nodeNameResolver,
private readonly ClassLikeAstResolver $classLikeAstResolver
private readonly AstResolver $astResolver
) {
}

public function inferProperty(Property $property, ClassReflection $classReflection): ?Type
{
/** @var ClassLike $classLike */
$classLike = $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
$classLike = $this->astResolver->resolveClassFromClassReflection($classReflection);
$propertyName = $this->nodeNameResolver->getName($property);

return $this->assignToPropertyTypeInferer->inferPropertyInClassLike($property, $propertyName, $classLike);
Expand Down
2 changes: 0 additions & 2 deletions src/DependencyInjection/LazyContainerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
use Rector\CodingStyle\ClassNameImport\ShortNameResolver;
use Rector\Core\Configuration\Option;
use Rector\Core\Configuration\Parameter\SimpleParameterProvider;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\Util\Reflection\PrivatesAccessor;
use Rector\NodeNameResolver\Contract\NodeNameResolverInterface;
Expand Down Expand Up @@ -404,7 +403,6 @@ static function (NameScopeFactory $nameScopeFactory, Container $container): void
$container->make(PhpDocInfoFactory::class),
$container->make(StaticTypeMapper::class),
$container->make(ReflectionResolver::class),
$container->make(ClassLikeAstResolver::class),
);
}
);
Expand Down
5 changes: 3 additions & 2 deletions src/NodeManipulator/PropertyManipulator.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\ClassLikeAstResolver;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder;
Expand Down Expand Up @@ -55,7 +56,7 @@ public function __construct(
private readonly NodeTypeResolver $nodeTypeResolver,
private readonly PromotedPropertyResolver $promotedPropertyResolver,
private readonly ConstructorAssignDetector $constructorAssignDetector,
private readonly ClassLikeAstResolver $classLikeAstResolver,
private readonly AstResolver $astResolver,
private readonly PropertyFetchAnalyzer $propertyFetchAnalyzer
) {
}
Expand Down Expand Up @@ -128,7 +129,7 @@ public function resolveExistingClassPropertyNameByType(Class_ $class, ObjectType
public function isUsedByTrait(ClassReflection $classReflection, string $propertyName): bool
{
foreach ($classReflection->getTraits() as $traitUse) {
$trait = $this->classLikeAstResolver->resolveClassFromClassReflection($traitUse);
$trait = $this->astResolver->resolveClassFromClassReflection($traitUse);
if (! $trait instanceof Trait_) {
continue;
}
Expand Down
2 changes: 1 addition & 1 deletion src/PhpParser/AstResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public function resolveClassMethodFromCall(MethodCall | StaticCall $call): ?Clas
public function resolveClassFromClassReflection(
ClassReflection $classReflection
): Trait_ | Class_ | Interface_ | Enum_ | null {
return $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection);
return $this->classLikeAstResolver->resolveClassFromClassReflection($classReflection, $this);
}

/**
Expand Down
17 changes: 6 additions & 11 deletions src/PhpParser/ClassLikeAstResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,21 @@
use PHPStan\Reflection\ClassReflection;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Symfony\Contracts\Service\Attribute\Required;

/**
* @internal called from AstResolver
*/
final class ClassLikeAstResolver
{
private AstResolver $astResolver;

public function __construct(
private readonly BetterNodeFinder $betterNodeFinder,
private readonly NodeNameResolver $nodeNameResolver,
) {
}

#[Required]
public function autowire(AstResolver $astResolver): void
{
$this->astResolver = $astResolver;
}

public function resolveClassFromClassReflection(
ClassReflection $classReflection
ClassReflection $classReflection,
AstResolver $astResolver
): Trait_ | Class_ | Interface_ | Enum_ | null {
if ($classReflection->isBuiltin()) {
return null;
Expand All @@ -45,7 +40,7 @@ public function resolveClassFromClassReflection(
return null;
}

$stmts = $this->astResolver->parseFileNameToDecoratedNodes($fileName);
$stmts = $astResolver->parseFileNameToDecoratedNodes($fileName);
if ($stmts === []) {
return null;
}
Expand Down

0 comments on commit e9a9746

Please sign in to comment.