[TriggerExtractor] extract logic to TriggerMessageResolver

This commit is contained in:
TomasVotruba 2017-09-06 12:43:59 +02:00
parent 242e185a11
commit af69092363
2 changed files with 62 additions and 44 deletions

View File

@ -14,6 +14,7 @@ use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\NodeVisitorAbstract;
use Rector\TriggerExtractor\Deprecation\DeprecationCollector;
use Rector\TriggerExtractor\TriggerError\TriggerMessageResolver;
final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class aware node visitor
{
@ -22,9 +23,17 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
*/
private $deprecationCollector;
public function __construct(DeprecationCollector $deprecationCollector)
{
/**
* @var TriggerMessageResolver
*/
private $triggerMessageResolver;
public function __construct(
DeprecationCollector $deprecationCollector,
TriggerMessageResolver $triggerMessageResolver
) {
$this->deprecationCollector = $deprecationCollector;
$this->triggerMessageResolver = $triggerMessageResolver;
}
public function enterNode(Node $node): void
@ -33,17 +42,10 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
return;
}
/** @var FuncCall $funcCallNode */
$funcCallNode = $node;
/** @var FuncCall $node */
$deprecation = $this->triggerMessageResolver->resolve($node->args[0]->value);
$messageNode = $funcCallNode->args[0]->value;
$message = '';
if ($messageNode instanceof Concat) {
$message .= $this->processConcatNode($messageNode->left);
$message .= $this->processConcatNode($messageNode->right);
}
$this->deprecationCollector->addDeprecation($message);
$this->deprecationCollector->addDeprecation($deprecation);
}
/**
@ -72,36 +74,6 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
return $constFetchNode->name->toString() === 'E_USER_DEPRECATED';
}
private function processConcatNode(Node $node): string
{
if ($node instanceof Method) {
$classMethodNode = $this->findParentOfType($node, ClassMethod::class);
return $classMethodNode->name->name;
}
if ($node instanceof String_) {
return $node->value;
}
throw new Exception(sprintf(
'Not implemented yet %s::%s()',
__CLASS__,
__METHOD__
));
}
private function findParentOfType(Node $node, string $type): Node
{
$parentNode = $node->getAttribute('parent');
while (! is_a($parentNode, $type, true)) {
$parentNode = $parentNode->getAttribute('parent');
}
return $parentNode;
}
private function isFunctionWithName(Node $node, string $name): bool
{
if (! $node instanceof FuncCall) {

View File

@ -2,7 +2,53 @@
namespace Rector\TriggerExtractor\TriggerError;
use Exception;
use PhpParser\Node;
use PhpParser\Node\Expr\BinaryOp\Concat;
use PhpParser\Node\Scalar\MagicConst\Method;
use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\ClassMethod;
final class TriggerMessageResolver
{
// ...
}
public function resolve(Node $node): string
{
$message = '';
if ($node instanceof Concat) {
$message .= $this->processConcatNode($node->left);
$message .= $this->processConcatNode($node->right);
}
return $message;
}
private function processConcatNode(Node $node): string
{
if ($node instanceof Method) {
$classMethodNode = $this->findParentOfType($node, ClassMethod::class);
return $classMethodNode->name->name;
}
if ($node instanceof String_) {
return $node->value;
}
throw new Exception(sprintf(
'Not implemented yet %s::%s()',
__CLASS__,
__METHOD__
));
}
private function findParentOfType(Node $node, string $type): Node
{
$parentNode = $node->getAttribute('parent');
while (! is_a($parentNode, $type, true)) {
$parentNode = $parentNode->getAttribute('parent');
}
return $parentNode;
}
}