Updated Rector to commit b8c70125cda3a0fbdff216dfccaf065d8fe1aa2b

b8c70125cd [phpstan] Resolve duplicated methods (#2869)
This commit is contained in:
Tomas Votruba 2022-08-31 09:31:19 +00:00
parent 7b90cd54eb
commit afd984fc4e
17 changed files with 181 additions and 164 deletions

View File

@ -258,9 +258,6 @@ final class NodeTypeResolver
$bareType = TypeCombinator::removeNull($nodeType); $bareType = TypeCombinator::removeNull($nodeType);
return \is_a($bareType, $desiredType, \true); return \is_a($bareType, $desiredType, \true);
} }
/**
* @return class-string
*/
public function getFullyQualifiedClassName(TypeWithClassName $typeWithClassName) : string public function getFullyQualifiedClassName(TypeWithClassName $typeWithClassName) : string
{ {
if ($typeWithClassName instanceof ShortenedObjectType) { if ($typeWithClassName instanceof ShortenedObjectType) {

View File

@ -0,0 +1,20 @@
<?php
declare (strict_types=1);
namespace Rector\PhpDocParser;
use PHPStan\Type\MixedType;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
final class PhpDocInfoAnalyzer
{
public function isVarDocAlreadySet(PhpDocInfo $phpDocInfo) : bool
{
foreach (['@var', '@phpstan-var', '@psalm-var'] as $tagName) {
$varType = $phpDocInfo->getVarType($tagName);
if (!$varType instanceof MixedType) {
return \true;
}
}
return \false;
}
}

View File

@ -89,7 +89,7 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractTe
{ {
return \strncasecmp(\PHP_OS, 'WIN', 3) === 0; return \strncasecmp(\PHP_OS, 'WIN', 3) === 0;
} }
protected function doTestFileInfo(SmartFileInfo $fixtureFileInfo) protected function doTestFileInfo(SmartFileInfo $fixtureFileInfo) : void
{ {
if (Strings::match($fixtureFileInfo->getContents(), FixtureSplitter::SPLIT_LINE_REGEX)) { if (Strings::match($fixtureFileInfo->getContents(), FixtureSplitter::SPLIT_LINE_REGEX)) {
// changed content // changed content
@ -104,7 +104,6 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractTe
$expectedFileInfo = FixtureTempFileDumper::dump($expectedFileContents, $fileSuffix); $expectedFileInfo = FixtureTempFileDumper::dump($expectedFileContents, $fileSuffix);
$this->originalTempFileInfo = $inputFileInfo; $this->originalTempFileInfo = $inputFileInfo;
$this->doTestFileMatchesExpectedContent($inputFileInfo, $expectedFileInfo, $fixtureFileInfo); $this->doTestFileMatchesExpectedContent($inputFileInfo, $expectedFileInfo, $fixtureFileInfo);
//, $allowMatches);
} }
protected function getFixtureTempDirectory() : string protected function getFixtureTempDirectory() : string
{ {
@ -135,7 +134,7 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractTe
require_once __DIR__ . '/../../../vendor/scoper-autoload.php'; require_once __DIR__ . '/../../../vendor/scoper-autoload.php';
} }
} }
private function doTestFileMatchesExpectedContent(SmartFileInfo $originalFileInfo, SmartFileInfo $expectedFileInfo, SmartFileInfo $fixtureFileInfo, bool $allowMatches = \true) : void private function doTestFileMatchesExpectedContent(SmartFileInfo $originalFileInfo, SmartFileInfo $expectedFileInfo, SmartFileInfo $fixtureFileInfo) : void
{ {
$this->parameterProvider->changeParameter(Option::SOURCE, [$originalFileInfo->getRealPath()]); $this->parameterProvider->changeParameter(Option::SOURCE, [$originalFileInfo->getRealPath()]);
$changedContent = $this->processFileInfo($originalFileInfo); $changedContent = $this->processFileInfo($originalFileInfo);
@ -145,10 +144,7 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractTe
} }
try { try {
$this->assertStringEqualsFile($expectedFileInfo->getRealPath(), $changedContent); $this->assertStringEqualsFile($expectedFileInfo->getRealPath(), $changedContent);
} catch (ExpectationFailedException $expectationFailedException) { } catch (ExpectationFailedException $exception) {
if (!$allowMatches) {
throw $expectationFailedException;
}
FixtureFileUpdater::updateFixtureContent($originalFileInfo, $changedContent, $fixtureFileInfo); FixtureFileUpdater::updateFixtureContent($originalFileInfo, $changedContent, $fixtureFileInfo);
$contents = $expectedFileInfo->getContents(); $contents = $expectedFileInfo->getContents();
// make sure we don't get a diff in which every line is different (because of differences in EOL) // make sure we don't get a diff in which every line is different (because of differences in EOL)

View File

@ -21,6 +21,7 @@ use Rector\DeadCode\TypeNodeAnalyzer\GenericTypeNodeAnalyzer;
use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer; use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer;
use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\TypeComparator\TypeComparator; use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
use Rector\TypeDeclaration\NodeAnalyzer\ParamAnalyzer;
final class DeadParamTagValueNodeAnalyzer final class DeadParamTagValueNodeAnalyzer
{ {
/** /**
@ -43,16 +44,22 @@ final class DeadParamTagValueNodeAnalyzer
* @var \Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer * @var \Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer
*/ */
private $mixedArrayTypeNodeAnalyzer; private $mixedArrayTypeNodeAnalyzer;
public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ParamAnalyzer
*/
private $paramAnalyzer;
public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, ParamAnalyzer $paramAnalyzer)
{ {
$this->nodeNameResolver = $nodeNameResolver; $this->nodeNameResolver = $nodeNameResolver;
$this->typeComparator = $typeComparator; $this->typeComparator = $typeComparator;
$this->genericTypeNodeAnalyzer = $genericTypeNodeAnalyzer; $this->genericTypeNodeAnalyzer = $genericTypeNodeAnalyzer;
$this->mixedArrayTypeNodeAnalyzer = $mixedArrayTypeNodeAnalyzer; $this->mixedArrayTypeNodeAnalyzer = $mixedArrayTypeNodeAnalyzer;
$this->paramAnalyzer = $paramAnalyzer;
} }
public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $functionLike) : bool public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $functionLike) : bool
{ {
$param = $this->matchParamByName($paramTagValueNode->parameterName, $functionLike); $param = $this->paramAnalyzer->getParamByName($paramTagValueNode->parameterName, $functionLike);
if (!$param instanceof Param) { if (!$param instanceof Param) {
return \false; return \false;
} }
@ -129,15 +136,4 @@ final class DeadParamTagValueNodeAnalyzer
} }
return \true; return \true;
} }
private function matchParamByName(string $desiredParamName, FunctionLike $functionLike) : ?Param
{
foreach ($functionLike->getParams() as $param) {
$paramName = $this->nodeNameResolver->getName($param);
if ('$' . $paramName !== $desiredParamName) {
continue;
}
return $param;
}
return null;
}
} }

View File

@ -0,0 +1,35 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer;
use PhpParser\Node\Param;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\NodeNameResolver\NodeNameResolver;
final class ParamAnalyzer
{
/**
* @readonly
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(NodeNameResolver $nodeNameResolver)
{
$this->nodeNameResolver = $nodeNameResolver;
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike
*/
public function getParamByName(string $desiredParamName, $functionLike) : ?Param
{
foreach ($functionLike->getParams() as $param) {
$paramName = $this->nodeNameResolver->getName($param);
if ('$' . $paramName !== $desiredParamName) {
continue;
}
return $param;
}
return null;
}
}

View File

@ -0,0 +1,37 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\Return_;
final class ReturnAnalyzer
{
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike
*/
public function hasClassMethodRootReturn($functionLike) : bool
{
foreach ((array) $functionLike->stmts as $stmt) {
if ($stmt instanceof Return_) {
return \true;
}
}
return \false;
}
/**
* @param Return_[] $returns
*/
public function areExclusiveExprReturns(array $returns) : bool
{
foreach ($returns as $return) {
if (!$return->expr instanceof Expr) {
return \false;
}
}
return \true;
}
}

View File

@ -3,13 +3,13 @@
declare (strict_types=1); declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\Yield_; use PhpParser\Node\Expr\Yield_;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\Return_;
use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer;
final class AlwaysStrictReturnAnalyzer final class AlwaysStrictReturnAnalyzer
{ {
/** /**
@ -17,9 +17,15 @@ final class AlwaysStrictReturnAnalyzer
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder * @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/ */
private $betterNodeFinder; private $betterNodeFinder;
public function __construct(BetterNodeFinder $betterNodeFinder) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer
*/
private $returnAnalyzer;
public function __construct(BetterNodeFinder $betterNodeFinder, ReturnAnalyzer $returnAnalyzer)
{ {
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->returnAnalyzer = $returnAnalyzer;
} }
/** /**
* @return Return_[]|null * @return Return_[]|null
@ -39,37 +45,13 @@ final class AlwaysStrictReturnAnalyzer
return null; return null;
} }
// is one statement depth 3? // is one statement depth 3?
if (!$this->areExclusiveExprReturns($returns)) { if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) {
return null; return null;
} }
// has root return? // has root return?
if (!$this->hasClassMethodRootReturn($functionLike)) { if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) {
return null; return null;
} }
return $returns; return $returns;
} }
/**
* @param Return_[] $returns
*/
private function areExclusiveExprReturns(array $returns) : bool
{
foreach ($returns as $return) {
if (!$return->expr instanceof Expr) {
return \false;
}
}
return \true;
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike
*/
private function hasClassMethodRootReturn($functionLike) : bool
{
foreach ((array) $functionLike->stmts as $stmt) {
if ($stmt instanceof Return_) {
return \true;
}
}
return \false;
}
} }

View File

@ -3,7 +3,6 @@
declare (strict_types=1); declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\CallLike; use PhpParser\Node\Expr\CallLike;
use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\Yield_; use PhpParser\Node\Expr\Yield_;
@ -11,6 +10,7 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\Return_;
use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer;
use Rector\TypeDeclaration\NodeAnalyzer\ReturnFilter\ExclusiveNativeCallLikeReturnMatcher; use Rector\TypeDeclaration\NodeAnalyzer\ReturnFilter\ExclusiveNativeCallLikeReturnMatcher;
final class StrictNativeFunctionReturnTypeAnalyzer final class StrictNativeFunctionReturnTypeAnalyzer
{ {
@ -24,10 +24,16 @@ final class StrictNativeFunctionReturnTypeAnalyzer
* @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnFilter\ExclusiveNativeCallLikeReturnMatcher * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnFilter\ExclusiveNativeCallLikeReturnMatcher
*/ */
private $exclusiveNativeCallLikeReturnMatcher; private $exclusiveNativeCallLikeReturnMatcher;
public function __construct(BetterNodeFinder $betterNodeFinder, ExclusiveNativeCallLikeReturnMatcher $exclusiveNativeCallLikeReturnMatcher) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer
*/
private $returnAnalyzer;
public function __construct(BetterNodeFinder $betterNodeFinder, ExclusiveNativeCallLikeReturnMatcher $exclusiveNativeCallLikeReturnMatcher, ReturnAnalyzer $returnAnalyzer)
{ {
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->exclusiveNativeCallLikeReturnMatcher = $exclusiveNativeCallLikeReturnMatcher; $this->exclusiveNativeCallLikeReturnMatcher = $exclusiveNativeCallLikeReturnMatcher;
$this->returnAnalyzer = $returnAnalyzer;
} }
/** /**
* @return CallLike[]|null * @return CallLike[]|null
@ -47,37 +53,13 @@ final class StrictNativeFunctionReturnTypeAnalyzer
return null; return null;
} }
// is one statement depth 3? // is one statement depth 3?
if (!$this->areExclusiveExprReturns($returns)) { if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) {
return null; return null;
} }
// has root return? // has root return?
if (!$this->hasClassMethodRootReturn($functionLike)) { if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) {
return null; return null;
} }
return $this->exclusiveNativeCallLikeReturnMatcher->match($returns); return $this->exclusiveNativeCallLikeReturnMatcher->match($returns);
} }
/**
* @param Return_[] $returns
*/
private function areExclusiveExprReturns(array $returns) : bool
{
foreach ($returns as $return) {
if (!$return->expr instanceof Expr) {
return \false;
}
}
return \true;
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike
*/
private function hasClassMethodRootReturn($functionLike) : bool
{
foreach ((array) $functionLike->stmts as $stmt) {
if ($stmt instanceof Return_) {
return \true;
}
}
return \false;
}
} }

View File

@ -3,7 +3,6 @@
declare (strict_types=1); declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\New_;
@ -18,6 +17,7 @@ use PHPStan\Type\ObjectType;
use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer;
use Rector\TypeDeclaration\ValueObject\AssignToVariable; use Rector\TypeDeclaration\ValueObject\AssignToVariable;
final class StrictReturnNewAnalyzer final class StrictReturnNewAnalyzer
{ {
@ -36,11 +36,17 @@ final class StrictReturnNewAnalyzer
* @var \Rector\NodeTypeResolver\NodeTypeResolver * @var \Rector\NodeTypeResolver\NodeTypeResolver
*/ */
private $nodeTypeResolver; private $nodeTypeResolver;
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer
*/
private $returnAnalyzer;
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, ReturnAnalyzer $returnAnalyzer)
{ {
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->nodeNameResolver = $nodeNameResolver; $this->nodeNameResolver = $nodeNameResolver;
$this->nodeTypeResolver = $nodeTypeResolver; $this->nodeTypeResolver = $nodeTypeResolver;
$this->returnAnalyzer = $returnAnalyzer;
} }
/** /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike
@ -59,11 +65,11 @@ final class StrictReturnNewAnalyzer
return null; return null;
} }
// is one statement depth 3? // is one statement depth 3?
if (!$this->areExclusiveExprReturns($returns)) { if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) {
return null; return null;
} }
// has root return? // has root return?
if (!$this->hasClassMethodRootReturn($functionLike)) { if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) {
return null; return null;
} }
if (\count($returns) !== 1) { if (\count($returns) !== 1) {
@ -89,30 +95,6 @@ final class StrictReturnNewAnalyzer
} }
return null; return null;
} }
/**
* @param Return_[] $returns
*/
private function areExclusiveExprReturns(array $returns) : bool
{
foreach ($returns as $return) {
if (!$return->expr instanceof Expr) {
return \false;
}
}
return \true;
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike
*/
private function hasClassMethodRootReturn($functionLike) : bool
{
foreach ((array) $functionLike->stmts as $stmt) {
if ($stmt instanceof Return_) {
return \true;
}
}
return \false;
}
/** /**
* @return array<string, string> * @return array<string, string>
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike

View File

@ -17,6 +17,7 @@ use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
use Rector\TypeDeclaration\Guard\PhpDocNestedAnnotationGuard; use Rector\TypeDeclaration\Guard\PhpDocNestedAnnotationGuard;
use Rector\TypeDeclaration\Helper\PhpDocNullableTypeHelper; use Rector\TypeDeclaration\Helper\PhpDocNullableTypeHelper;
use Rector\TypeDeclaration\NodeAnalyzer\ParamAnalyzer;
use Rector\TypeDeclaration\PhpDocParser\ParamPhpDocNodeFactory; use Rector\TypeDeclaration\PhpDocParser\ParamPhpDocNodeFactory;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -50,13 +51,19 @@ final class ParamAnnotationIncorrectNullableRector extends AbstractRector
* @var \Rector\Core\Php\PhpVersionProvider * @var \Rector\Core\Php\PhpVersionProvider
*/ */
private $phpVersionProvider; private $phpVersionProvider;
public function __construct(TypeComparator $typeComparator, PhpDocNullableTypeHelper $phpDocNullableTypeHelper, PhpDocNestedAnnotationGuard $phpDocNestedAnnotationGuard, ParamPhpDocNodeFactory $paramPhpDocNodeFactory, PhpVersionProvider $phpVersionProvider) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ParamAnalyzer
*/
private $paramAnalyzer;
public function __construct(TypeComparator $typeComparator, PhpDocNullableTypeHelper $phpDocNullableTypeHelper, PhpDocNestedAnnotationGuard $phpDocNestedAnnotationGuard, ParamPhpDocNodeFactory $paramPhpDocNodeFactory, PhpVersionProvider $phpVersionProvider, ParamAnalyzer $paramAnalyzer)
{ {
$this->typeComparator = $typeComparator; $this->typeComparator = $typeComparator;
$this->phpDocNullableTypeHelper = $phpDocNullableTypeHelper; $this->phpDocNullableTypeHelper = $phpDocNullableTypeHelper;
$this->phpDocNestedAnnotationGuard = $phpDocNestedAnnotationGuard; $this->phpDocNestedAnnotationGuard = $phpDocNestedAnnotationGuard;
$this->paramPhpDocNodeFactory = $paramPhpDocNodeFactory; $this->paramPhpDocNodeFactory = $paramPhpDocNodeFactory;
$this->phpVersionProvider = $phpVersionProvider; $this->phpVersionProvider = $phpVersionProvider;
$this->paramAnalyzer = $paramAnalyzer;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
{ {
@ -115,20 +122,6 @@ CODE_SAMPLE
$phpDocNode = $phpDocInfo->getPhpDocNode(); $phpDocNode = $phpDocInfo->getPhpDocNode();
return $this->updateParamTagsIfRequired($phpDocNode, $node, $phpDocInfo); return $this->updateParamTagsIfRequired($phpDocNode, $node, $phpDocInfo);
} }
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $node
*/
private function matchParamByName(string $desiredParamName, $node) : ?Param
{
foreach ($node->getParams() as $param) {
$paramName = $this->nodeNameResolver->getName($param);
if ('$' . $paramName !== $desiredParamName) {
continue;
}
return $param;
}
return null;
}
private function wasUpdateOfParamTypeRequired(PhpDocInfo $phpDocInfo, Type $newType, Param $param, string $paramName) : bool private function wasUpdateOfParamTypeRequired(PhpDocInfo $phpDocInfo, Type $newType, Param $param, string $paramName) : bool
{ {
// better skip, could crash hard // better skip, could crash hard
@ -163,7 +156,7 @@ CODE_SAMPLE
if ($paramTagValueNode->type === null) { if ($paramTagValueNode->type === null) {
continue; continue;
} }
$param = $this->matchParamByName($paramTagValueNode->parameterName, $node); $param = $this->paramAnalyzer->getParamByName($paramTagValueNode->parameterName, $node);
if (!$param instanceof Param) { if (!$param instanceof Param) {
continue; continue;
} }

View File

@ -9,11 +9,11 @@ use PhpParser\Node\UnionType;
use PHPStan\Type\MixedType; use PHPStan\Type\MixedType;
use PHPStan\Type\NullType; use PHPStan\Type\NullType;
use PHPStan\Type\Type; use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
use Rector\Core\Php\PhpVersionProvider; use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\PhpDocParser\PhpDocInfoAnalyzer;
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
use Rector\TypeDeclaration\Guard\PropertyTypeOverrideGuard; use Rector\TypeDeclaration\Guard\PropertyTypeOverrideGuard;
use Rector\TypeDeclaration\TypeInferer\VarDocPropertyTypeInferer; use Rector\TypeDeclaration\TypeInferer\VarDocPropertyTypeInferer;
@ -44,12 +44,18 @@ final class PropertyTypeDeclarationRector extends AbstractRector
* @var \Rector\Core\Php\PhpVersionProvider * @var \Rector\Core\Php\PhpVersionProvider
*/ */
private $phpVersionProvider; private $phpVersionProvider;
public function __construct(VarDocPropertyTypeInferer $varDocPropertyTypeInferer, PhpDocTypeChanger $phpDocTypeChanger, PropertyTypeOverrideGuard $propertyTypeOverrideGuard, PhpVersionProvider $phpVersionProvider) /**
* @readonly
* @var \Rector\PhpDocParser\PhpDocInfoAnalyzer
*/
private $phpDocInfoAnalyzer;
public function __construct(VarDocPropertyTypeInferer $varDocPropertyTypeInferer, PhpDocTypeChanger $phpDocTypeChanger, PropertyTypeOverrideGuard $propertyTypeOverrideGuard, PhpVersionProvider $phpVersionProvider, PhpDocInfoAnalyzer $phpDocInfoAnalyzer)
{ {
$this->varDocPropertyTypeInferer = $varDocPropertyTypeInferer; $this->varDocPropertyTypeInferer = $varDocPropertyTypeInferer;
$this->phpDocTypeChanger = $phpDocTypeChanger; $this->phpDocTypeChanger = $phpDocTypeChanger;
$this->propertyTypeOverrideGuard = $propertyTypeOverrideGuard; $this->propertyTypeOverrideGuard = $propertyTypeOverrideGuard;
$this->phpVersionProvider = $phpVersionProvider; $this->phpVersionProvider = $phpVersionProvider;
$this->phpDocInfoAnalyzer = $phpDocInfoAnalyzer;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
{ {
@ -102,7 +108,7 @@ CODE_SAMPLE
if ($phpDocInfo->hasInheritDoc() && !$node->isPrivate()) { if ($phpDocInfo->hasInheritDoc() && !$node->isPrivate()) {
return null; return null;
} }
if ($this->isVarDocAlreadySet($phpDocInfo)) { if ($this->phpDocInfoAnalyzer->isVarDocAlreadySet($phpDocInfo)) {
return null; return null;
} }
$type = $this->varDocPropertyTypeInferer->inferProperty($node); $type = $this->varDocPropertyTypeInferer->inferProperty($node);
@ -119,16 +125,6 @@ CODE_SAMPLE
$this->phpDocTypeChanger->changeVarType($phpDocInfo, $type); $this->phpDocTypeChanger->changeVarType($phpDocInfo, $type);
return $node; return $node;
} }
private function isVarDocAlreadySet(PhpDocInfo $phpDocInfo) : bool
{
foreach (['@var', '@phpstan-var', '@psalm-var'] as $tagName) {
$varType = $phpDocInfo->getVarType($tagName);
if (!$varType instanceof MixedType) {
return \true;
}
}
return \false;
}
private function completeTypedProperty(Type $type, Property $property) : void private function completeTypedProperty(Type $type, Property $property) : void
{ {
$propertyTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PROPERTY); $propertyTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PROPERTY);

View File

@ -6,13 +6,12 @@ namespace Rector\TypeDeclaration\Rector\Property;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Property;
use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
use PHPStan\Type\MixedType;
use PHPStan\Type\Type; use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
use Rector\Core\Php\PhpVersionProvider; use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\PhpDocParser\PhpDocInfoAnalyzer;
use Rector\TypeDeclaration\Guard\PhpDocNestedAnnotationGuard; use Rector\TypeDeclaration\Guard\PhpDocNestedAnnotationGuard;
use Rector\TypeDeclaration\Helper\PhpDocNullableTypeHelper; use Rector\TypeDeclaration\Helper\PhpDocNullableTypeHelper;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -42,12 +41,18 @@ final class VarAnnotationIncorrectNullableRector extends AbstractRector
* @var \Rector\Core\Php\PhpVersionProvider * @var \Rector\Core\Php\PhpVersionProvider
*/ */
private $phpVersionProvider; private $phpVersionProvider;
public function __construct(PhpDocTypeChanger $phpDocTypeChanger, PhpDocNullableTypeHelper $phpDocNullableTypeHelper, PhpDocNestedAnnotationGuard $phpDocNestedAnnotationGuard, PhpVersionProvider $phpVersionProvider) /**
* @readonly
* @var \Rector\PhpDocParser\PhpDocInfoAnalyzer
*/
private $phpDocInfoAnalyzer;
public function __construct(PhpDocTypeChanger $phpDocTypeChanger, PhpDocNullableTypeHelper $phpDocNullableTypeHelper, PhpDocNestedAnnotationGuard $phpDocNestedAnnotationGuard, PhpVersionProvider $phpVersionProvider, PhpDocInfoAnalyzer $phpDocInfoAnalyzer)
{ {
$this->phpDocTypeChanger = $phpDocTypeChanger; $this->phpDocTypeChanger = $phpDocTypeChanger;
$this->phpDocNullableTypeHelper = $phpDocNullableTypeHelper; $this->phpDocNullableTypeHelper = $phpDocNullableTypeHelper;
$this->phpDocNestedAnnotationGuard = $phpDocNestedAnnotationGuard; $this->phpDocNestedAnnotationGuard = $phpDocNestedAnnotationGuard;
$this->phpVersionProvider = $phpVersionProvider; $this->phpVersionProvider = $phpVersionProvider;
$this->phpDocInfoAnalyzer = $phpDocInfoAnalyzer;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
{ {
@ -93,7 +98,7 @@ CODE_SAMPLE
return null; return null;
} }
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
if (!$this->isVarDocAlreadySet($phpDocInfo)) { if (!$this->phpDocInfoAnalyzer->isVarDocAlreadySet($phpDocInfo)) {
return null; return null;
} }
if ($node->type === null) { if ($node->type === null) {
@ -118,14 +123,4 @@ CODE_SAMPLE
} }
return $node; return $node;
} }
private function isVarDocAlreadySet(PhpDocInfo $phpDocInfo) : bool
{
foreach (['@var', '@phpstan-var', '@psalm-var'] as $tagName) {
$varType = $phpDocInfo->getVarType($tagName);
if (!$varType instanceof MixedType) {
return \true;
}
}
return \false;
}
} }

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '08ccd5a1a4f8757ff8f392c0e823a02bc95c14c1'; public const PACKAGE_VERSION = 'b8c70125cda3a0fbdff216dfccaf065d8fe1aa2b';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2022-08-31 08:58:15'; public const RELEASE_DATE = '2022-08-31 09:27:23';
/** /**
* @var int * @var int
*/ */

2
vendor/autoload.php vendored
View File

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

View File

@ -2371,6 +2371,7 @@ return array(
'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\FuncCallValueResolver' => $baseDir . '/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php', 'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\FuncCallValueResolver' => $baseDir . '/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php',
'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\MagicConstValueResolver' => $baseDir . '/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php', 'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\MagicConstValueResolver' => $baseDir . '/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php',
'Rector\\PhpDocParser\\NodeVisitor\\CallableNodeVisitor' => $baseDir . '/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php', 'Rector\\PhpDocParser\\NodeVisitor\\CallableNodeVisitor' => $baseDir . '/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php',
'Rector\\PhpDocParser\\PhpDocInfoAnalyzer' => $baseDir . '/packages/PhpDocParser/PhpDocInfoAnalyzer.php',
'Rector\\PhpDocParser\\PhpDocParser\\Contract\\PhpDocNodeVisitorInterface' => $baseDir . '/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php', 'Rector\\PhpDocParser\\PhpDocParser\\Contract\\PhpDocNodeVisitorInterface' => $baseDir . '/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php',
'Rector\\PhpDocParser\\PhpDocParser\\Exception\\InvalidTraverseException' => $baseDir . '/packages/PhpDocParser/PhpDocParser/Exception/InvalidTraverseException.php', 'Rector\\PhpDocParser\\PhpDocParser\\Exception\\InvalidTraverseException' => $baseDir . '/packages/PhpDocParser/PhpDocParser/Exception/InvalidTraverseException.php',
'Rector\\PhpDocParser\\PhpDocParser\\PhpDocNodeTraverser' => $baseDir . '/packages/PhpDocParser/PhpDocParser/PhpDocNodeTraverser.php', 'Rector\\PhpDocParser\\PhpDocParser\\PhpDocNodeTraverser' => $baseDir . '/packages/PhpDocParser/PhpDocParser/PhpDocNodeTraverser.php',
@ -2765,6 +2766,8 @@ return array(
'Rector\\TypeDeclaration\\NodeAnalyzer\\ClassMethodParamTypeCompleter' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ClassMethodParamTypeCompleter' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ControllerRenderMethodAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ControllerRenderMethodAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ControllerRenderMethodAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ControllerRenderMethodAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\PHPUnitDataProviderResolver' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/PHPUnitDataProviderResolver.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\PHPUnitDataProviderResolver' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/PHPUnitDataProviderResolver.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ParamAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ParamAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php',

View File

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

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946 class ComposerStaticInit3595c7d5f829a41f3682c309e93459b6
{ {
public static $files = array ( public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -2651,6 +2651,7 @@ class ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946
'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\FuncCallValueResolver' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php', 'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\FuncCallValueResolver' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php',
'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\MagicConstValueResolver' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php', 'Rector\\PhpDocParser\\NodeValue\\NodeValueResolver\\MagicConstValueResolver' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php',
'Rector\\PhpDocParser\\NodeVisitor\\CallableNodeVisitor' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php', 'Rector\\PhpDocParser\\NodeVisitor\\CallableNodeVisitor' => __DIR__ . '/../..' . '/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php',
'Rector\\PhpDocParser\\PhpDocInfoAnalyzer' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocInfoAnalyzer.php',
'Rector\\PhpDocParser\\PhpDocParser\\Contract\\PhpDocNodeVisitorInterface' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php', 'Rector\\PhpDocParser\\PhpDocParser\\Contract\\PhpDocNodeVisitorInterface' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php',
'Rector\\PhpDocParser\\PhpDocParser\\Exception\\InvalidTraverseException' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/Exception/InvalidTraverseException.php', 'Rector\\PhpDocParser\\PhpDocParser\\Exception\\InvalidTraverseException' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/Exception/InvalidTraverseException.php',
'Rector\\PhpDocParser\\PhpDocParser\\PhpDocNodeTraverser' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/PhpDocNodeTraverser.php', 'Rector\\PhpDocParser\\PhpDocParser\\PhpDocNodeTraverser' => __DIR__ . '/../..' . '/packages/PhpDocParser/PhpDocParser/PhpDocNodeTraverser.php',
@ -3045,6 +3046,8 @@ class ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946
'Rector\\TypeDeclaration\\NodeAnalyzer\\ClassMethodParamTypeCompleter' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ClassMethodParamTypeCompleter' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ControllerRenderMethodAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ControllerRenderMethodAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ControllerRenderMethodAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ControllerRenderMethodAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\PHPUnitDataProviderResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/PHPUnitDataProviderResolver.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\PHPUnitDataProviderResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/PHPUnitDataProviderResolver.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ParamAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ParamAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php',
'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php',
@ -3158,9 +3161,9 @@ class ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit3595c7d5f829a41f3682c309e93459b6::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit3595c7d5f829a41f3682c309e93459b6::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitf3134b9ed12cab2fbd4484930fa12946::$classMap; $loader->classMap = ComposerStaticInit3595c7d5f829a41f3682c309e93459b6::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }