mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-24 19:53:14 +01:00
update Interface and Trait Type Resolvers
This commit is contained in:
parent
203de1d3c3
commit
c311ee4436
@ -5,8 +5,6 @@ namespace Rector\NodeTypeResolver\PerNodeTypeResolver;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Interface_;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use Rector\NodeAnalyzer\ClassLikeAnalyzer;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
namespace Rector\NodeTypeResolver\PerNodeTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Interface_;
|
||||
use Rector\NodeAnalyzer\ClassLikeAnalyzer;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
@ -29,11 +28,13 @@ final class InterfaceTypeResolver implements PerNodeTypeResolverInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ClassLike $classLikeNode
|
||||
* @param Interface_ $interfaceNode
|
||||
* @return string[]
|
||||
*/
|
||||
public function resolve(Node $classLikeNode): array
|
||||
public function resolve(Node $interfaceNode): array
|
||||
{
|
||||
return $this->classLikeAnalyzer->resolveTypeAndParentTypes($classLikeNode);
|
||||
$className = $this->classLikeAnalyzer->resolveNameNode($interfaceNode);
|
||||
|
||||
return array_merge([$className], $this->classLikeAnalyzer->resolveExtendsTypes($interfaceNode, $className));
|
||||
}
|
||||
}
|
||||
|
@ -3,9 +3,6 @@
|
||||
namespace Rector\NodeTypeResolver\PerNodeTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassLike;
|
||||
use PhpParser\Node\Stmt\Interface_;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use Rector\NodeAnalyzer\ClassLikeAnalyzer;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
@ -31,11 +28,14 @@ final class TraitTypeResolver implements PerNodeTypeResolverInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ClassLike $classLikeNode
|
||||
* @param Trait_ $traitNode
|
||||
* @return string[]
|
||||
*/
|
||||
public function resolve(Node $classLikeNode): array
|
||||
public function resolve(Node $traitNode): array
|
||||
{
|
||||
return $this->classLikeAnalyzer->resolveTypeAndParentTypes($classLikeNode);
|
||||
$types[] = $this->classLikeAnalyzer->resolveNameNode($traitNode);
|
||||
$types = array_merge($types, $this->classLikeAnalyzer->resolveUsedTraitTypes($traitNode));
|
||||
|
||||
return $types;
|
||||
}
|
||||
}
|
||||
|
@ -65,17 +65,13 @@ final class ClassLikeAnalyzer
|
||||
$types = array_merge($types, $this->resolveUsedTraitTypes($classLikeNode));
|
||||
}
|
||||
|
||||
if ($classLikeNode instanceof Trait_) {
|
||||
$types = array_merge($types, $this->resolveUsedTraitTypes($classLikeNode));
|
||||
}
|
||||
|
||||
return $types;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Name|ClassLike $node
|
||||
*/
|
||||
private function resolveNameNode(Node $node): string
|
||||
public function resolveNameNode(Node $node): string
|
||||
{
|
||||
$name = (string) $node->getAttribute(Attribute::CLASS_NAME);
|
||||
if ($name) {
|
||||
@ -103,7 +99,7 @@ final class ClassLikeAnalyzer
|
||||
* @param Class_|Interface_ $classLikeNode
|
||||
* @return string[]
|
||||
*/
|
||||
private function resolveExtendsTypes(ClassLike $classLikeNode, ?string $className = null): array
|
||||
public function resolveExtendsTypes(ClassLike $classLikeNode, ?string $className = null): array
|
||||
{
|
||||
if (! $classLikeNode->extends) {
|
||||
return [];
|
||||
@ -112,22 +108,11 @@ final class ClassLikeAnalyzer
|
||||
return $this->smartClassReflector->getClassParents($className, $classLikeNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
private function resolveImplementsTypes(Class_ $classNode): array
|
||||
{
|
||||
return array_map(function (Name $interface): string {
|
||||
/** @var FullyQualified $interface */
|
||||
return $interface->toString();
|
||||
}, $classNode->implements);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Class_|Trait_ $classOrTraitNode
|
||||
* @return string[]
|
||||
*/
|
||||
private function resolveUsedTraitTypes(ClassLike $classOrTraitNode): array
|
||||
public function resolveUsedTraitTypes(ClassLike $classOrTraitNode): array
|
||||
{
|
||||
$usedTraits = [];
|
||||
|
||||
@ -145,4 +130,15 @@ final class ClassLikeAnalyzer
|
||||
|
||||
return $usedTraits;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
private function resolveImplementsTypes(Class_ $classNode): array
|
||||
{
|
||||
return array_map(function (Name $interface): string {
|
||||
/** @var FullyQualified $interface */
|
||||
return $interface->toString();
|
||||
}, $classNode->implements);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user