Updated Rector to commit 87799d5f1d70d6399ed9e72c4ffa8b421c671527

87799d5f1d Add ParametersAcceptorSelectorVariantsWrapper to handle selectFromArgs() on multi variants, fallback to selectSingle (#2607)
This commit is contained in:
Tomas Votruba 2022-07-02 21:18:00 +00:00
parent d8601711a3
commit b50d03dfc6
11 changed files with 62 additions and 33 deletions

View File

@ -0,0 +1,23 @@
<?php
declare (strict_types=1);
namespace Rector\NodeTypeResolver\PHPStan;
use PhpParser\Node\Arg;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParametersAcceptor;
use PHPStan\Reflection\ParametersAcceptorSelector;
final class ParametersAcceptorSelectorVariantsWrapper
{
/**
* @param Arg[] $args
* @param \PHPStan\Reflection\FunctionReflection|\PHPStan\Reflection\MethodReflection $reflection
*/
public static function select($reflection, array $args, Scope $scope) : ParametersAcceptor
{
$variants = $reflection->getVariants();
return \count($variants) > 1 ? ParametersAcceptorSelector::selectFromArgs($scope, $args, $variants) : ParametersAcceptorSelector::selectSingle($variants);
}
}

View File

@ -9,11 +9,11 @@ use PhpParser\Node\Name;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
final class VariableToConstantGuard
{
/**
@ -73,7 +73,7 @@ final class VariableToConstantGuard
return $this->referencePositionsByFunctionName[$functionReflection->getName()];
}
$referencePositions = [];
$parametersAcceptor = ParametersAcceptorSelector::selectFromArgs($scope, $args, $functionReflection->getVariants());
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionReflection, $args, $scope);
foreach ($parametersAcceptor->getParameters() as $position => $parameterReflection) {
/** @var ParameterReflection $parameterReflection */
if (!$parameterReflection->passedByReference()->yes()) {

View File

@ -16,7 +16,6 @@ use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Trait_;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\Native\NativeFunctionReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\ErrorType;
use PHPStan\Type\MixedType;
use Rector\Core\NodeAnalyzer\ArgsAnalyzer;
@ -24,6 +23,7 @@ use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
use Rector\Php73\NodeTypeAnalyzer\NodeTypeAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -205,7 +205,11 @@ CODE_SAMPLE
if (!$functionReflection instanceof NativeFunctionReflection) {
return [];
}
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($functionReflection->getVariants());
$scope = $funcCall->getAttribute(AttributeKey::SCOPE);
if (!$scope instanceof Scope) {
return [];
}
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionReflection, $funcCall->getArgs(), $scope);
$functionName = $this->nodeNameResolver->getName($funcCall);
$argNames = self::ARG_POSITION_NAME_NULL_TO_STRICT_STRING[$functionName];
$positions = [];

View File

@ -5,10 +5,12 @@ namespace Rector\TypeDeclaration\NodeTypeAnalyzer;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Type;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
final class CallTypeAnalyzer
{
/**
@ -30,7 +32,11 @@ final class CallTypeAnalyzer
if ($methodReflection === null) {
return [];
}
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
$scope = $call->getAttribute(AttributeKey::SCOPE);
if (!$scope instanceof Scope) {
return [];
}
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($methodReflection, $call->getArgs(), $scope);
$parameterTypes = [];
/** @var ParameterReflection $parameterReflection */
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {

View File

@ -15,7 +15,6 @@ use PhpParser\Node\Scalar\MagicConst\Line;
use PhpParser\Node\Scalar\String_;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\Native\NativeFunctionReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\BooleanType;
use PHPStan\Type\FloatType;
@ -24,6 +23,7 @@ use PHPStan\Type\NullType;
use PHPStan\Type\StringType;
use PHPStan\Type\Type;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
final class AlwaysStrictScalarExprAnalyzer
{
/**
@ -89,17 +89,11 @@ final class AlwaysStrictScalarExprAnalyzer
if (!$functionReflection instanceof NativeFunctionReflection) {
return null;
}
$variants = $functionReflection->getVariants();
if (\count($variants) > 1) {
$scope = $funcCall->getAttribute(AttributeKey::SCOPE);
if ($scope instanceof Scope) {
$parametersAcceptor = ParametersAcceptorSelector::selectFromArgs($scope, $funcCall->getArgs(), $variants);
} else {
return null;
}
} else {
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($variants);
$scope = $funcCall->getAttribute(AttributeKey::SCOPE);
if (!$scope instanceof Scope) {
return null;
}
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionReflection, $funcCall->getArgs(), $scope);
return $parametersAcceptor->getReturnType();
}
}

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = 'c3d53b1f4b6f7667d65a4a77e9cc6ccd20fe16de';
public const PACKAGE_VERSION = '87799d5f1d70d6399ed9e72c4ffa8b421c671527';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2022-07-02 23:07:17';
public const RELEASE_DATE = '2022-07-02 23:12:11';
/**
* @var int
*/

View File

@ -26,7 +26,6 @@ use PhpParser\Node\Stmt\Trait_;
use PhpParser\Node\Stmt\Unset_;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
@ -39,6 +38,7 @@ use Rector\Core\ValueObject\MethodName;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer;
use Rector\Php80\NodeAnalyzer\PromotedPropertyResolver;
use Rector\ReadWrite\Guard\VariableToConstantGuard;
@ -329,7 +329,7 @@ final class PropertyManipulator
if (!$scope instanceof Scope) {
return \false;
}
$parametersAcceptor = ParametersAcceptorSelector::selectFromArgs($scope, $node->getArgs(), $functionLikeReflection->getVariants());
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionLikeReflection, $node->getArgs(), $scope);
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {
if ($parameterReflection->passedByReference()->yes()) {
return \true;

2
vendor/autoload.php vendored
View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531::getLoader();
return ComposerAutoloaderInit0d899d84cc90436c7c9216a68cb755ef::getLoader();

View File

@ -2255,6 +2255,7 @@ return array(
'Rector\\NodeTypeResolver\\NodeTypeResolver\\VariableTypeResolver' => $baseDir . '/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php',
'Rector\\NodeTypeResolver\\NodeVisitor\\FunctionLikeParamArgPositionNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/NodeVisitor/FunctionLikeParamArgPositionNodeVisitor.php',
'Rector\\NodeTypeResolver\\Node\\AttributeKey' => $baseDir . '/packages/NodeTypeResolver/Node/AttributeKey.php',
'Rector\\NodeTypeResolver\\PHPStan\\ParametersAcceptorSelectorVariantsWrapper' => $baseDir . '/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\NodeVisitor\\RemoveDeepChainMethodCallNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/RemoveDeepChainMethodCallNodeVisitor.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\PHPStanNodeScopeResolver' => $baseDir . '/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\ScopeFactory' => $baseDir . '/packages/NodeTypeResolver/PHPStan/Scope/ScopeFactory.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531
class ComposerAutoloaderInit0d899d84cc90436c7c9216a68cb755ef
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit0d899d84cc90436c7c9216a68cb755ef', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit0d899d84cc90436c7c9216a68cb755ef', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit6826775b68486f8dc4664a4ac81e2531::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInit6826775b68486f8dc4664a4ac81e2531::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire6826775b68486f8dc4664a4ac81e2531($fileIdentifier, $file);
composerRequire0d899d84cc90436c7c9216a68cb755ef($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInit6826775b68486f8dc4664a4ac81e2531
* @param string $file
* @return void
*/
function composerRequire6826775b68486f8dc4664a4ac81e2531($fileIdentifier, $file)
function composerRequire0d899d84cc90436c7c9216a68cb755ef($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit6826775b68486f8dc4664a4ac81e2531
class ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -2562,6 +2562,7 @@ class ComposerStaticInit6826775b68486f8dc4664a4ac81e2531
'Rector\\NodeTypeResolver\\NodeTypeResolver\\VariableTypeResolver' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php',
'Rector\\NodeTypeResolver\\NodeVisitor\\FunctionLikeParamArgPositionNodeVisitor' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/NodeVisitor/FunctionLikeParamArgPositionNodeVisitor.php',
'Rector\\NodeTypeResolver\\Node\\AttributeKey' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Node/AttributeKey.php',
'Rector\\NodeTypeResolver\\PHPStan\\ParametersAcceptorSelectorVariantsWrapper' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\NodeVisitor\\RemoveDeepChainMethodCallNodeVisitor' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/RemoveDeepChainMethodCallNodeVisitor.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\PHPStanNodeScopeResolver' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php',
'Rector\\NodeTypeResolver\\PHPStan\\Scope\\ScopeFactory' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PHPStan/Scope/ScopeFactory.php',
@ -3416,9 +3417,9 @@ class ComposerStaticInit6826775b68486f8dc4664a4ac81e2531
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit6826775b68486f8dc4664a4ac81e2531::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6826775b68486f8dc4664a4ac81e2531::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6826775b68486f8dc4664a4ac81e2531::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit0d899d84cc90436c7c9216a68cb755ef::$classMap;
}, null, ClassLoader::class);
}