diff --git a/headless-services/spring-boot-language-server/.factorypath b/headless-services/spring-boot-language-server/.factorypath index 911c9e487..a05b23690 100644 --- a/headless-services/spring-boot-language-server/.factorypath +++ b/headless-services/spring-boot-language-server/.factorypath @@ -1,4 +1,5 @@ + @@ -8,9 +9,9 @@ - - + + @@ -19,6 +20,7 @@ + @@ -59,8 +61,11 @@ + + + @@ -68,10 +73,13 @@ + + + @@ -88,6 +96,8 @@ + + diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java index 8d7d3dcf7..3f2fbefda 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java @@ -40,7 +40,7 @@ import org.springframework.ide.vscode.commons.util.UriUtil; import reactor.core.Disposable; public class JdtLsProjectCache implements InitializableJavaProjectsService { - + private SimpleLanguageServer server; private Map table = new HashMap(); private Logger log = LoggerFactory.getLogger(JdtLsProjectCache.class); @@ -94,7 +94,7 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { } deleted.dispose(); } - + private void notifyChanged(JavaProject newProject) { logEvent("Changed", newProject); synchronized (listeners) { @@ -112,7 +112,7 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { } catch (Exception e) { } } - + private static int countSourceAttachments(Collection classpathEntries) { int count = 0; for (CPE cpe : classpathEntries) { @@ -134,18 +134,29 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { String uri = UriUtil.normalize(doc.getUri()); log.debug("find {} ", uri); synchronized (table) { + String foundUri = null; + IJavaProject foundProject = null; for (Entry e : table.entrySet()) { String projectUri = e.getKey(); log.debug("projectUri = '{}'", projectUri); if (UriUtil.contains(projectUri, uri)) { - log.debug("found {} for {}", e.getValue(), uri); - return Optional.of(e.getValue()); + if (foundUri==null) { + log.debug("found {} for {}", e.getValue(), uri); + foundUri = projectUri; + foundProject = e.getValue(); + } else if (UriUtil.contains(foundUri, projectUri)) { + log.debug("found more nested {} for {}", e.getValue(), uri); + foundUri = projectUri; + foundProject = e.getValue(); + } else { + log.debug("found {} for {} but keeping {}", e.getValue(), uri, foundProject); + } } } + return Optional.ofNullable(foundProject); } - return Optional.empty(); } - + @Override public IJavadocProvider javadocProvider(String projectUri, CPE classpathEntry) { return new JdtLsJavadocProvider(server.getClient(), projectUri); diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/cloud-rabbit-project/src/main/resources/application.yml b/headless-services/spring-boot-language-server/src/test/resources/test-projects/cloud-rabbit-project/src/main/resources/application.yml index 6c51d6ec3..cb1337788 100644 --- a/headless-services/spring-boot-language-server/src/test/resources/test-projects/cloud-rabbit-project/src/main/resources/application.yml +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/cloud-rabbit-project/src/main/resources/application.yml @@ -5,5 +5,5 @@ spring: bindings: input: consumer: - auto-bing-dlq: true + auto-bind-dlq: true \ No newline at end of file