Skip to content

Commit c6199aa

Browse files
committed
Navigate to Reference
1 parent 3c9cd22 commit c6199aa

File tree

14 files changed

+305
-208
lines changed

14 files changed

+305
-208
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/CommandsConfig.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.springframework.ide.vscode.boot.java.commands.Misc;
1717
import org.springframework.ide.vscode.boot.java.commands.SpringIndexCommands;
1818
import org.springframework.ide.vscode.boot.java.commands.WorkspaceBootExecutableProjects;
19+
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
1920
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeCatalogRegistry;
2021
import org.springframework.ide.vscode.boot.modulith.ModulithService;
2122
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
@@ -30,8 +31,9 @@ public class CommandsConfig {
3031

3132
@Bean
3233
SpringIndexCommands springIndexCommands(SimpleLanguageServer server, JavaProjectFinder projectFinder,
33-
SpringMetamodelIndex symbolIndex, ModulithService modulithService, StereotypeCatalogRegistry stereotypeCatalogRegistry) {
34-
return new SpringIndexCommands(server, symbolIndex, modulithService, projectFinder, stereotypeCatalogRegistry);
34+
SpringMetamodelIndex symbolIndex, ModulithService modulithService, StereotypeCatalogRegistry stereotypeCatalogRegistry,
35+
SourceLinks sourceLinks) {
36+
return new SpringIndexCommands(server, symbolIndex, modulithService, projectFinder, stereotypeCatalogRegistry, sourceLinks);
3537
}
3638

3739
@Bean

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/JMoleculesStructureView.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.jmolecules.stereotype.tooling.ProjectTree;
2020
import org.jmolecules.stereotype.tooling.SimpleLabelProvider;
2121
import org.springframework.ide.vscode.boot.java.commands.JsonNodeHandler.Node;
22+
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
2223
import org.springframework.ide.vscode.boot.java.stereotypes.IndexBasedStereotypeFactory;
2324
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeClassElement;
2425
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeMethodElement;
@@ -29,10 +30,12 @@ public class JMoleculesStructureView {
2930

3031
private final AbstractStereotypeCatalog catalog;
3132
private final CachedSpringMetamodelIndex springIndex;
33+
private final SourceLinks sourceLinks;
3234

33-
public JMoleculesStructureView(AbstractStereotypeCatalog catalog, CachedSpringMetamodelIndex springIndex) {
35+
public JMoleculesStructureView(AbstractStereotypeCatalog catalog, CachedSpringMetamodelIndex springIndex, SourceLinks sourceLinks) {
3436
this.catalog = catalog;
3537
this.springIndex = springIndex;
38+
this.sourceLinks = sourceLinks;
3639
}
3740

3841
public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory, Collection<String> selectedGroups) {
@@ -56,7 +59,7 @@ public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory
5659
};
5760

5861
// create json nodes to display the structure in a nice way
59-
var jsonHandler = new JsonNodeHandler<StereotypePackageElement, Object>(labelProvider, consumer, springIndex, catalog, project);
62+
var jsonHandler = new JsonNodeHandler<StereotypePackageElement, Object>(labelProvider, consumer, springIndex, sourceLinks, catalog, project);
6063

6164
// create the project tree and apply all the groupers from the project
6265
// TODO: in the future, we need to trim this grouper arrays down to what is selected on the UI

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/JsonNodeHandler.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.ide.vscode.boot.java.commands;
1818

19+
import java.net.URI;
1920
import java.net.URISyntaxException;
2021
import java.net.URL;
2122
import java.util.ArrayList;
@@ -36,13 +37,13 @@
3637
import org.jmolecules.stereotype.tooling.MethodNodeContext;
3738
import org.jmolecules.stereotype.tooling.NodeContext;
3839
import org.jmolecules.stereotype.tooling.NodeHandler;
39-
import org.springframework.ide.vscode.boot.java.links.EclipseSourceLinks;
40+
import org.slf4j.Logger;
41+
import org.slf4j.LoggerFactory;
42+
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
4043
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeClassElement;
4144
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeMethodElement;
4245
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypePackageElement;
4346
import org.springframework.ide.vscode.commons.java.IJavaProject;
44-
import org.springframework.ide.vscode.commons.languageserver.util.LspClient;
45-
import org.springframework.ide.vscode.commons.languageserver.util.LspClient.Client;
4647
import org.springframework.ide.vscode.commons.protocol.spring.SymbolElement;
4748

4849
import com.google.gson.Gson;
@@ -53,6 +54,8 @@
5354
* @author Martin Lippert
5455
*/
5556
public class JsonNodeHandler<A, C> implements NodeHandler<A, StereotypePackageElement, StereotypeClassElement, StereotypeMethodElement, C> {
57+
58+
private static final Logger log = LoggerFactory.getLogger(JsonNodeHandler.class);
5659

5760
private static final String PROJECT_ID = "projectId";
5861

@@ -69,16 +72,18 @@ public class JsonNodeHandler<A, C> implements NodeHandler<A, StereotypePackageEl
6972
private final LabelProvider<A, StereotypePackageElement, StereotypeClassElement, StereotypeMethodElement, C> labels;
7073
private final BiConsumer<Node, C> customHandler;
7174
private final CachedSpringMetamodelIndex springIndex;
75+
private final SourceLinks sourceLinks;
7276
private final IJavaProject project;
7377

7478
private Node current;
7579
private StereotypeCatalog catalog;
7680

7781
public JsonNodeHandler(LabelProvider<A, StereotypePackageElement, StereotypeClassElement, StereotypeMethodElement, C> labels, BiConsumer<Node, C> customHandler,
78-
CachedSpringMetamodelIndex springIndex, StereotypeCatalog catalog, IJavaProject project) {
82+
CachedSpringMetamodelIndex springIndex, SourceLinks sourceLinks, StereotypeCatalog catalog, IJavaProject project) {
7983
this.labels = labels;
8084
this.springIndex = springIndex;
8185
this.customHandler = customHandler;
86+
this.sourceLinks = sourceLinks;
8287
this.project = project;
8388

8489
this.root = new Node(null);
@@ -104,16 +109,13 @@ public void handleStereotype(Stereotype stereotype, NodeContext context) {
104109
URL url = (URL) source;
105110

106111
try {
107-
reference = new Location(url.toURI().toASCIIString(), new Range());
108-
if ("jar".equals(url.getProtocol())) {
109-
if (LspClient.currentClient() == Client.ECLIPSE) {
110-
reference.setUri(EclipseSourceLinks.eclipseIntroUriForJarEntry(project.getElementName(), url.toURI()).toASCIIString());
111-
} else {
112-
reference.setUri(url.toURI().toASCIIString().replaceFirst(Misc.JAR_URL_PROTOCOL_PREFIX, Misc.BOOT_LS_URL_PRTOCOL_PREFIX));
113-
}
112+
URI uri = url.toURI();
113+
reference = new Location(uri.toASCIIString(), new Range());
114+
if (Misc.JAR.equals(uri.getScheme())) {
115+
sourceLinks.sourceLinkForJarEntry(project, uri).map(u -> u.toASCIIString()).ifPresent(reference::setUri);
114116
}
115117
} catch (URISyntaxException e) {
116-
// something went wrong
118+
log.error("", e);
117119
}
118120
}
119121
else if (source instanceof Location) {

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/Misc.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
public class Misc {
2525

2626
public static final String BOOT_LS_URL_PRTOCOL_PREFIX = "spring-boot-ls:";
27-
public static final String JAR_URL_PROTOCOL_PREFIX = "jar:";
27+
public static final String JAR = "jar";
28+
public static final String JAR_URL_PROTOCOL_PREFIX = JAR + ":";
2829

2930
private static final String STS_FETCH_JAR_CONTENT = "sts/jar/fetch-content";
3031

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ModulithStructureView.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.jmolecules.stereotype.tooling.ProjectTree;
2020
import org.springframework.ide.vscode.boot.java.commands.ApplicationModulesStructureProvider.SimpleApplicationModulesStructureProvider;
2121
import org.springframework.ide.vscode.boot.java.commands.JsonNodeHandler.Node;
22+
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
2223
import org.springframework.ide.vscode.boot.java.stereotypes.IndexBasedStereotypeFactory;
2324
import org.springframework.ide.vscode.boot.modulith.AppModules;
2425
import org.springframework.ide.vscode.boot.modulith.ModulithService;
@@ -29,10 +30,12 @@ public class ModulithStructureView {
2930
private final AbstractStereotypeCatalog catalog;
3031
private final CachedSpringMetamodelIndex springIndex;
3132
private final ModulithService modulithService;
33+
private SourceLinks sourceLinks;
3234

33-
public ModulithStructureView(AbstractStereotypeCatalog catalog, CachedSpringMetamodelIndex springIndex, ModulithService modulithService) {
35+
public ModulithStructureView(AbstractStereotypeCatalog catalog, CachedSpringMetamodelIndex springIndex, SourceLinks sourceLinks, ModulithService modulithService) {
3436
this.catalog = catalog;
3537
this.springIndex = springIndex;
38+
this.sourceLinks = sourceLinks;
3639
this.modulithService = modulithService;
3740
}
3841

@@ -57,7 +60,7 @@ public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory
5760
};
5861

5962
// create json nodes to display the structure in a nice way
60-
var jsonHandler = new JsonNodeHandler<ApplicationModules, NamedInterfaceNode>(labelProvider, consumer, springIndex, catalog, project);
63+
var jsonHandler = new JsonNodeHandler<ApplicationModules, NamedInterfaceNode>(labelProvider, consumer, springIndex, sourceLinks, catalog, project);
6164

6265
// create the project tree and apply all the groupers from the project
6366
// TODO: in the future, we need to trim this grouper arrays down to what is selected on the UI

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/SpringIndexCommands.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.slf4j.LoggerFactory;
2424
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
2525
import org.springframework.ide.vscode.boot.java.commands.JsonNodeHandler.Node;
26+
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
2627
import org.springframework.ide.vscode.boot.java.stereotypes.IndexBasedStereotypeFactory;
2728
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeCatalogRegistry;
2829
import org.springframework.ide.vscode.boot.modulith.ModulithService;
@@ -45,12 +46,14 @@ public class SpringIndexCommands {
4546

4647
private final ModulithService modulithService;
4748
private final StereotypeCatalogRegistry stereotypeCatalogRegistry;
49+
private final SourceLinks sourceLinks;
4850

4951
public SpringIndexCommands(SimpleLanguageServer server, SpringMetamodelIndex springIndex, ModulithService modulithService,
50-
JavaProjectFinder projectFinder, StereotypeCatalogRegistry stereotypeCatalogRegistry) {
52+
JavaProjectFinder projectFinder, StereotypeCatalogRegistry stereotypeCatalogRegistry, SourceLinks sourceLinks) {
5153

5254
this.modulithService = modulithService;
5355
this.stereotypeCatalogRegistry = stereotypeCatalogRegistry;
56+
this.sourceLinks = sourceLinks;
5457

5558
server.onCommand(SPRING_STRUCTURE_CMD, params -> server.getAsync().invoke(() -> {
5659
StructureCommandArgs args = StructureCommandArgs.parseFrom(params);
@@ -112,10 +115,10 @@ private Node nodeFrom(IJavaProject project, CachedSpringMetamodelIndex springInd
112115
}
113116

114117
if (ModulithService.isModulithDependentProject(project) && StructureViewUtil.hasModulithStructureViewEnabled()) {
115-
return new ModulithStructureView(catalog, springIndex, modulithService).createTree(project, factory, selectedGroups);
118+
return new ModulithStructureView(catalog, springIndex, sourceLinks, modulithService).createTree(project, factory, selectedGroups);
116119
}
117120
else {
118-
return new JMoleculesStructureView(catalog, springIndex).createTree(project, factory, selectedGroups);
121+
return new JMoleculesStructureView(catalog, springIndex, sourceLinks).createTree(project, factory, selectedGroups);
119122
}
120123
}
121124

0 commit comments

Comments
 (0)