rector/rules/Arguments/NodeAnalyzer/ChangedArgumentsDetector.php
Tomas Votruba eeaf265fd8 Updated Rector to commit a8a79d0b986fd08f699980f28c049d18ad04a4b8
a8a79d0b98 [Arguments] Use native types over weak string to define types (#903)
2021-09-19 11:08:13 +00:00

53 lines
1.7 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\Arguments\NodeAnalyzer;
use PhpParser\Node\Param;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
use Rector\StaticTypeMapper\StaticTypeMapper;
final class ChangedArgumentsDetector
{
/**
* @var \Rector\Core\PhpParser\Node\Value\ValueResolver
*/
private $valueResolver;
/**
* @var \Rector\StaticTypeMapper\StaticTypeMapper
*/
private $staticTypeMapper;
/**
* @var \Rector\NodeTypeResolver\TypeComparator\TypeComparator
*/
private $typeComparator;
public function __construct(\Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver, \Rector\StaticTypeMapper\StaticTypeMapper $staticTypeMapper, \Rector\NodeTypeResolver\TypeComparator\TypeComparator $typeComparator)
{
$this->valueResolver = $valueResolver;
$this->staticTypeMapper = $staticTypeMapper;
$this->typeComparator = $typeComparator;
}
/**
* @param mixed $value
*/
public function isDefaultValueChanged(\PhpParser\Node\Param $param, $value) : bool
{
if ($param->default === null) {
return \false;
}
return !$this->valueResolver->isValue($param->default, $value);
}
public function isTypeChanged(\PhpParser\Node\Param $param, ?\PHPStan\Type\Type $newType) : bool
{
if ($param->type === null) {
return \false;
}
if ($newType === null) {
return \true;
}
$currentParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type);
return !$this->typeComparator->areTypesEqual($currentParamType, $newType);
}
}