Skip to content

Commit bf05b15

Browse files
odrotbohmmartinlippert
authored andcommitted
Allow disabling named interface grouping via system property.
We now allow disabling the named interfaces grouping via a disable-named-interfaces system property for the Language Server. If this is activated, the type labels are now additionally decorated with an "API" / "internal" extension to indicate, whether they are accessible to other modules.
1 parent a6be7ec commit bf05b15

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,11 @@ private String lastSegment(String packageName) {
4646
public Collection<NamedInterface> getNamedInterfaces() {
4747
return appModule.namedInterfaces();
4848
}
49-
49+
50+
public boolean isExposed(String type) {
51+
52+
return appModule.namedInterfaces().stream()
53+
.flatMap(it -> it.getClasses().stream())
54+
.anyMatch(type::equals);
55+
}
5056
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,18 @@ public String getPackageLabel(StereotypePackageElement pkg) {
5959
@Override
6060
public String getTypeLabel(StereotypeClassElement type) {
6161

62-
return modules.getModuleByType(type)
62+
var result = modules.getModuleByType(type)
6363
.map(it -> it.getBasePackage())
6464
.map(it -> new StereotypePackageElement(it, Collections.emptySet()))
6565
.map(it -> StructureViewUtil.abbreviate(it, type))
6666
.orElseGet(type::getType);
67+
68+
return "true".equals(System.getProperty("disable-named-interfaces"))
69+
? result + modules.getModuleByType(type)
70+
.filter(it -> it.isExposed(type.getType()))
71+
.map(__ -> " (API)")
72+
.orElse(" (internal)")
73+
: result;
6774
}
6875

6976
@Override

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,19 @@ public Collection<StereotypePackageElement> extractPackages(ApplicationModules a
4242
public Collection<StereotypeMethodElement> extractMethods(StereotypeClassElement type) {
4343
return type.getMethods();
4444
}
45+
46+
static class SimpleApplicationModulesStructureProvider extends ApplicationModulesStructureProvider implements SimpleStructureProvider<ApplicationModules, StereotypePackageElement, StereotypeClassElement, StereotypeMethodElement> {
47+
48+
SimpleApplicationModulesStructureProvider(IJavaProject project, SpringMetamodelIndex springIndex) {
49+
super(project, springIndex);
50+
}
4551

52+
@Override
53+
public Collection<StereotypeClassElement> extractTypes(StereotypePackageElement pkg) {
54+
55+
return springIndex.getNodesOfType(project.getElementName(), StereotypeClassElement.class).stream()
56+
.filter(element -> element.getType().startsWith(pkg.getPackageName()))
57+
.toList();
58+
}
59+
}
4660
}

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.jmolecules.stereotype.catalog.support.AbstractStereotypeCatalog;
1717
import org.jmolecules.stereotype.tooling.HierarchicalNodeHandler;
1818
import org.jmolecules.stereotype.tooling.ProjectTree;
19+
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
20+
import org.springframework.ide.vscode.boot.java.commands.ApplicationModulesStructureProvider.SimpleApplicationModulesStructureProvider;
1921
import org.springframework.ide.vscode.boot.java.commands.JsonNodeHandler.Node;
2022
import org.springframework.ide.vscode.boot.java.stereotypes.IndexBasedStereotypeFactory;
2123
import org.springframework.ide.vscode.boot.modulith.AppModules;
@@ -43,11 +45,12 @@ public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory
4345
// TODO; logging
4446
return null;
4547
}
46-
48+
4749
ApplicationModules modules = new ApplicationModules(modulesData);
48-
50+
4951
var labelProvider = new ApplicationModulesLabelProvider(catalog, project, springIndex, modules);
50-
var structureProvider = new ApplicationModulesNamedInterfacesGroupingProvider(modules, project, springIndex);
52+
53+
5154

5255
// json output
5356
BiConsumer<Node, NamedInterfaceNode> consumer = (node, c) -> {
@@ -60,8 +63,13 @@ public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory
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
63-
var jsonTree = new ProjectTree<>(adapter, catalog, jsonHandler)
64-
.withStructureProvider(structureProvider);
66+
var jsonTree = new ProjectTree<>(adapter, catalog, jsonHandler);
67+
68+
if ("true".equals(System.getProperty("disable-named-interfaces"))) {
69+
jsonTree = jsonTree.withStructureProvider(new SimpleApplicationModulesStructureProvider(project, springIndex));
70+
} else {
71+
jsonTree = jsonTree.withStructureProvider(new ApplicationModulesNamedInterfacesGroupingProvider(modules, project, springIndex));
72+
}
6573

6674
List<String[]> groupers = StructureViewUtil.identifyGroupers(catalog, selectedGroups);
6775
for (String[] grouper : groupers) {
@@ -72,5 +80,4 @@ public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory
7280

7381
return jsonHandler.getRoot();
7482
}
75-
7683
}

0 commit comments

Comments
 (0)