diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModules.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModules.java index 829758f239..333300293f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModules.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModules.java @@ -10,10 +10,12 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.java.commands; +import java.util.Comparator; import java.util.Optional; import java.util.stream.Stream; import org.springframework.ide.vscode.boot.java.stereotypes.StereotypeClassElement; +import org.springframework.ide.vscode.boot.modulith.AppModule; import org.springframework.ide.vscode.boot.modulith.AppModules; public class ApplicationModules { @@ -37,7 +39,10 @@ public Optional getModuleByType(StereotypeClassElement type) } public Stream stream() { - return modules.stream().map(ApplicationModule::new); + + return modules.stream() + .sorted(Comparator.comparing(AppModule::displayName)) + .map(ApplicationModule::new); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModulesStructureProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModulesStructureProvider.java index 4af051ef93..95163b1835 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModulesStructureProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/ApplicationModulesStructureProvider.java @@ -32,6 +32,7 @@ public ApplicationModulesStructureProvider(IJavaProject project, SpringMetamodel @Override public Collection extractPackages(ApplicationModules application) { + return application.stream() .map(ApplicationModule::getBasePackage) .map(pkg -> StructureViewUtil.findPackageNode(pkg, project, springIndex)) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/SpringIndexCommands.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/SpringIndexCommands.java index 2f7f43d685..7fbc8fee3b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/SpringIndexCommands.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/SpringIndexCommands.java @@ -63,7 +63,7 @@ private Node nodeFrom(IJavaProject project, boolean updateMetadata) { var catalog = stereotypeCatalogRegistry.getCatalogOf(project); - if (ModulithService.isModulithDependentProject(project) && System.getProperty("structure-view-modulith-support") != null) { + if (ModulithService.isModulithDependentProject(project) && System.getProperty("disable-modulith-structure-view") == null) { return new ModulithStructureView(catalog, springIndex, modulithService).createTree(project); } else { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/StructureViewUtil.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/StructureViewUtil.java index 38cb477f41..88bb674174 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/StructureViewUtil.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/commands/StructureViewUtil.java @@ -145,7 +145,7 @@ public static StereotypePackageElement findPackageNode(String packageName, IJava } } - private static final List EXCLUSIONS = List.of("Application", "Properties", "Mappings"); + private static final List EXCLUSIONS = List.of("Application", "Properties", "Mappings", "Hints"); static Function getStereotypeLabeler(StereotypeCatalog catalog) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/IndexBasedStereotypeFactory.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/IndexBasedStereotypeFactory.java index 75a9512556..1af8ea2dc2 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/IndexBasedStereotypeFactory.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/IndexBasedStereotypeFactory.java @@ -20,8 +20,9 @@ import org.jmolecules.stereotype.api.Stereotypes; import org.jmolecules.stereotype.catalog.StereotypeDefinition.Assignment; import org.jmolecules.stereotype.catalog.StereotypeDefinition.Assignment.Type; -import org.jmolecules.stereotype.catalog.StereotypeMatcher; import org.jmolecules.stereotype.catalog.support.AbstractStereotypeCatalog; +import org.jmolecules.stereotype.catalog.support.StereotypeDetector.AnalysisLevel; +import org.jmolecules.stereotype.catalog.support.StereotypeMatcher; import org.jmolecules.stereotype.support.StringBasedStereotype; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; @@ -55,26 +56,26 @@ private void registerStereotype(StereotypeDefinitionElement element) { @Override public Stereotypes fromPackage(StereotypePackageElement pkg) { - return new Stereotypes(fromAnnotatedElement(pkg)); + return new Stereotypes(fromAnnotatedElement(pkg, AnalysisLevel.DIRECT)); } @Override public Stereotypes fromType(StereotypeClassElement type) { - return new Stereotypes(fromTypeInternal(type)) + return new Stereotypes(fromTypeInternal(type, AnalysisLevel.DIRECT)) .and(fromPackage(findPackageFor(type))); } @Override public Stereotypes fromMethod(StereotypeMethodElement method) { - return new Stereotypes(fromAnnotatedElement(method)); + return new Stereotypes(fromAnnotatedElement(method, AnalysisLevel.DIRECT)); } - private Collection fromAnnotatedElement(StereotypeAnnotatedElement element) { + private Collection fromAnnotatedElement(StereotypeAnnotatedElement element, AnalysisLevel level) { var result = new ArrayList(); if (element != null) { - result.addAll(catalog.getAnnotationBasedStereotypes(element, STEREOTYPE_MATCHER)); + result.addAll(catalog.getAnnotationBasedStereotypes(element, level, STEREOTYPE_MATCHER)); // for (Annotation annotation : element.getAnnotations()) { // for (Class type : fromAnnotation(annotation)) { @@ -86,11 +87,11 @@ private Collection fromAnnota return result; } - private Collection fromTypeInternal(StereotypeClassElement type) { + private Collection fromTypeInternal(StereotypeClassElement type, AnalysisLevel level) { var result = new TreeSet(); - result.addAll(catalog.getTypeBasedStereotypes(type, STEREOTYPE_MATCHER)); + result.addAll(catalog.getTypeBasedStereotypes(type, level, STEREOTYPE_MATCHER)); // if (type.isAnnotation()) { // @@ -118,7 +119,7 @@ private Collection fromTypeInternal(StereotypeClassElement type) { // } // // if (!type.isAnnotation()) { - result.addAll(fromAnnotatedElement(type)); + result.addAll(fromAnnotatedElement(type, level)); // } return result; diff --git a/headless-services/spring-boot-language-server/src/main/resources/stereotype-defaults/spring-jmolecules-stereotypes.json b/headless-services/spring-boot-language-server/src/main/resources/stereotype-defaults/spring-jmolecules-stereotypes.json index fcdb8e9e69..1979560f21 100644 --- a/headless-services/spring-boot-language-server/src/main/resources/stereotype-defaults/spring-jmolecules-stereotypes.json +++ b/headless-services/spring-boot-language-server/src/main/resources/stereotype-defaults/spring-jmolecules-stereotypes.json @@ -39,7 +39,7 @@ }, "spring.RequestMapping" : { "assignments" : [ "@org.springframework.web.bind.annotation.RequestMapping" ], - "displayName" : "Request mappings", + "displayName" : "Request Mappings", "groups" : [ "spring.web" ] }, "spring.Service" : {