Skip to content

Commit

Permalink
Сортировка возвращаемых результатов callHierarchy, убраны мусорные пе…
Browse files Browse the repository at this point in the history
…ременные из outgoingCalls
  • Loading branch information
nixel2007 committed Feb 21, 2025
1 parent ae97c9a commit f51eae5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@

import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
import com.github._1c_syntax.bsl.languageserver.context.symbol.SourceDefinedSymbol;
import com.github._1c_syntax.bsl.languageserver.context.symbol.Symbol;
import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex;
import com.github._1c_syntax.bsl.languageserver.references.ReferenceResolver;
import com.github._1c_syntax.bsl.languageserver.references.model.Reference;
import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder;
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
import lombok.RequiredArgsConstructor;
import org.eclipse.lsp4j.CallHierarchyIncomingCall;
import org.eclipse.lsp4j.CallHierarchyIncomingCallsParams;
Expand All @@ -35,14 +37,15 @@
import org.eclipse.lsp4j.CallHierarchyOutgoingCallsParams;
import org.eclipse.lsp4j.CallHierarchyPrepareParams;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.SymbolKind;
import org.springframework.stereotype.Component;

import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
Expand All @@ -55,6 +58,10 @@ public class CallHierarchyProvider {
private final ReferenceResolver referenceResolver;
private final ReferenceIndex referenceIndex;

private final Comparator<CallHierarchyItem> callHierarchyItemComparator = Comparator
.comparing(CallHierarchyItem::getDetail)
.thenComparing(CallHierarchyItem::getSelectionRange, Ranges::compare);

public List<CallHierarchyItem> prepareCallHierarchy(
DocumentContext documentContext,
CallHierarchyPrepareParams params
Expand All @@ -65,8 +72,7 @@ public List<CallHierarchyItem> prepareCallHierarchy(
.flatMap(Reference::getSourceDefinedSymbol)
.map(CallHierarchyProvider::getCallHierarchyItem)
.map(Collections::singletonList)
.orElse(Collections.emptyList())
;
.orElse(Collections.emptyList());
}

public List<CallHierarchyIncomingCall> incomingCalls(
Expand All @@ -90,8 +96,8 @@ public List<CallHierarchyIncomingCall> incomingCalls(
.entrySet()
.stream()
.map(entry -> new CallHierarchyIncomingCall(getCallHierarchyItem(entry.getKey()), entry.getValue()))
.collect(Collectors.toList());

.sorted((o1, o2) -> callHierarchyItemComparator.compare(o1.getFrom(), o2.getFrom()))
.toList();
}

public List<CallHierarchyOutgoingCall> outgoingCalls(
Expand All @@ -101,22 +107,22 @@ public List<CallHierarchyOutgoingCall> outgoingCalls(

URI uri = documentContext.getUri();
Position position = params.getItem().getSelectionRange().getStart();

return referenceResolver.findReference(uri, position)
.flatMap(Reference::getSourceDefinedSymbol)
.stream()
.map(referenceIndex::getReferencesFrom)
.flatMap(Collection::stream)
.filter(Reference::isSourceDefinedSymbolReference)
.filter(reference -> isSymbolSupported(reference.getSymbol()))
.collect(groupingBy(
reference -> reference.getSourceDefinedSymbol().orElseThrow(),
mapping(Reference::getSelectionRange, toCollection(ArrayList::new)))
)
.entrySet()
.stream()
.map(entry -> new CallHierarchyOutgoingCall(getCallHierarchyItem(entry.getKey()), entry.getValue()))
.collect(Collectors.toList());

.sorted((o1, o2) -> callHierarchyItemComparator.compare(o1.getTo(), o2.getTo()))
.toList();
}

private static CallHierarchyItem getCallHierarchyItem(SourceDefinedSymbol sourceDefinedSymbol) {
Expand All @@ -133,4 +139,8 @@ private static CallHierarchyItem getCallHierarchyItem(SourceDefinedSymbol source

return item;
}

private static boolean isSymbolSupported(Symbol symbol) {
return symbol.getSymbolKind() == SymbolKind.Method;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class CallHierarchyProviderTest {

private final Position firstProcedureDeclarationPosition = new Position(0, 15);
private final Position firstFunctionCallPosition = new Position(1, 15);
private final Position secondFunctionDeclarationPosition = new Position(14, 15);
private final Position secondFunctionDeclarationPosition = new Position(16, 15);
private final Position secondFunctionCallPosition = new Position(2, 15);

@BeforeEach
Expand Down
2 changes: 2 additions & 0 deletions src/test/resources/providers/callHierarchy.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
КонецПроцедуры

Функция ПерваяФункция()
Перем А;
Б = 1;
ВтораяПроцедура();
ВтораяФункция();
ВтораяПроцедура();
Expand Down

0 comments on commit f51eae5

Please sign in to comment.