88use PhpParser \Node \Param ;
99use PHPStan \PhpDocParser \Ast \PhpDoc \ParamTagValueNode ;
1010use PHPStan \PhpDocParser \Ast \Type \IdentifierTypeNode ;
11- use PHPStan \Type \Generic \TemplateType ;
1211use Rector \BetterPhpDocParser \PhpDocManipulator \PhpDocTypeChanger ;
1312use Rector \BetterPhpDocParser \ValueObject \Type \BracketsAwareUnionTypeNode ;
1413use Rector \DeadCode \PhpDoc \Guard \StandaloneTypeRemovalGuard ;
14+ use Rector \DeadCode \PhpDoc \Guard \TemplateTypeRemovalGuard ;
1515use Rector \DeadCode \TypeNodeAnalyzer \GenericTypeNodeAnalyzer ;
1616use Rector \DeadCode \TypeNodeAnalyzer \MixedArrayTypeNodeAnalyzer ;
1717use Rector \NodeNameResolver \NodeNameResolver ;
@@ -60,7 +60,12 @@ final class DeadParamTagValueNodeAnalyzer
6060 * @var \Rector\StaticTypeMapper\StaticTypeMapper
6161 */
6262 private $ staticTypeMapper ;
63- public function __construct (NodeNameResolver $ nodeNameResolver , TypeComparator $ typeComparator , GenericTypeNodeAnalyzer $ genericTypeNodeAnalyzer , MixedArrayTypeNodeAnalyzer $ mixedArrayTypeNodeAnalyzer , ParamAnalyzer $ paramAnalyzer , PhpDocTypeChanger $ phpDocTypeChanger , StandaloneTypeRemovalGuard $ standaloneTypeRemovalGuard , StaticTypeMapper $ staticTypeMapper )
63+ /**
64+ * @readonly
65+ * @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard
66+ */
67+ private $ templateTypeRemovalGuard ;
68+ public function __construct (NodeNameResolver $ nodeNameResolver , TypeComparator $ typeComparator , GenericTypeNodeAnalyzer $ genericTypeNodeAnalyzer , MixedArrayTypeNodeAnalyzer $ mixedArrayTypeNodeAnalyzer , ParamAnalyzer $ paramAnalyzer , PhpDocTypeChanger $ phpDocTypeChanger , StandaloneTypeRemovalGuard $ standaloneTypeRemovalGuard , StaticTypeMapper $ staticTypeMapper , TemplateTypeRemovalGuard $ templateTypeRemovalGuard )
6469 {
6570 $ this ->nodeNameResolver = $ nodeNameResolver ;
6671 $ this ->typeComparator = $ typeComparator ;
@@ -70,6 +75,7 @@ public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $
7075 $ this ->phpDocTypeChanger = $ phpDocTypeChanger ;
7176 $ this ->standaloneTypeRemovalGuard = $ standaloneTypeRemovalGuard ;
7277 $ this ->staticTypeMapper = $ staticTypeMapper ;
78+ $ this ->templateTypeRemovalGuard = $ templateTypeRemovalGuard ;
7379 }
7480 public function isDead (ParamTagValueNode $ paramTagValueNode , FunctionLike $ functionLike ) : bool
7581 {
@@ -84,7 +90,7 @@ public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $funct
8490 return \false;
8591 }
8692 $ docType = $ this ->staticTypeMapper ->mapPHPStanPhpDocTypeNodeToPHPStanType ($ paramTagValueNode ->type , $ functionLike );
87- if ($ docType instanceof TemplateType ) {
93+ if (! $ this -> templateTypeRemovalGuard -> isLegal ( $ docType) ) {
8894 return \false;
8995 }
9096 if ($ param ->type instanceof Name && $ this ->nodeNameResolver ->isName ($ param ->type , 'object ' )) {
0 commit comments