Skip to content

Commit 9646c1f

Browse files
odrotbohmmartinlippert
authored andcommitted
[structural-view] Polish Modulith support
- Application modules are now sorted alphabetically - Enable Spring Modulith support by default, disable using -Ddisable-modulith-structure-view - Prevent pluralization for (Runtime) Hints - Fix capitalization in Request Mappings in fallback configuration - Adapt to Steretypes API changes to support non-inherited stereotype assignments (for Heaxgonal Ports, etc.)
1 parent f709133 commit 9646c1f

File tree

6 files changed

+20
-13
lines changed

6 files changed

+20
-13
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
*******************************************************************************/
1111
package org.springframework.ide.vscode.boot.java.commands;
1212

13+
import java.util.Comparator;
1314
import java.util.Optional;
1415
import java.util.stream.Stream;
1516

1617
import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeClassElement;
18+
import org.springframework.ide.vscode.boot.modulith.AppModule;
1719
import org.springframework.ide.vscode.boot.modulith.AppModules;
1820

1921
public class ApplicationModules {
@@ -37,7 +39,10 @@ public Optional<ApplicationModule> getModuleByType(StereotypeClassElement type)
3739
}
3840

3941
public Stream<ApplicationModule> stream() {
40-
return modules.stream().map(ApplicationModule::new);
42+
43+
return modules.stream()
44+
.sorted(Comparator.comparing(AppModule::displayName))
45+
.map(ApplicationModule::new);
4146
}
4247

4348
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public ApplicationModulesStructureProvider(IJavaProject project, SpringMetamodel
3232

3333
@Override
3434
public Collection<StereotypePackageElement> extractPackages(ApplicationModules application) {
35+
3536
return application.stream()
3637
.map(ApplicationModule::getBasePackage)
3738
.map(pkg -> StructureViewUtil.findPackageNode(pkg, project, springIndex))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private Node nodeFrom(IJavaProject project, boolean updateMetadata) {
6363

6464
var catalog = stereotypeCatalogRegistry.getCatalogOf(project);
6565

66-
if (ModulithService.isModulithDependentProject(project) && System.getProperty("structure-view-modulith-support") != null) {
66+
if (ModulithService.isModulithDependentProject(project) && System.getProperty("disable-modulith-structure-view") == null) {
6767
return new ModulithStructureView(catalog, springIndex, modulithService).createTree(project);
6868
}
6969
else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public static StereotypePackageElement findPackageNode(String packageName, IJava
145145
}
146146
}
147147

148-
private static final List<String> EXCLUSIONS = List.of("Application", "Properties", "Mappings");
148+
private static final List<String> EXCLUSIONS = List.of("Application", "Properties", "Mappings", "Hints");
149149

150150
static Function<Stereotype, String> getStereotypeLabeler(StereotypeCatalog catalog) {
151151

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
import org.jmolecules.stereotype.api.Stereotypes;
2121
import org.jmolecules.stereotype.catalog.StereotypeDefinition.Assignment;
2222
import org.jmolecules.stereotype.catalog.StereotypeDefinition.Assignment.Type;
23-
import org.jmolecules.stereotype.catalog.StereotypeMatcher;
2423
import org.jmolecules.stereotype.catalog.support.AbstractStereotypeCatalog;
24+
import org.jmolecules.stereotype.catalog.support.StereotypeDetector.AnalysisLevel;
25+
import org.jmolecules.stereotype.catalog.support.StereotypeMatcher;
2526
import org.jmolecules.stereotype.support.StringBasedStereotype;
2627
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
2728

@@ -55,26 +56,26 @@ private void registerStereotype(StereotypeDefinitionElement element) {
5556

5657
@Override
5758
public Stereotypes fromPackage(StereotypePackageElement pkg) {
58-
return new Stereotypes(fromAnnotatedElement(pkg));
59+
return new Stereotypes(fromAnnotatedElement(pkg, AnalysisLevel.DIRECT));
5960
}
6061

6162
@Override
6263
public Stereotypes fromType(StereotypeClassElement type) {
63-
return new Stereotypes(fromTypeInternal(type))
64+
return new Stereotypes(fromTypeInternal(type, AnalysisLevel.DIRECT))
6465
.and(fromPackage(findPackageFor(type)));
6566
}
6667

6768
@Override
6869
public Stereotypes fromMethod(StereotypeMethodElement method) {
69-
return new Stereotypes(fromAnnotatedElement(method));
70+
return new Stereotypes(fromAnnotatedElement(method, AnalysisLevel.DIRECT));
7071
}
7172

72-
private <T extends StereotypeAnnotatedElement> Collection<Stereotype> fromAnnotatedElement(StereotypeAnnotatedElement element) {
73+
private <T extends StereotypeAnnotatedElement> Collection<Stereotype> fromAnnotatedElement(StereotypeAnnotatedElement element, AnalysisLevel level) {
7374

7475
var result = new ArrayList<Stereotype>();
7576

7677
if (element != null) {
77-
result.addAll(catalog.getAnnotationBasedStereotypes(element, STEREOTYPE_MATCHER));
78+
result.addAll(catalog.getAnnotationBasedStereotypes(element, level, STEREOTYPE_MATCHER));
7879

7980
// for (Annotation annotation : element.getAnnotations()) {
8081
// for (Class<?> type : fromAnnotation(annotation)) {
@@ -86,11 +87,11 @@ private <T extends StereotypeAnnotatedElement> Collection<Stereotype> fromAnnota
8687
return result;
8788
}
8889

89-
private Collection<Stereotype> fromTypeInternal(StereotypeClassElement type) {
90+
private Collection<Stereotype> fromTypeInternal(StereotypeClassElement type, AnalysisLevel level) {
9091

9192
var result = new TreeSet<Stereotype>();
9293

93-
result.addAll(catalog.getTypeBasedStereotypes(type, STEREOTYPE_MATCHER));
94+
result.addAll(catalog.getTypeBasedStereotypes(type, level, STEREOTYPE_MATCHER));
9495

9596
// if (type.isAnnotation()) {
9697
//
@@ -118,7 +119,7 @@ private Collection<Stereotype> fromTypeInternal(StereotypeClassElement type) {
118119
// }
119120
//
120121
// if (!type.isAnnotation()) {
121-
result.addAll(fromAnnotatedElement(type));
122+
result.addAll(fromAnnotatedElement(type, level));
122123
// }
123124

124125
return result;

headless-services/spring-boot-language-server/src/main/resources/stereotype-defaults/spring-jmolecules-stereotypes.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
},
4040
"spring.RequestMapping" : {
4141
"assignments" : [ "@org.springframework.web.bind.annotation.RequestMapping" ],
42-
"displayName" : "Request mappings",
42+
"displayName" : "Request Mappings",
4343
"groups" : [ "spring.web" ]
4444
},
4545
"spring.Service" : {

0 commit comments

Comments
 (0)