mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-29 14:13:30 +00:00
ClassReplacerRector - respect use statments import
This commit is contained in:
parent
6517150502
commit
2ee2049cf1
|
@ -38,9 +38,9 @@ final class ClassReplacerRector extends AbstractRector
|
|||
return false;
|
||||
}
|
||||
|
||||
$name = $this->resolveNameFromNode($node);
|
||||
$nameNode = $this->resolveNameNodeFromNode($node);
|
||||
|
||||
return isset($this->oldToNewClasses[$name]);
|
||||
return isset($this->oldToNewClasses[$nameNode->toString()]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -50,8 +50,9 @@ final class ClassReplacerRector extends AbstractRector
|
|||
{
|
||||
if ($node instanceof Name) {
|
||||
$newName = $this->resolveNewNameFromNode($node);
|
||||
$newNameNode = new Name($newName);
|
||||
|
||||
return new FullyQualified($newName);
|
||||
return new Name($newNameNode->getLast());
|
||||
}
|
||||
|
||||
if ($node instanceof Use_) {
|
||||
|
@ -60,6 +61,10 @@ final class ClassReplacerRector extends AbstractRector
|
|||
if ($this->namespaceAnalyzer->isUseStatmenetAlreadyPresent($node, $newName)) {
|
||||
$this->shouldRemoveNode = true;
|
||||
}
|
||||
|
||||
$node->uses[0]->name = new Name($newName);
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -67,27 +72,27 @@ final class ClassReplacerRector extends AbstractRector
|
|||
|
||||
private function resolveNewNameFromNode(Node $node): string
|
||||
{
|
||||
$name = $this->resolveNameFromNode($node);
|
||||
$nameNode = $this->resolveNameNodeFromNode($node);
|
||||
|
||||
return $this->oldToNewClasses[$name];
|
||||
return $this->oldToNewClasses[$nameNode->toString()];
|
||||
}
|
||||
|
||||
private function resolveNameFromNode(Node $node): string
|
||||
private function resolveNameNodeFromNode(Node $node): ?Name
|
||||
{
|
||||
if ($node instanceof Name) {
|
||||
// resolved name has priority, as it is FQN
|
||||
$resolvedName = $node->getAttribute(Attribute::RESOLVED_NAME);
|
||||
if ($resolvedName instanceof FullyQualified) {
|
||||
return $resolvedName->toString();
|
||||
return $resolvedName;
|
||||
}
|
||||
|
||||
return $node->toString();
|
||||
return $node;
|
||||
}
|
||||
|
||||
if ($node instanceof Use_) {
|
||||
return $node->uses[0]->name->toString();
|
||||
return $node->uses[0]->name;
|
||||
}
|
||||
|
||||
return '';
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
rectors:
|
||||
Rector\Rector\Dynamic\ClassReplacerRector:
|
||||
OldClass: NewClass
|
||||
'PhpParser\BuilderAbstract': 'PhpParser\Builder\Declaration'
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace Roave\BetterReflection\SourceLocator\Reflection;
|
||||
|
||||
use PhpParser\Builder\Class_;
|
||||
use PhpParser\Builder\Interface_;
|
||||
use PhpParser\Builder\Method;
|
||||
use PhpParser\Builder\Property;
|
||||
use PhpParser\Builder\Trait_;
|
||||
use PhpParser\Builder\Declaration;
|
||||
use PhpParser\Comment\Doc;
|
||||
use ReflectionClass as CoreReflectionClass;
|
||||
use ReflectionMethod as CoreReflectionMethod;
|
||||
use ReflectionProperty as CoreReflectionProperty;
|
||||
use Reflector as CoreReflector;
|
||||
|
||||
/**
|
||||
* Function that generates a stub source from a given reflection instance.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final class SourceStubber
|
||||
{
|
||||
/**
|
||||
* @param Class_|Interface_|Trait_|Method|Property $node
|
||||
* @param CoreReflectionClass|CoreReflectionMethod|CoreReflectionProperty $reflection
|
||||
*/
|
||||
private function addDocComment(Declaration $node, CoreReflector $reflection): void
|
||||
{
|
||||
if (false !== $reflection->getDocComment()) {
|
||||
$node->setDocComment(new Doc($reflection->getDocComment()));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace Roave\BetterReflection\SourceLocator\Reflection;
|
||||
|
||||
use PhpParser\Builder\Class_;
|
||||
use PhpParser\Builder\Interface_;
|
||||
use PhpParser\Builder\Method;
|
||||
use PhpParser\Builder\Property;
|
||||
use PhpParser\Builder\Trait_;
|
||||
use PhpParser\BuilderAbstract;
|
||||
use PhpParser\Comment\Doc;
|
||||
use ReflectionClass as CoreReflectionClass;
|
||||
use ReflectionMethod as CoreReflectionMethod;
|
||||
use ReflectionProperty as CoreReflectionProperty;
|
||||
use Reflector as CoreReflector;
|
||||
|
||||
/**
|
||||
* Function that generates a stub source from a given reflection instance.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final class SourceStubber
|
||||
{
|
||||
/**
|
||||
* @param Class_|Interface_|Trait_|Method|Property $node
|
||||
* @param CoreReflectionClass|CoreReflectionMethod|CoreReflectionProperty $reflection
|
||||
*/
|
||||
private function addDocComment(BuilderAbstract $node, CoreReflector $reflection): void
|
||||
{
|
||||
if (false !== $reflection->getDocComment()) {
|
||||
$node->setDocComment(new Doc($reflection->getDocComment()));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user