diff --git a/packages/NodeValueResolver/src/Contract/NodeValueResolverAwareInterface.php b/packages/NodeValueResolver/src/Contract/NodeValueResolverAwareInterface.php deleted file mode 100644 index 5d7c9773b87..00000000000 --- a/packages/NodeValueResolver/src/Contract/NodeValueResolverAwareInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -collectPerNodeValueResolversToValueResolver($containerBuilder); - $this->setNodeValueResolverToAware($containerBuilder); - } - - private function collectPerNodeValueResolversToValueResolver(ContainerBuilder $containerBuilder): void - { - DefinitionCollector::loadCollectorWithType( - $containerBuilder, - NodeValueResolver::class, - PerNodeValueResolverInterface::class, - 'addPerNodeValueResolver' - ); - } - - private function setNodeValueResolverToAware(ContainerBuilder $containerBuilder): void - { - DefinitionCollector::loadCollectorWithType( - $containerBuilder, - NodeValueResolverAwareInterface::class, - NodeValueResolver::class, - 'setNodeValueResolver' - ); - } -} diff --git a/packages/NodeValueResolver/src/NodeValueResolver.php b/packages/NodeValueResolver/src/NodeValueResolver.php index e9db3e69fcd..72647d34216 100644 --- a/packages/NodeValueResolver/src/NodeValueResolver.php +++ b/packages/NodeValueResolver/src/NodeValueResolver.php @@ -2,22 +2,20 @@ namespace Rector\NodeValueResolver; +use PhpParser\ConstExprEvaluator; use PhpParser\Node; -use Rector\NodeValueResolver\Contract\PerNodeValueResolver\PerNodeValueResolverInterface; +use PhpParser\Node\Expr; -/** - * Inspired by https://github.com/Roave/BetterReflection/blob/master/test/unit/NodeCompiler/CompileNodeToValueTest.php - */ final class NodeValueResolver { /** - * @var PerNodeValueResolverInterface[] + * @var ConstExprEvaluator */ - private $perNodeValueResolvers = []; + private $constExprEvaluator; - public function addPerNodeValueResolver(PerNodeValueResolverInterface $perNodeValueResolver): void + public function __construct(ConstExprEvaluator $constExprEvaluator) { - $this->perNodeValueResolvers[$perNodeValueResolver->getNodeClass()] = $perNodeValueResolver; + $this->constExprEvaluator = $constExprEvaluator; } /** @@ -25,11 +23,10 @@ final class NodeValueResolver */ public function resolve(Node $node) { - $nodeClass = get_class($node); - if (! isset($this->perNodeValueResolvers[$nodeClass])) { - return null; + if ($node instanceof Expr) { + return $this->constExprEvaluator->evaluateDirectly($node); } - return $this->perNodeValueResolvers[$nodeClass]->resolve($node); + return null; } } diff --git a/packages/NodeValueResolver/src/PerNodeValueResolver/ArrayValueResolver.php b/packages/NodeValueResolver/src/PerNodeValueResolver/ArrayValueResolver.php deleted file mode 100644 index e295edafb2b..00000000000 --- a/packages/NodeValueResolver/src/PerNodeValueResolver/ArrayValueResolver.php +++ /dev/null @@ -1,50 +0,0 @@ -items as $arrayItem) { - $compiledValue = $this->nodeValueResolver->resolve($arrayItem->value); - if ($arrayItem->key === null) { - $compiledArray[] = $compiledValue; - - continue; - } - - $key = $this->nodeValueResolver->resolve($arrayItem->key); - $compiledArray[$key] = $compiledValue; - } - - return $compiledArray; - } - - public function setNodeValueResolver(NodeValueResolver $nodeValueResolver): void - { - $this->nodeValueResolver = $nodeValueResolver; - } -} diff --git a/packages/NodeValueResolver/src/PerNodeValueResolver/ClassConstFetchResolver.php b/packages/NodeValueResolver/src/PerNodeValueResolver/ClassConstFetchResolver.php deleted file mode 100644 index ff49688ccf8..00000000000 --- a/packages/NodeValueResolver/src/PerNodeValueResolver/ClassConstFetchResolver.php +++ /dev/null @@ -1,33 +0,0 @@ -class->getAttribute(Attribute::RESOLVED_NAME) - ->toString(); - - /** @var Identifier $identifierNode */ - $identifierNode = $classConstFetchNode->name; - - $constant = $identifierNode->toString(); - - return $class . '::' . $constant; - } -} diff --git a/packages/NodeValueResolver/src/PerNodeValueResolver/ConstFetchResolver.php b/packages/NodeValueResolver/src/PerNodeValueResolver/ConstFetchResolver.php deleted file mode 100644 index 1821ff1ca7c..00000000000 --- a/packages/NodeValueResolver/src/PerNodeValueResolver/ConstFetchResolver.php +++ /dev/null @@ -1,35 +0,0 @@ -name->toString()); - - if ($name === 'true') { - return true; - } - - if ($name === 'false') { - return false; - } - - if ($name === 'null') { - return null; - } - } -} diff --git a/packages/NodeValueResolver/src/PerNodeValueResolver/StringValueResolver.php b/packages/NodeValueResolver/src/PerNodeValueResolver/StringValueResolver.php deleted file mode 100644 index 2a58aeeceb9..00000000000 --- a/packages/NodeValueResolver/src/PerNodeValueResolver/StringValueResolver.php +++ /dev/null @@ -1,23 +0,0 @@ -value; - } -} diff --git a/packages/NodeValueResolver/src/config/services.yml b/packages/NodeValueResolver/src/config/services.yml index 89638ed4e5a..9f2d577f8a7 100644 --- a/packages/NodeValueResolver/src/config/services.yml +++ b/packages/NodeValueResolver/src/config/services.yml @@ -5,4 +5,6 @@ services: Rector\NodeValueResolver\: resource: '../' - exclude: '../{Contract}' + + PhpParser\ConstExprEvaluator: ~ + diff --git a/src/DependencyInjection/AppKernel.php b/src/DependencyInjection/AppKernel.php index 4882e800d83..c00538dfcd0 100644 --- a/src/DependencyInjection/AppKernel.php +++ b/src/DependencyInjection/AppKernel.php @@ -4,7 +4,6 @@ namespace Rector\DependencyInjection; use Rector\DependencyInjection\CompilerPass\CollectorCompilerPass; use Rector\NodeTypeResolver\DependencyInjection\CompilerPass\NodeTypeResolverCollectorCompilerPass; -use Rector\NodeValueResolver\DependencyInjection\CompilerPass\NodeValueResolverCollectorCompilerPass; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\BundleInterface; @@ -59,7 +58,6 @@ final class AppKernel extends Kernel protected function build(ContainerBuilder $containerBuilder): void { $containerBuilder->addCompilerPass(new CollectorCompilerPass()); - $containerBuilder->addCompilerPass(new NodeValueResolverCollectorCompilerPass()); $containerBuilder->addCompilerPass(new NodeTypeResolverCollectorCompilerPass()); } }