Skip to content

Commit 182aea9

Browse files
authored
Merge pull request #3710 from 1c-syntax/feature/optimize-location-range
Refactor Location and Reference classes to use record type and improve range handling methods
2 parents 6758f6e + 0b3c3c2 commit 182aea9

29 files changed

+355
-216
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ public void check() {
5353
var uri = documentContext.getUri();
5454

5555
referenceIndex.getReferencesFrom(uri, SymbolKind.Method).stream()
56-
.filter(reference -> reference.getSymbol().isDeprecated())
57-
.filter(reference -> !reference.getFrom().isDeprecated())
56+
.filter(reference -> reference.symbol().isDeprecated())
57+
.filter(reference -> !reference.from().isDeprecated())
5858
.forEach((Reference reference) -> {
59-
var deprecatedSymbol = reference.getSymbol();
59+
var deprecatedSymbol = reference.symbol();
6060
var deprecationInfo = getDeprecationInfo(deprecatedSymbol);
6161
var message = info.getMessage(deprecatedSymbol.getName(), deprecationInfo);
62-
diagnosticStorage.addDiagnostic(reference.getSelectionRange(), message);
62+
diagnosticStorage.addDiagnostic(reference.selectionRange(), message);
6363
});
6464
}
6565

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic
5959
public ParseTree visitFile(BSLParser.FileContext ctx) {
6060
super.visitFile(ctx);
6161
for (var reference : referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method)) {
62-
var call = calls.get(reference.getSelectionRange());
62+
var call = calls.get(reference.selectionRange());
6363
if (call != null) {
64-
checkMethod((MethodSymbol) reference.getSymbol(), call);
64+
checkMethod((MethodSymbol) reference.symbol(), call);
6565
}
6666
}
6767
return ctx;

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,14 @@ private Optional<CallData> getReferenceToMethodCall(SymbolOccurrence symbolOccur
8585
// т.к. через refIndex.getReferences нельзя получить приватные методы, приходится обходить символы модуля
8686
final var methodSymbol = document.get()
8787
.getSymbolTree().getMethodSymbol(symbol.symbolName());
88+
final var location = symbolOccurrence.location();
89+
final var locationRange = location.getRange();
8890
if (methodSymbol.isEmpty()) {
89-
final var location = symbolOccurrence.location();
9091
// Нельзя использовать symbol.getSymbolName(), т.к. имя в нижнем регистре
9192
return Optional.of(
9293
new CallData(mdObject.get().getName(),
93-
getMethodNameByLocation(documentContext.getAst(), location.getRange()),
94-
location.getRange(), false, false));
94+
getMethodNameByLocation(documentContext.getAst(), locationRange),
95+
locationRange, false, false));
9596
}
9697
// вызовы приватных методов внутри самого модуля пропускаем
9798
if (document.get().getUri().equals(documentContext.getUri())) {
@@ -101,7 +102,7 @@ private Optional<CallData> getReferenceToMethodCall(SymbolOccurrence symbolOccur
101102
.filter(methodSymbol2 -> !methodSymbol2.isExport())
102103
.map(methodSymbol1 -> new CallData(mdObject.get().getName(),
103104
methodSymbol1.getName(),
104-
symbolOccurrence.location().getRange(), true, true));
105+
locationRange, true, true));
105106
}
106107

107108
private void fireIssue(CallData callData) {

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ private Optional<ModuleSymbol> getPrivilegedModuleSymbol(CommonModule mdCommonMo
9090
}
9191

9292
private boolean isReferenceToModules(Reference reference) {
93-
if (!validateNestedCalls && reference.getUri().equals(documentContext.getUri())) {
93+
if (!validateNestedCalls && reference.uri().equals(documentContext.getUri())) {
9494
return false;
9595
}
9696
return reference.getSourceDefinedSymbol()
@@ -102,7 +102,7 @@ private boolean isReferenceToModules(Reference reference) {
102102
}
103103

104104
private void fireIssue(Reference reference) {
105-
diagnosticStorage.addDiagnostic(reference.getSelectionRange(),
106-
info.getMessage(reference.getSymbol().getName()));
105+
diagnosticStorage.addDiagnostic(reference.selectionRange(),
106+
info.getMessage(reference.symbol().getName()));
107107
}
108108
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private Optional<Triple<VariableSymbol, Reference, List<Reference>>> isOverwrite
104104
private List<Reference> getSortedReferencesByLocation(VariableSymbol variable) {
105105
final var references = referenceIndex.getReferencesTo(variable);
106106
return references.stream()
107-
.sorted((o1, o2) -> compare(o1.getSelectionRange(), o2.getSelectionRange()))
107+
.sorted((o1, o2) -> compare(o1.selectionRange(), o2.selectionRange()))
108108
.collect(Collectors.toList());
109109
}
110110

@@ -127,7 +127,7 @@ public static int compare(Position pos1, Position pos2) {
127127
}
128128

129129
private Optional<Reference> isOverwrited(List<Reference> references) {
130-
if (references.isEmpty() || references.get(0).getOccurrenceType() != OccurrenceType.DEFINITION) {
130+
if (references.isEmpty() || references.get(0).occurrenceType() != OccurrenceType.DEFINITION) {
131131
return Optional.empty();
132132
}
133133

@@ -147,7 +147,7 @@ private Optional<Reference> isOverwrited(List<Reference> references) {
147147

148148
private Optional<RuleNode> getRefContextInsideDefAssign(Reference defRef, Reference nextRef) {
149149
final var defNode = Trees.findTerminalNodeContainsPosition(documentContext.getAst(),
150-
defRef.getSelectionRange().getStart());
150+
defRef.selectionRange().getStart());
151151
final var assignment = defNode
152152
.map(TerminalNode::getParent)
153153
.filter(BSLParser.LValueContext.class::isInstance)
@@ -156,7 +156,7 @@ private Optional<RuleNode> getRefContextInsideDefAssign(Reference defRef, Refere
156156
.map(BSLParser.AssignmentContext.class::cast);
157157

158158
return assignment.flatMap(assignContext ->
159-
Trees.findTerminalNodeContainsPosition(assignContext, nextRef.getSelectionRange().getStart()))
159+
Trees.findTerminalNodeContainsPosition(assignContext, nextRef.selectionRange().getStart()))
160160
.map(TerminalNode::getParent);
161161
}
162162

@@ -177,7 +177,7 @@ private void fireIssue(VariableSymbol variable, Reference nodeForIssue, List<Ref
177177
var refsForIssue = references.stream()
178178
.map(reference -> RelatedInformation.create(
179179
documentContext.getUri(),
180-
reference.getSelectionRange(),
180+
reference.selectionRange(),
181181
"+1"
182182
)).toList();
183183
var resultRefs = new ArrayList<DiagnosticRelatedInformation>();
@@ -187,6 +187,6 @@ private void fireIssue(VariableSymbol variable, Reference nodeForIssue, List<Ref
187187
"0"));
188188
resultRefs.addAll(refsForIssue);
189189

190-
diagnosticStorage.addDiagnostic(nodeForIssue.getSelectionRange(), info.getMessage(variable.getName()), resultRefs);
190+
diagnosticStorage.addDiagnostic(nodeForIssue.selectionRange(), info.getMessage(variable.getName()), resultRefs);
191191
}
192192
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private static boolean hasClientCompilerDirective(BSLParser.ModuleVarContext ctx
181181
private boolean isAssignedParam(MethodSymbol method, ParameterDefinition parameterDefinition) {
182182
return getVariableByParameter(method, parameterDefinition)
183183
.noneMatch(variableSymbol -> referenceIndex.getReferencesTo(variableSymbol).stream()
184-
.anyMatch(ref -> ref.getOccurrenceType() == OccurrenceType.DEFINITION));
184+
.anyMatch(ref -> ref.occurrenceType() == OccurrenceType.DEFINITION));
185185
}
186186

187187
private static Stream<VariableSymbol> getVariableByParameter(MethodSymbol method,
@@ -198,13 +198,13 @@ private static Stream<VariableSymbol> getVariableByParameter(MethodSymbol method
198198
private List<Reference> getRefsFromClientCalls(MethodSymbol method) {
199199
return referenceIndex.getReferencesTo(method).stream()
200200
// в будущем могут появиться и другие виды ссылок
201-
.filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE)
201+
.filter(ref -> ref.occurrenceType() == OccurrenceType.REFERENCE)
202202
.filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall)
203203
.toList();
204204
}
205205

206206
private static boolean isClientCall(Reference ref) {
207-
return Optional.of(ref.getFrom())
207+
return Optional.of(ref.from())
208208
.filter(MethodSymbol.class::isInstance)
209209
.map(MethodSymbol.class::cast)
210210
.filter(TransferringParametersBetweenClientAndServerDiagnostic::isEqualCompilerDirective)
@@ -231,7 +231,7 @@ private static List<ParameterDefinition> getMethodParamsByRef(MethodSymbol metho
231231

232232
private static List<DiagnosticRelatedInformation> getRelatedInformation(List<Reference> references) {
233233
return references.stream()
234-
.map(reference -> RelatedInformation.create(reference.getUri(), reference.getSelectionRange(), "+1"))
234+
.map(reference -> RelatedInformation.create(reference.uri(), reference.selectionRange(), "+1"))
235235
.collect(Collectors.toList());
236236
}
237237

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void check() {
6767
.filter(variable -> CHECKING_VARIABLE_KINDS.contains(variable.getKind()))
6868
.filter(variable -> !variable.isExport())
6969
.filter(variable -> referenceIndex.getReferencesTo(variable).stream()
70-
.filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE).findFirst().isEmpty()
70+
.filter(ref -> ref.occurrenceType() == OccurrenceType.REFERENCE).findFirst().isEmpty()
7171
)
7272
.forEach(variable -> diagnosticStorage.addDiagnostic(
7373
variable.getSelectionRange(), info.getMessage(variable.getName()))

src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSuppli
6969
public List<InlayHint> getInlayHints(DocumentContext documentContext, InlayHintParams params) {
7070
var range = params.getRange();
7171
return referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream()
72-
.filter(reference -> Ranges.containsPosition(range, reference.getSelectionRange().getStart()))
72+
.filter(reference -> Ranges.containsPosition(range, reference.selectionRange().getStart()))
7373
.filter(Reference::isSourceDefinedSymbolReference)
7474
.map(this::toInlayHints)
7575
.flatMap(Collection::stream)
@@ -78,10 +78,10 @@ public List<InlayHint> getInlayHints(DocumentContext documentContext, InlayHintP
7878

7979
private List<InlayHint> toInlayHints(Reference reference) {
8080

81-
var methodSymbol = (MethodSymbol) reference.getSymbol();
81+
var methodSymbol = (MethodSymbol) reference.symbol();
8282
var parameters = methodSymbol.getParameters();
8383

84-
var ast = reference.getFrom().getOwner().getAst();
84+
var ast = reference.from().getOwner().getAst();
8585
var doCalls = Trees.findAllRuleNodes(ast, BSLParser.RULE_doCall);
8686

8787
return doCalls.stream()
@@ -185,7 +185,7 @@ private boolean showDefaultValues() {
185185

186186

187187
private static boolean isRightMethod(ParserRuleContext doCallParent, Reference reference) {
188-
var selectionRange = reference.getSelectionRange();
188+
var selectionRange = reference.selectionRange();
189189

190190
if (doCallParent instanceof BSLParser.MethodCallContext methodCallContext) {
191191
return selectionRange.equals(Ranges.create(methodCallContext.methodName()));

src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ public List<CallHierarchyIncomingCall> incomingCalls(
111111
.map(referenceIndex::getReferencesTo)
112112
.flatMap(Collection::stream)
113113
.collect(groupingBy(
114-
Reference::getFrom,
115-
mapping(Reference::getSelectionRange, toCollection(ArrayList::new)))
114+
Reference::from,
115+
mapping(Reference::selectionRange, toCollection(ArrayList::new)))
116116
)
117117
.entrySet()
118118
.stream()
@@ -141,10 +141,10 @@ public List<CallHierarchyOutgoingCall> outgoingCalls(
141141
.map(referenceIndex::getReferencesFrom)
142142
.flatMap(Collection::stream)
143143
.filter(Reference::isSourceDefinedSymbolReference)
144-
.filter(reference -> isSymbolSupported(reference.getSymbol()))
144+
.filter(reference -> isSymbolSupported(reference.symbol()))
145145
.collect(groupingBy(
146146
reference -> reference.getSourceDefinedSymbol().orElseThrow(),
147-
mapping(Reference::getSelectionRange, toCollection(ArrayList::new)))
147+
mapping(Reference::selectionRange, toCollection(ArrayList::new)))
148148
)
149149
.entrySet()
150150
.stream()

src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ public List<LocationLink> getDefinition(DocumentContext documentContext, Definit
6565
}
6666

6767
private static LocationLink toLocationLink(Reference reference) {
68-
SourceDefinedSymbol symbol = (SourceDefinedSymbol) reference.getSymbol();
68+
SourceDefinedSymbol symbol = (SourceDefinedSymbol) reference.symbol();
6969

7070
return new LocationLink(
7171
symbol.getOwner().getUri().toString(),
7272
symbol.getRange(),
7373
symbol.getSelectionRange(),
74-
reference.getSelectionRange()
74+
reference.selectionRange()
7575
);
7676
}
7777
}

0 commit comments

Comments
 (0)