@@ -162,7 +162,12 @@ private IMember getCallHierarchyElement(String uri, int line, int character, IPr
162
162
int offset = JsonRpcHelpers .toOffset (root , line , character );
163
163
List <IJavaElement > selectedElements = codeResolve (root , offset );
164
164
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
+ });
166
171
if (firstElement .isPresent () && firstElement .get () instanceof IMember member ) {
167
172
candidate = member ;
168
173
}
@@ -175,6 +180,15 @@ private IMember getCallHierarchyElement(String uri, int line, int character, IPr
175
180
return candidate ;
176
181
}
177
182
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
+
178
192
private List <CallHierarchyIncomingCall > getIncomingCallItemsAt (String uri , int line , int character , IProgressMonitor monitor ) throws JavaModelException {
179
193
SubMonitor sub = SubMonitor .convert (monitor , 2 );
180
194
IMember candidate = getCallHierarchyElement (uri , line , character , sub .split (1 ));
0 commit comments