extract NodeFactory

This commit is contained in:
TomasVotruba 2017-09-02 15:15:35 +02:00
parent 4bbe4cca7f
commit 3514870d12
3 changed files with 42 additions and 35 deletions

View File

@ -0,0 +1,22 @@
<?php declare(strict_types=1);
namespace Rector\NodeFactory;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\Variable;
final class NodeFactory
{
/**
* Creates "$this->propertyName"
*/
public function createLocalPropertyFetch(string $propertyName): PropertyFetch
{
return new PropertyFetch(
new Variable('this', [
'name' => $propertyName,
]),
$propertyName
);
}
}

View File

@ -5,8 +5,6 @@ namespace Rector\Rector\Contrib\SymfonyExtra;
use Nette\Utils\Strings;
use PhpParser\Node;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Name;
use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Class_;
@ -14,6 +12,7 @@ use Rector\Builder\Class_\ClassPropertyCollector;
use Rector\Builder\Kernel\ServiceFromKernelResolver;
use Rector\Builder\Naming\NameResolver;
use Rector\Deprecation\SetNames;
use Rector\NodeFactory\NodeFactory;
use Rector\Rector\AbstractRector;
use Rector\Tests\Rector\Contrib\SymfonyExtra\GetterToPropertyRector\Source\LocalKernel;
@ -62,14 +61,21 @@ final class CommandToConstructorInjectionRector extends AbstractRector
*/
private $classNode;
/**
* @var NodeFactory
*/
private $nodeFactory;
public function __construct(
ServiceFromKernelResolver $serviceFromKernelResolver,
ClassPropertyCollector $classPropertyCollector,
NameResolver $nameResolver
NameResolver $nameResolver,
NodeFactory $nodeFactory
) {
$this->serviceFromKernelResolver = $serviceFromKernelResolver;
$this->classPropertyCollector = $classPropertyCollector;
$this->nameResolver = $nameResolver;
$this->nodeFactory = $nodeFactory;
}
public function getSetName(): string
@ -147,21 +153,7 @@ final class CommandToConstructorInjectionRector extends AbstractRector
$this->classPropertyCollector->addPropertyForClass($this->getClassName(), $serviceType, $propertyName);
return $this->createPropertyFetch($propertyName);
}
/**
* @todo move to NodeFactory...
* Creates "$this->propertyName".
*/
private function createPropertyFetch(string $propertyName): PropertyFetch
{
return new PropertyFetch(
new Variable('this', [
'name' => $propertyName,
]),
$propertyName
);
return $this->nodeFactory->createLocalPropertyFetch($propertyName);
}
/**

View File

@ -6,13 +6,13 @@ use PhpParser\Node;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Class_;
use Rector\Builder\Class_\ClassPropertyCollector;
use Rector\Builder\Kernel\ServiceFromKernelResolver;
use Rector\Builder\Naming\NameResolver;
use Rector\Deprecation\SetNames;
use Rector\NodeFactory\NodeFactory;
use Rector\Rector\AbstractRector;
use Rector\Tests\Rector\Contrib\SymfonyExtra\GetterToPropertyRector\Source\LocalKernel;
@ -45,14 +45,21 @@ final class GetterToPropertyRector extends AbstractRector
*/
private $classNode;
/**
* @var NodeFactory
*/
private $nodeFactory;
public function __construct(
NameResolver $nameResolver,
ServiceFromKernelResolver $serviceFromKernelResolver,
ClassPropertyCollector $classPropertyCollector
ClassPropertyCollector $classPropertyCollector,
NodeFactory $nodeFactory
) {
$this->nameResolver = $nameResolver;
$this->serviceFromKernelResolver = $serviceFromKernelResolver;
$this->classPropertyCollector = $classPropertyCollector;
$this->nodeFactory = $nodeFactory;
}
/**
@ -162,21 +169,7 @@ final class GetterToPropertyRector extends AbstractRector
$this->classPropertyCollector->addPropertyForClass($this->getClassName(), $serviceType, $propertyName);
return $this->createPropertyFetch($propertyName);
}
/**
* @todo move to NodeFactory
* Creates "$this->propertyName".
*/
private function createPropertyFetch(string $propertyName): PropertyFetch
{
return new PropertyFetch(
new Variable('this', [
'name' => $propertyName,
]),
$propertyName
);
return $this->nodeFactory->createLocalPropertyFetch($propertyName);
}
private function getClassName(): string