34
34
import com .github ._1c_syntax .bsl .languageserver .utils .RelatedInformation ;
35
35
import com .github ._1c_syntax .bsl .languageserver .utils .Trees ;
36
36
import com .github ._1c_syntax .bsl .parser .BSLParser ;
37
- import com .github ._1c_syntax .bsl .parser .BSLParserRuleContext ;
38
37
import lombok .RequiredArgsConstructor ;
39
38
import org .antlr .v4 .runtime .tree .RuleNode ;
40
39
import org .antlr .v4 .runtime .tree .TerminalNode ;
47
46
import java .util .ArrayList ;
48
47
import java .util .List ;
49
48
import java .util .Optional ;
50
- import java .util .Set ;
51
49
import java .util .stream .Collectors ;
52
50
import java .util .stream .Stream ;
53
51
62
60
63
61
@ RequiredArgsConstructor
64
62
public class RewriteMethodParameterDiagnostic extends AbstractDiagnostic {
65
- public static final int RULE_ASSIGNMENT = BSLParser .RULE_assignment ;
66
- private static final Set <Integer > ROOTS_OF_DEF_OR_REFS = Set .of (
67
- RULE_ASSIGNMENT , BSLParser .RULE_statement , BSLParser .RULE_subCodeBlock , BSLParser .RULE_fileCodeBlock
68
- );
69
63
private final ReferenceIndex referenceIndex ;
70
64
71
65
@ Override
@@ -147,9 +141,9 @@ private boolean noneWritingToDefOrSelfAssign(Reference defRef, Reference nextRef
147
141
final var assignment = defNode
148
142
.map (TerminalNode ::getParent )
149
143
.filter (BSLParser .LValueContext .class ::isInstance )
150
- .map (BSLParser . LValueContext . class :: cast )
151
- .map ( context -> Trees . getRootParent ( context , ROOTS_OF_DEF_OR_REFS ) )
152
- .filter ( rootContext -> rootContext . getRuleIndex () == RULE_ASSIGNMENT );
144
+ .map (RuleNode :: getParent )
145
+ .filter ( BSLParser . AssignmentContext . class :: isInstance )
146
+ .map ( BSLParser . AssignmentContext . class :: cast );
153
147
if (assignment .isEmpty ()) {
154
148
return true ;
155
149
}
@@ -159,22 +153,20 @@ private boolean noneWritingToDefOrSelfAssign(Reference defRef, Reference nextRef
159
153
if (refContext .isEmpty ()){
160
154
return true ;
161
155
}
162
- return isVarNameOnlyIntoExpression (assignment . get (), refContext );
156
+ return isVarNameOnlyIntoExpression (refContext );
163
157
}
164
158
165
- private static boolean isVarNameOnlyIntoExpression (BSLParserRuleContext assignment , Optional <RuleNode > refContext ) {
159
+ private static boolean isVarNameOnlyIntoExpression (Optional <RuleNode > refContext ) {
166
160
return refContext
167
161
.filter (BSLParser .ComplexIdentifierContext .class ::isInstance )
168
162
.map (BSLParser .ComplexIdentifierContext .class ::cast )
169
163
.filter (node -> node .getChildCount () == 1 )
170
164
.map (RuleNode ::getParent )
171
- .filter (node -> node .getChildCount () == 1 )
165
+ .filter (memberContext -> memberContext .getChildCount () == 1 )
172
166
.filter (BSLParser .MemberContext .class ::isInstance )
173
167
.map (RuleNode ::getParent )
174
- .filter (node -> node .getChildCount () == 1 )
168
+ .filter (expression -> expression .getChildCount () == 1 )
175
169
.filter (BSLParser .ExpressionContext .class ::isInstance )
176
- .map (RuleNode ::getParent )
177
- .filter (ruleNode -> ruleNode == assignment )
178
170
.isPresent ();
179
171
}
180
172
0 commit comments