Skip to content

Commit 4de9dab

Browse files
committed
Fix call hierarchy position resolution eclipse-jdtls#2771
1 parent 63805fd commit 4de9dab

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CallHierarchyHandler.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,12 @@ private IMember getCallHierarchyElement(String uri, int line, int character, IPr
162162
int offset = JsonRpcHelpers.toOffset(root, line, character);
163163
List<IJavaElement> selectedElements = codeResolve(root, offset);
164164
Stream<IJavaElement> possibleElements = selectedElements.stream().filter(CallHierarchyCore::isPossibleInputElement);
165-
Optional<IJavaElement> firstElement = possibleElements.findFirst();
165+
Optional<IJavaElement> firstElement = possibleElements.findFirst().flatMap(element -> {
166+
if (element instanceof IType) {
167+
return tryFindEnclosingMethod(root, line, character).or(() -> Optional.of(element));
168+
}
169+
return Optional.of(element);
170+
});
166171
if (firstElement.isPresent() && firstElement.get() instanceof IMember member) {
167172
candidate = member;
168173
}
@@ -175,6 +180,15 @@ private IMember getCallHierarchyElement(String uri, int line, int character, IPr
175180
return candidate;
176181
}
177182

183+
private Optional<IJavaElement> tryFindEnclosingMethod(ITypeRoot root, int line, int character) {
184+
final int offset = JsonRpcHelpers.toOffset(root, line, character);
185+
boolean atLineStart = JsonRpcHelpers.toOffset(root, line, 0) == offset;
186+
if (atLineStart) {
187+
return Optional.ofNullable(getEnclosingMember(root, offset));
188+
}
189+
return Optional.empty();
190+
}
191+
178192
private List<CallHierarchyIncomingCall> getIncomingCallItemsAt(String uri, int line, int character, IProgressMonitor monitor) throws JavaModelException {
179193
SubMonitor sub = SubMonitor.convert(monitor, 2);
180194
IMember candidate = getCallHierarchyElement(uri, line, character, sub.split(1));

0 commit comments

Comments
 (0)