Skip to content

Commit 40f66f6

Browse files
committed
Move TypeHierarchy to LSP
Signed-off-by: Shi Chen <chenshi@microsoft.com>
1 parent 346d6fa commit 40f66f6

File tree

14 files changed

+500
-250
lines changed

14 files changed

+500
-250
lines changed

org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ Export-Package: org.eclipse.jdt.ls.core.internal;x-friends:="org.eclipse.jdt.ls.
5656
org.eclipse.jdt.ls.core.internal.text.correction;x-friends:="org.eclipse.jdt.ls.tests",
5757
org.eclipse.jdt.ls.internal.gradle.checksums;x-friends:="org.eclipse.jdt.ls.tests",
5858
org.eclipse.jdt.ls.core.internal.filesystem;x-friends:="org.eclipse.jdt.ls.tests",
59-
org.eclipse.lsp4j.proposed;x-friends:="org.eclipse.jdt.ls.tests"
59+
org.eclipse.lsp4j.proposed;x-friends:="org.eclipse.jdt.ls.tests",
60+
org.eclipse.jdt.ls.core.internal.typeHierarchy;x-friends:="org.eclipse.jdt.ls.tests"
6061
Bundle-ClassPath: lib/jsoup-1.14.2.jar,
6162
lib/remark-1.2.0.jar,
6263
.

org.eclipse.jdt.ls.core/plugin.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,6 @@
9494
<command
9595
id="java.project.resolveStackTraceLocation">
9696
</command>
97-
<command
98-
id="java.navigate.openTypeHierarchy">
99-
</command>
100-
<command
101-
id="java.navigate.resolveTypeHierarchy">
102-
</command>
10397
<command
10498
id="java.project.upgradeGradle">
10599
</command>

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/JDTDelegateCommandHandler.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,10 @@
2424
import org.eclipse.jdt.ls.core.internal.commands.ProjectCommand;
2525
import org.eclipse.jdt.ls.core.internal.commands.ProjectCommand.ClasspathOptions;
2626
import org.eclipse.jdt.ls.core.internal.commands.SourceAttachmentCommand;
27-
import org.eclipse.jdt.ls.core.internal.commands.TypeHierarchyCommand;
2827
import org.eclipse.jdt.ls.core.internal.handlers.FormatterHandler;
2928
import org.eclipse.jdt.ls.core.internal.handlers.ResolveSourceMappingHandler;
3029
import org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter;
31-
import org.eclipse.lsp4j.ResolveTypeHierarchyItemParams;
3230
import org.eclipse.lsp4j.SymbolInformation;
33-
import org.eclipse.lsp4j.TextDocumentPositionParams;
34-
import org.eclipse.lsp4j.TypeHierarchyDirection;
35-
import org.eclipse.lsp4j.TypeHierarchyItem;
36-
import org.eclipse.lsp4j.TypeHierarchyParams;
3731
import org.eclipse.lsp4j.WorkspaceEdit;
3832

3933
public class JDTDelegateCommandHandler implements IDelegateCommandHandler {
@@ -93,29 +87,6 @@ public Object executeCommand(String commandId, List<Object> arguments, IProgress
9387
projectNames = (ArrayList<String>) arguments.get(1);
9488
}
9589
return ResolveSourceMappingHandler.resolveStackTraceLocation((String) arguments.get(0), projectNames);
96-
case "java.navigate.resolveTypeHierarchy":
97-
TypeHierarchyCommand resolveTypeHierarchyCommand = new TypeHierarchyCommand();
98-
TypeHierarchyItem toResolve = JSONUtility.toModel(arguments.get(0), TypeHierarchyItem.class);
99-
TypeHierarchyDirection resolveDirection = TypeHierarchyDirection.forValue(JSONUtility.toModel(arguments.get(1), Integer.class));
100-
int resolveDepth = JSONUtility.toModel(arguments.get(2), Integer.class);
101-
ResolveTypeHierarchyItemParams resolveParams = new ResolveTypeHierarchyItemParams();
102-
resolveParams.setItem(toResolve);
103-
resolveParams.setDirection(resolveDirection);
104-
resolveParams.setResolve(resolveDepth);
105-
TypeHierarchyItem resolvedItem = resolveTypeHierarchyCommand.resolveTypeHierarchy(resolveParams, monitor);
106-
return resolvedItem;
107-
case "java.navigate.openTypeHierarchy":
108-
TypeHierarchyCommand typeHierarchyCommand = new TypeHierarchyCommand();
109-
TypeHierarchyParams params = new TypeHierarchyParams();
110-
TextDocumentPositionParams textParams = JSONUtility.toModel(arguments.get(0), TextDocumentPositionParams.class);
111-
TypeHierarchyDirection direction = TypeHierarchyDirection.forValue(JSONUtility.toModel(arguments.get(1), Integer.class));
112-
int resolve = JSONUtility.toModel(arguments.get(2), Integer.class);
113-
params.setResolve(resolve);
114-
params.setDirection(direction);
115-
params.setTextDocument(textParams.getTextDocument());
116-
params.setPosition(textParams.getPosition());
117-
TypeHierarchyItem typeHierarchyItem = typeHierarchyCommand.typeHierarchy(params, monitor);
118-
return typeHierarchyItem;
11990
case "java.project.upgradeGradle":
12091
String projectUri = (String) arguments.get(0);
12192
return GradleProjectImporter.upgradeGradleVersion(projectUri, monitor);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ public void registerCapabilities(InitializeResult initializeResult) {
202202
));
203203
semanticTokensOptions.setLegend(SemanticTokensHandler.legend());
204204
capabilities.setSemanticTokensProvider(semanticTokensOptions);
205+
capabilities.setTypeHierarchyProvider(Boolean.TRUE);
205206

206207
initializeResult.setCapabilities(capabilities);
207208
}

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,16 @@
6868
import org.eclipse.jdt.ls.core.internal.handlers.OverrideMethodsHandler.OverridableMethodsResponse;
6969
import org.eclipse.jdt.ls.core.internal.handlers.WorkspaceSymbolHandler.SearchSymbolParams;
7070
import org.eclipse.jdt.ls.core.internal.lsp.JavaProtocolExtensions;
71+
import org.eclipse.jdt.ls.core.internal.lsp.TextDocumentProtocolExtensions;
72+
import org.eclipse.jdt.ls.core.internal.lsp.TypeHierarchyProtocolExtensions;
7173
import org.eclipse.jdt.ls.core.internal.managers.ContentProviderManager;
7274
import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager;
7375
import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager;
7476
import org.eclipse.jdt.ls.core.internal.preferences.Preferences;
77+
import org.eclipse.jdt.ls.core.internal.typeHierarchy.TypeHierarchyItem;
78+
import org.eclipse.jdt.ls.core.internal.typeHierarchy.TypeHierarchyPrepareParams;
79+
import org.eclipse.jdt.ls.core.internal.typeHierarchy.TypeHierarchySubtypesParams;
80+
import org.eclipse.jdt.ls.core.internal.typeHierarchy.TypeHierarchySupertypesParams;
7581
import org.eclipse.lsp4j.CallHierarchyIncomingCall;
7682
import org.eclipse.lsp4j.CallHierarchyIncomingCallsParams;
7783
import org.eclipse.lsp4j.CallHierarchyItem;
@@ -151,7 +157,7 @@
151157
*
152158
*/
153159
public class JDTLanguageServer extends BaseJDTLanguageServer implements LanguageServer, TextDocumentService, WorkspaceService,
154-
JavaProtocolExtensions, InlayHintProvider {
160+
JavaProtocolExtensions, InlayHintProvider, TextDocumentProtocolExtensions, TypeHierarchyProtocolExtensions {
155161

156162
public static final String JAVA_LSP_JOIN_ON_COMPLETION = "java.lsp.joinOnCompletion";
157163
public static final String JAVA_LSP_INITIALIZE_WORKSPACE = "java.lsp.initializeWorkspace";
@@ -167,6 +173,7 @@ public class JDTLanguageServer extends BaseJDTLanguageServer implements Language
167173
private ClasspathUpdateHandler classpathUpdateHandler;
168174
private JVMConfigurator jvmConfigurator;
169175
private WorkspaceExecuteCommandHandler commandHandler;
176+
private TypeHierarchyHandler typeHierarchyHandler = new TypeHierarchyHandler();
170177

171178
private ProgressReporterManager progressReporterManager;
172179
/**
@@ -1034,6 +1041,23 @@ public CompletableFuture<List<InlayHint>> inlayHint(InlayHintParams params) {
10341041
return computeAsync(monitor -> new InlayHintsHandler(preferenceManager).inlayHint(params, monitor));
10351042
}
10361043

1044+
public CompletableFuture<List<TypeHierarchyItem>> prepareTypeHierarchy(TypeHierarchyPrepareParams params) {
1045+
logInfo(">> textDocument/prepareTypeHierarchy");
1046+
return computeAsync(monitor -> typeHierarchyHandler.prepareTypeHierarchy(params, monitor));
1047+
}
1048+
1049+
@Override
1050+
public CompletableFuture<List<TypeHierarchyItem>> supertypes(TypeHierarchySupertypesParams params) {
1051+
logInfo(">> typeHierarchy/supertypes");
1052+
return computeAsync(monitor -> typeHierarchyHandler.getSupertypeItems(params, monitor));
1053+
}
1054+
1055+
@Override
1056+
public CompletableFuture<List<TypeHierarchyItem>> subtypes(TypeHierarchySubtypesParams params) {
1057+
logInfo(">> typeHierarchy/subtypes");
1058+
return computeAsync(monitor -> typeHierarchyHandler.getSubtypeItems(params, monitor));
1059+
}
1060+
10371061
private <R> CompletableFuture<R> computeAsyncWithClientProgress(Function<IProgressMonitor, R> code) {
10381062
return CompletableFutures.computeAsync((cc) -> {
10391063
IProgressMonitor monitor = progressReporterManager.getProgressReporter(cc);

0 commit comments

Comments
 (0)