Skip to content

Commit 92c193b

Browse files
committed
Fix NPE occuring when a call hierarchy item may not support class files.
- When classFileContentsSupport set to false, call hierarchy item's URI will be null, so we should handle this for clients Signed-off-by: Roland Grunberg <[email protected]>
1 parent 6c14f9b commit 92c193b

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.ArrayList;
2121
import java.util.Arrays;
2222
import java.util.Collection;
23+
import java.util.Collections;
2324
import java.util.List;
2425
import java.util.Map;
2526
import java.util.Optional;
@@ -80,7 +81,8 @@ public List<CallHierarchyItem> prepareCallHierarchy(CallHierarchyPrepareParams p
8081
return null;
8182
}
8283
checkMonitor(monitor);
83-
return Arrays.asList(toCallHierarchyItem(candidate));
84+
CallHierarchyItem symbol = toCallHierarchyItem(candidate);
85+
return symbol != null ? Arrays.asList(symbol) : Collections.emptyList();
8486
} catch (OperationCanceledException e) {
8587
// do nothing
8688
} catch (JavaModelException e) {
@@ -213,9 +215,11 @@ private List<CallHierarchyIncomingCall> getIncomingCallItemsAt(String uri, int l
213215
IOpenable openable = getOpenable(location);
214216
Range callRange = getRange(openable, location);
215217
CallHierarchyItem symbol = toCallHierarchyItem(call.getMember());
216-
symbol.setSelectionRange(callRange);
217-
List<Range> ranges = toCallRanges(callLocations);
218-
result.add(new CallHierarchyIncomingCall(symbol, ranges));
218+
if (symbol != null) {
219+
symbol.setSelectionRange(callRange);
220+
List<Range> ranges = toCallRanges(callLocations);
221+
result.add(new CallHierarchyIncomingCall(symbol, ranges));
222+
}
219223
}
220224
}
221225
IMember member = call.getMember();
@@ -268,7 +272,9 @@ private List<CallHierarchyOutgoingCall> getOutgoingCallItemsAt(String uri, int l
268272
List<Range> ranges = toCallRanges(callLocations);
269273
for (int i = 0; i < callLocations.size(); i++) {
270274
CallHierarchyItem symbol = toCallHierarchyItem(call.getMember());
271-
result.add(new CallHierarchyOutgoingCall(symbol, ranges));
275+
if (symbol != null) {
276+
result.add(new CallHierarchyOutgoingCall(symbol, ranges));
277+
}
272278
}
273279
}
274280
IMember member = call.getMember();
@@ -306,6 +312,9 @@ private MethodWrapper getCallRoot(IMember member, boolean isIncomingCall) {
306312

307313
private CallHierarchyItem toCallHierarchyItem(IMember member) throws JavaModelException {
308314
Location fullLocation = getLocation(member, LocationType.FULL_RANGE);
315+
if (fullLocation == null) {
316+
return null;
317+
}
309318
Range range = fullLocation.getRange();
310319
String uri = fullLocation.getUri();
311320
CallHierarchyItem item = new CallHierarchyItem();

0 commit comments

Comments
 (0)