Skip to content

Commit

Permalink
Cleanup stuff (#324)
Browse files Browse the repository at this point in the history
Co-authored-by: GitHub Action <action@github.com>
  • Loading branch information
TomasVotruba and actions-user committed Jun 28, 2021
1 parent 5e4b159 commit 62bbaa5
Show file tree
Hide file tree
Showing 13 changed files with 40 additions and 109 deletions.
90 changes: 12 additions & 78 deletions packages/NodeTypeResolver/MethodParameterTypeResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,18 @@

namespace Rector\NodeTypeResolver;

use PhpParser\Node\Expr\New_;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\Native\NativeMethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Type;
use PHPStan\Type\TypeUtils;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use ReflectionMethod;

final class MethodParameterTypeResolver
{
public function __construct(
private NodeTypeResolver $nodeTypeResolver,
private NodeNameResolver $nodeNameResolver,
private ReflectionResolver $reflectionResolver
private ReflectionResolver $reflectionResolver,
) {
}

Expand All @@ -40,84 +29,29 @@ public function provideParameterTypesByStaticCall(StaticCall $staticCall): array
return [];
}

return $this->provideParameterTypesFromMethodReflection($methodReflection);
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());

$parameterTypes = [];
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {
$parameterTypes[] = $parameterReflection->getType();
}

return $parameterTypes;
}

/**
* @return Type[]
*/
public function provideParameterTypesByClassMethod(ClassMethod $classMethod): array
{
$methodReflection = $this->provideByClassMethod($classMethod);
$methodReflection = $this->reflectionResolver->resolveMethodReflectionFromClassMethod($classMethod);
if (! $methodReflection instanceof MethodReflection) {
return [];
}

return $this->provideParameterTypesFromMethodReflection($methodReflection);
}

public function provideByClassMethod(ClassMethod $classMethod): ?MethodReflection
{
$class = $classMethod->getAttribute(AttributeKey::CLASS_NAME);
if (! is_string($class)) {
return null;
}

$method = $this->nodeNameResolver->getName($classMethod->name);
if (! is_string($method)) {
return null;
}

$scope = $classMethod->getAttribute(AttributeKey::SCOPE);
if (! $scope instanceof Scope) {
return null;
}

$classReflection = $scope->getClassReflection();
if (! $classReflection instanceof ClassReflection) {
return null;
}

return $classReflection->getMethod($method, $scope);
}

/**
* @return ParameterReflection[]
*/
public function getParameterReflectionsFromMethodReflection(MethodReflection $methodReflection): array
{
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
return $parametersAcceptor->getParameters();
}

/**
* @return string[]
*/
public function provideParameterNamesByNew(New_ $new): array
{
$objectType = $this->nodeTypeResolver->resolve($new->class);

$classes = TypeUtils::getDirectClassNames($objectType);

$parameterNames = [];

foreach ($classes as $class) {
$constructMethodReflection = $this->reflectionResolver->resolveNativeClassMethodReflection(
$class,
MethodName::CONSTRUCT
);
if (! $constructMethodReflection instanceof ReflectionMethod) {
continue;
}

foreach ($constructMethodReflection->getParameters() as $reflectionParameter) {
$parameterNames[] = $reflectionParameter->getName();
}
}

return $parameterNames;
}

/**
* @return Type[]
*/
Expand All @@ -130,8 +64,8 @@ private function provideParameterTypesFromMethodReflection(MethodReflection $met

$parameterTypes = [];

$parameterReflections = $this->getParameterReflectionsFromMethodReflection($methodReflection);
foreach ($parameterReflections as $parameterReflection) {
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {
$parameterTypes[] = $parameterReflection->getType();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\Php\PhpMethodReflection;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\MixedType;
Expand Down Expand Up @@ -95,7 +96,7 @@ private function resolveClassMethodReturnType(string $referencedClass, string $m

$methodReflection = $ancestorClassReflection->getMethod($methodName, $scope);
if ($methodReflection instanceof PhpMethodReflection) {
$parametersAcceptor = $methodReflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
return $parametersAcceptor->getReturnType();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use PhpParser\Node\Stmt\Catch_;
use PhpParser\Node\Stmt\Throw_;
use PhpParser\NodeTraverser;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\ObjectType;
use PHPStan\Type\TypeWithClassName;
Expand Down Expand Up @@ -172,7 +173,7 @@ private function resolveExceptionArgumentPosition(Name $exceptionName): ?int
}

$constructorReflectionMethod = $classReflection->getConstructor();
$parametersAcceptor = $constructorReflectionMethod->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($constructorReflectionMethod->getVariants());

foreach ($parametersAcceptor->getParameters() as $position => $parameterReflection) {
$parameterType = $parameterReflection->getType();
Expand Down
3 changes: 2 additions & 1 deletion rules/CodingStyle/NodeAnalyzer/SpreadVariablesCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use Rector\NodeTypeResolver\Node\AttributeKey;

final class SpreadVariablesCollector
Expand All @@ -20,7 +21,7 @@ public function resolveFromMethodReflection(MethodReflection | FunctionReflectio
{
$spreadParameterReflections = [];

$parametersAcceptor = $functionLikeReflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants());
foreach ($parametersAcceptor->getParameters() as $key => $parameterReflection) {
if (! $parameterReflection->isVariadic()) {
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,18 @@
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\DeadCode\Comparator\Parameter\ParameterDefaultsComparator;
use Rector\DeadCode\Comparator\Parameter\ParameterTypeComparator;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\MethodParameterTypeResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;

final class CurrentAndParentClassMethodComparator
{
public function __construct(
private NodeNameResolver $nodeNameResolver,
private MethodParameterTypeResolver $methodParameterTypeResolver,
private ParameterDefaultsComparator $parameterDefaultsComparator,
private ParameterTypeComparator $parameterTypeComparator,
private NodeComparator $nodeComparator
Expand Down Expand Up @@ -161,11 +160,9 @@ private function areParameterDefaultsDifferent(
ClassMethod $classMethod,
MethodReflection $methodReflection
): bool {
$parameterReflections = $this->methodParameterTypeResolver->getParameterReflectionsFromMethodReflection(
$methodReflection
);
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());

foreach ($parameterReflections as $key => $parameterReflection) {
foreach ($parametersAcceptor->getParameters() as $key => $parameterReflection) {
if (! isset($classMethod->params[$key])) {
if ($parameterReflection->getDefaultValue() !== null) {
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Type;
use PHPStan\Type\VerbosityLevel;
use Rector\Core\Rector\AbstractRector;
Expand Down Expand Up @@ -128,7 +129,7 @@ private function processRemoveNamedArgument(
$newArgs = [];
$keyParam = 0;

$parametersAcceptor = $reflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($reflection->getVariants());
$parameterReflections = $parametersAcceptor->getParameters();

foreach ($parameterReflections as $keyParam => $parameterReflection) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Generic\TemplateTypeMap;
use PHPStan\Type\Type;
use Rector\Core\Exception\ShouldNotHappenException;
Expand All @@ -35,8 +36,9 @@ public function createFromMethodReflectionAndReturnTagValueNode(
$templateTypeMap = $childParentClassReflections->getTemplateTypeMap();
$returnTagTypeNode = $this->resolveReturnTagTypeNode($returnTagValueNode, $templateTypeMap);

$parameterReflections = $methodReflection->getVariants()[0]
->getParameters();
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
$parameterReflections = $parametersAcceptor->getParameters();

$stringParameters = $this->resolveStringParameters($parameterReflections);

return new MethodTagValueNode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use PHPStan\Analyser\MutatingScope;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptor;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\MixedType;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver;
Expand Down Expand Up @@ -119,10 +119,7 @@ private function getNonVariableArguments(FuncCall | MethodCall | StaticCall $cal
return [];
}

$parametersAcceptor = $functionLikeReflection->getVariants()[0] ?? null;
if (! $parametersAcceptor instanceof ParametersAcceptor) {
return [];
}
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants());

/** @var ParameterReflection $parameterReflection */
foreach ($parametersAcceptor->getParameters() as $key => $parameterReflection) {
Expand Down
3 changes: 2 additions & 1 deletion rules/Php72/NodeFactory/AnonymousFunctionFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
use PhpParser\Parser;
use PHPStan\Reflection\FunctionVariantWithPhpDocs;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\Php\PhpMethodReflection;
use PHPStan\Type\MixedType;
use PHPStan\Type\VoidType;
Expand Down Expand Up @@ -86,7 +87,7 @@ public function create(array $params, array $stmts, ?Node $returnTypeNode): Clos
public function createFromPhpMethodReflection(PhpMethodReflection $phpMethodReflection, Expr $expr): Closure
{
/** @var FunctionVariantWithPhpDocs $functionVariantWithPhpDoc */
$functionVariantWithPhpDoc = $phpMethodReflection->getVariants()[0];
$functionVariantWithPhpDoc = ParametersAcceptorSelector::selectSingle($phpMethodReflection->getVariants());

$anonymousFunction = new Closure();
$newParams = $this->createParams($functionVariantWithPhpDoc->getParameters());
Expand Down
3 changes: 2 additions & 1 deletion rules/Php80/NodeResolver/RequireOptionalParamResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;

final class RequireOptionalParamResolver
{
Expand All @@ -15,7 +16,7 @@ final class RequireOptionalParamResolver
*/
public function resolveFromReflection(MethodReflection | FunctionReflection $functionLikeReflection): array
{
$parametersAcceptor = $functionLikeReflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants());

$optionalParams = [];
$requireParams = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PhpParser\Node\Expr\New_;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
Expand Down Expand Up @@ -179,7 +180,7 @@ private function resolveExpectedArgParamOrderIfDifferent(
return null;
}

$parametersAcceptor = $methodReflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());

$expectedParameterReflections = $this->requireOptionalParamResolver->resolveFromReflection(
$methodReflection
Expand Down
13 changes: 3 additions & 10 deletions src/NodeManipulator/ClassMethodAssignManipulator.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
use PhpParser\Node\Stmt\Foreach_;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptor;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
Expand Down Expand Up @@ -300,11 +300,7 @@ private function isMethodCallWithReferencedArgument(Node $node, Variable $variab
}

$variableName = $this->nodeNameResolver->getName($variable);
$parametersAcceptor = $methodReflection->getVariants()[0] ?? null;

if (! $parametersAcceptor instanceof ParametersAcceptor) {
return false;
}
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());

/** @var ParameterReflection $parameterReflection */
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {
Expand Down Expand Up @@ -354,10 +350,7 @@ private function isParameterReferencedInMethodReflection(New_ $new, int $argumen
return false;
}

$parametersAcceptor = $methodReflection->getVariants()[0] ?? null;
if (! $parametersAcceptor instanceof ParametersAcceptor) {
return false;
}
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());

/** @var ParameterReflection $parameterReflection */
foreach ($parametersAcceptor->getParameters() as $parameterPosition => $parameterReflection) {
Expand Down
3 changes: 2 additions & 1 deletion src/NodeManipulator/PropertyManipulator.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use PhpParser\Node\Expr\StaticPropertyFetch;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Property;
use PHPStan\Reflection\ParametersAcceptorSelector;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder;
Expand Down Expand Up @@ -127,7 +128,7 @@ private function isFoundByRefParam(MethodCall | StaticCall $node): bool
return false;
}

$parametersAcceptor = $functionLikeReflection->getVariants()[0];
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants());
foreach ($parametersAcceptor->getParameters() as $parameterReflection) {
if ($parameterReflection->passedByReference()->yes()) {
return true;
Expand Down

0 comments on commit 62bbaa5

Please sign in to comment.