update Interface and Trait Type Resolvers

This commit is contained in:
Tomas Votruba 2018-05-31 01:48:36 +02:00
parent 203de1d3c3
commit c311ee4436
4 changed files with 25 additions and 30 deletions

View File

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

View File

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

View File

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

View File

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