12
12
use Rector \BetterPhpDocParser \PhpDocInfo \PhpDocInfo ;
13
13
use Rector \BetterPhpDocParser \PhpDocInfo \PhpDocInfoFactory ;
14
14
use Rector \Comments \NodeDocBlock \DocBlockUpdater ;
15
+ use Rector \DeadCode \PhpDoc \DeadVarTagValueNodeAnalyzer ;
15
16
use Rector \PHPStanStaticTypeMapper \Enum \TypeKind ;
16
17
use Rector \PHPUnit \NodeAnalyzer \TestsNodeAnalyzer ;
17
18
use Rector \Rector \AbstractRector ;
@@ -47,13 +48,18 @@ final class TypedPropertyFromDocblockSetUpDefinedRector extends AbstractRector i
47
48
* @readonly
48
49
*/
49
50
private DocBlockUpdater $ docBlockUpdater ;
50
- public function __construct (TestsNodeAnalyzer $ testsNodeAnalyzer , ConstructorAssignDetector $ constructorAssignDetector , PhpDocInfoFactory $ phpDocInfoFactory , StaticTypeMapper $ staticTypeMapper , DocBlockUpdater $ docBlockUpdater )
51
+ /**
52
+ * @readonly
53
+ */
54
+ private DeadVarTagValueNodeAnalyzer $ deadVarTagValueNodeAnalyzer ;
55
+ public function __construct (TestsNodeAnalyzer $ testsNodeAnalyzer , ConstructorAssignDetector $ constructorAssignDetector , PhpDocInfoFactory $ phpDocInfoFactory , StaticTypeMapper $ staticTypeMapper , DocBlockUpdater $ docBlockUpdater , DeadVarTagValueNodeAnalyzer $ deadVarTagValueNodeAnalyzer )
51
56
{
52
57
$ this ->testsNodeAnalyzer = $ testsNodeAnalyzer ;
53
58
$ this ->constructorAssignDetector = $ constructorAssignDetector ;
54
59
$ this ->phpDocInfoFactory = $ phpDocInfoFactory ;
55
60
$ this ->staticTypeMapper = $ staticTypeMapper ;
56
61
$ this ->docBlockUpdater = $ docBlockUpdater ;
62
+ $ this ->deadVarTagValueNodeAnalyzer = $ deadVarTagValueNodeAnalyzer ;
57
63
}
58
64
public function getRuleDefinition () : RuleDefinition
59
65
{
@@ -141,9 +147,9 @@ public function refactor(Node $node) : ?Node
141
147
if (!$ nativePropertyTypeNode instanceof Node) {
142
148
continue ;
143
149
}
150
+ $ property ->type = $ nativePropertyTypeNode ;
144
151
// remove var tag
145
152
$ this ->removeVarTag ($ propertyPhpDocInfo , $ property );
146
- $ property ->type = $ nativePropertyTypeNode ;
147
153
$ hasChanged = \true;
148
154
}
149
155
if ($ hasChanged ) {
@@ -157,6 +163,13 @@ public function provideMinPhpVersion() : int
157
163
}
158
164
private function removeVarTag (PhpDocInfo $ propertyPhpDocInfo , Property $ property ) : void
159
165
{
166
+ $ varTagValueNode = $ propertyPhpDocInfo ->getVarTagValueNode ();
167
+ if (!$ varTagValueNode instanceof VarTagValueNode) {
168
+ return ;
169
+ }
170
+ if (!$ this ->deadVarTagValueNodeAnalyzer ->isDead ($ varTagValueNode , $ property )) {
171
+ return ;
172
+ }
160
173
$ propertyPhpDocInfo ->removeByType (VarTagValueNode::class);
161
174
$ this ->docBlockUpdater ->updateRefactoredNodeWithPhpDocInfo ($ property );
162
175
}
0 commit comments