From 09380b75edea1b8d566d3875426bf20bbf3170c5 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Fri, 28 Dec 2018 09:03:55 +0100 Subject: [PATCH] enable symbol indexing for regular, non-boot spring projects --- ...tProjectUtil.java => SpringProjectUtil.java} | 17 ++++++++++++----- .../boot/app/BootLanguageServerParams.java | 6 +++--- .../vscode/boot/java/utils/SpringIndexer.java | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) rename headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/{BootProjectUtil.java => SpringProjectUtil.java} (63%) diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/BootProjectUtil.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java similarity index 63% rename from headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/BootProjectUtil.java rename to headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java index b88826c40..cc2864e0b 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/BootProjectUtil.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java @@ -15,16 +15,23 @@ import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class BootProjectUtil { +public class SpringProjectUtil { - public static final Logger log = LoggerFactory.getLogger(BootProjectUtil.class); + public static final Logger log = LoggerFactory.getLogger(SpringProjectUtil.class); + public static boolean isSpringProject(IJavaProject jp) { + return hasSpecificLibraryOnClasspath(jp, "spring-core"); + } public static boolean isBootProject(IJavaProject jp) { + return hasSpecificLibraryOnClasspath(jp, "spring-boot"); + } + + private static boolean hasSpecificLibraryOnClasspath(IJavaProject jp, String libraryNamePrefix) { try { IClasspath cp = jp.getClasspath(); if (cp!=null) { - return IClasspathUtil.getBinaryRoots(cp, (cpe) -> !cpe.isSystem()).stream().anyMatch(cpe -> isBootEntry(cpe)); + return IClasspathUtil.getBinaryRoots(cp, (cpe) -> !cpe.isSystem()).stream().anyMatch(cpe -> isEntry(cpe, libraryNamePrefix)); } } catch (Exception e) { log.error("Failed to determine whether '" + jp.getElementName() + "' is Spring Boot project", e); @@ -32,8 +39,8 @@ public class BootProjectUtil { return false; } - private static boolean isBootEntry(File cpe) { + private static boolean isEntry(File cpe, String libNamePrefix) { String name = cpe.getName(); - return name.endsWith(".jar") && name.startsWith("spring-boot"); + return name.endsWith(".jar") && name.startsWith(libNamePrefix); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java index 32491d353..434b8684f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java @@ -29,9 +29,9 @@ import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider; import org.springframework.ide.vscode.commons.gradle.GradleCore; import org.springframework.ide.vscode.commons.gradle.GradleProjectCache; import org.springframework.ide.vscode.commons.gradle.GradleProjectFinder; -import org.springframework.ide.vscode.commons.java.BootProjectUtil; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.IJavadocProvider; +import org.springframework.ide.vscode.commons.java.SpringProjectUtil; import org.springframework.ide.vscode.commons.javadoc.JavaDocProviders; import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.CompositeProjectOvserver; @@ -98,7 +98,7 @@ public class BootLanguageServerParams { indexProvider.setProgressService(server.getProgressService()); return new BootLanguageServerParams( - jdtProjectCache.filter(BootProjectUtil::isBootProject), + jdtProjectCache.filter(SpringProjectUtil::isBootProject), jdtProjectCache, indexProvider, (IDocument doc) -> new TypeUtil(jdtProjectCache.find(new TextDocumentIdentifier(doc.getUri()))), @@ -161,7 +161,7 @@ public class BootLanguageServerParams { indexProvider.setProgressService(server.getProgressService()); return new BootLanguageServerParams( - javaProjectFinder.filter(BootProjectUtil::isBootProject), + javaProjectFinder.filter(SpringProjectUtil::isBootProject), projectObserver, indexProvider, (IDocument doc) -> new TypeUtil(javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri()))), diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java index 3679b10d3..940a2f565 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java @@ -58,10 +58,10 @@ import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyA import org.springframework.ide.vscode.boot.java.handlers.EnhancedSymbolInformation; import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation; import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider; -import org.springframework.ide.vscode.commons.java.BootProjectUtil; import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IClasspathUtil; import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.java.SpringProjectUtil; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver.Listener; @@ -179,7 +179,7 @@ public class SpringIndexer { public CompletableFuture initializeProject(IJavaProject project) { try { - if (BootProjectUtil.isBootProject(project)) { + if (SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)) { if (project.getElementName() == null) { // Projects indexed by name. No name - no index for it log.debug("Project with NULL name is being initialized");