fix FormSetRequiredRector

This commit is contained in:
TomasVotruba 2017-10-26 02:27:56 +02:00
parent 7deec75fc4
commit 902d8c5424
2 changed files with 13 additions and 16 deletions

View File

@ -4,7 +4,9 @@ namespace Rector\NodeAnalyzer;
use PhpParser\Node;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Identifier;
use PhpParser\NodeFinder;
use Rector\BetterReflection\Reflector\SmartClassReflector;
use Rector\Node\Attribute;
use ReflectionMethod;
@ -16,14 +18,20 @@ final class MethodCallAnalyzer
*/
private $smartClassReflector;
/**
* @var NodeFinder
*/
private $nodeFinder;
/**
* @var string[][]
*/
private $publicMethodNamesForType = [];
public function __construct(SmartClassReflector $smartClassReflector)
public function __construct(SmartClassReflector $smartClassReflector, NodeFinder $nodeFinder)
{
$this->smartClassReflector = $smartClassReflector;
$this->nodeFinder = $nodeFinder;
}
/**
@ -135,20 +143,8 @@ final class MethodCallAnalyzer
*/
private function resolveVariableType(MethodCall $methodCallNode): array
{
$varNode = $methodCallNode->var;
$variableNode = $this->nodeFinder->findFirstInstanceOf([$methodCallNode], Variable::class);
// get types?
// @todo resolve in classResolver -> add parent types as well .=))
// itterate up, @todo: handle in TypeResover
while ($varNode->getAttribute(Attribute::TYPES) === null) {
if (property_exists($varNode, 'var')) {
$varNode = $varNode->var;
} else {
break;
}
}
return (array) $varNode->getAttribute(Attribute::TYPES);
return (array) $variableNode->getAttribute(Attribute::TYPES);
}
}

View File

@ -52,7 +52,8 @@ final class FormSetRequiredRector extends AbstractRector
return false;
}
if ($arg->value->class->getAttribute(Attribute::TYPES) !== self::FORM_CLASS) {
$argTypes = $arg->value->class->getAttribute(Attribute::TYPES);
if (! in_array(self::FORM_CLASS, $argTypes, true)) {
return false;
}