diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerParams.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerParams.java index 2f9641e89..7526256a0 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerParams.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerParams.java @@ -1,8 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ package org.springframework.ide.vscode.boot.java; import java.util.Arrays; import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider; +import org.springframework.ide.vscode.boot.java.utils.BootProjectUtil; import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider; import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider; import org.springframework.ide.vscode.commons.gradle.GradleCore; @@ -52,7 +63,7 @@ public class BootJavaLanguageServerParams { CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache)); return new BootJavaLanguageServerParams( - javaProjectFinder, + javaProjectFinder.filter(BootProjectUtil::isBootProject), projectObserver, new DefaultSpringPropertyIndexProvider(javaProjectFinder), RunningAppProvider.DEFAULT diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java index 2262f5064..214e65303 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java @@ -109,7 +109,7 @@ public class BootJavaCompletionEngine implements ICompletionEngine { } private String[] getClasspathEntries(IDocument doc) throws Exception { - IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); + IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())).get(); IClasspath classpath = project.getClasspath(); Stream classpathEntries = classpath.getClasspathEntries(); return classpathEntries diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java index b7b9249d9..c11a57bbc 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java @@ -213,7 +213,7 @@ public class BootJavaHoverProvider implements HoverHandler { } private IJavaProject getProject(IDocument doc) throws Exception { - return this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); + return this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())).get(); } private String[] getClasspathEntries(IJavaProject project) throws Exception { diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaReferencesHandler.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaReferencesHandler.java index bd6f550ce..1c8e4191c 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaReferencesHandler.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaReferencesHandler.java @@ -125,7 +125,7 @@ public class BootJavaReferencesHandler implements ReferencesHandler { } private String[] getClasspathEntries(IDocument doc) throws Exception { - IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); + IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())).get(); IClasspath classpath = project.getClasspath(); Stream classpathEntries = classpath.getClasspathEntries(); return classpathEntries diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java index 64cd34717..748a4a53e 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -186,9 +187,9 @@ public class SpringIndexer { try { initializeTask.get(); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); - if (project != null) { - String[] classpathEntries = getClasspathEntries(project); + Optional maybeProject = projectFinder.find(new TextDocumentIdentifier(docURI)); + if (maybeProject.isPresent()) { + String[] classpathEntries = getClasspathEntries(maybeProject.get()); CompletableFuture future = new CompletableFuture<>(); UpdateItem updateItem = new UpdateItem(docURI, content, classpathEntries, future); @@ -265,7 +266,7 @@ public class SpringIndexer { try { System.out.println("scan directory..."); - Map> projects = Files.walk(directory.toPath()) + Map, List> projects = Files.walk(directory.toPath()) .filter(path -> path.getFileName().toString().endsWith(".java")) .filter(Files::isRegularFile) .map(path -> path.toAbsolutePath().toString()) @@ -273,7 +274,7 @@ public class SpringIndexer { System.out.println("scan directory done!!!"); - projects.forEach((project, files) -> scanProject(project, files.toArray(new String[0]))); + projects.forEach((maybeProject, files) -> maybeProject.ifPresent(project -> scanProject(project, files.toArray(new String[0])))); } catch (Exception e) { e.printStackTrace(); diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java index 567adebac..271e6a11f 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java @@ -11,6 +11,8 @@ package org.springframework.ide.vscode.boot.metadata; +import java.util.Optional; + import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -35,9 +37,9 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr @Override public FuzzyMap getIndex(IDocument doc) { - IJavaProject jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); - if (jp != null) { - return indexManager.get(jp, progressService); + Optional jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); + if (jp.isPresent()) { + return indexManager.get(jp.get(), progressService); } return EMPTY_INDEX; } diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java index bd03a1c08..92224fc0a 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java @@ -22,7 +22,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; -import java.util.concurrent.Callable; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; @@ -41,20 +40,16 @@ import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.Before; import org.junit.Test; -import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; import org.springframework.ide.vscode.boot.java.autowired.AutowiredHoverProvider; import org.springframework.ide.vscode.boot.java.autowired.SpringBootAppProvider; import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.util.BadLocationException; import org.springframework.ide.vscode.commons.util.text.LanguageId; import org.springframework.ide.vscode.commons.util.text.TextDocument; -import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; -import org.springframework.ide.vscode.project.harness.PropertyIndexHarness; /** * @author Martin Lippert @@ -77,7 +72,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); @@ -103,7 +98,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); @@ -122,7 +117,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); @@ -143,7 +138,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/ComponentHoverProviderTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/ComponentHoverProviderTest.java index 27193707b..397f0aa2c 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/ComponentHoverProviderTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/ComponentHoverProviderTest.java @@ -72,7 +72,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); @@ -98,7 +98,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); @@ -119,7 +119,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)).get(); CompilationUnit cu = parse(document, project); diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java index bb38a6d40..28cde9efa 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/ValueCompletionTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.fail; import java.io.InputStream; import java.util.List; +import java.util.Optional; import org.apache.commons.io.IOUtils; import org.eclipse.lsp4j.CompletionItem; @@ -52,7 +53,7 @@ public class ValueCompletionTest { testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations"); harness = BootLanguageServerHarness.builder() .mockDefaults() - .projectFinder(d -> getTestProject()) + .projectFinder(d -> Optional.ofNullable(getTestProject())) .build(); indexHarness = harness.getPropertyIndexHarness(); harness.intialize(null); diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/PropertyIndexHarness.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/PropertyIndexHarness.java index d0f1d02fa..1b88942ae 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/PropertyIndexHarness.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/PropertyIndexHarness.java @@ -13,6 +13,7 @@ package org.springframework.ide.vscode.project.harness; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; import org.springframework.boot.configurationmetadata.Deprecation; @@ -563,7 +564,7 @@ public class PropertyIndexHarness { } public JavaProjectFinder getProjectFinder() { - return (doc) -> testProject; + return (doc) -> Optional.ofNullable(testProject); } } diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java index dcfc6c383..c7a4571a4 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java @@ -11,6 +11,8 @@ package org.springframework.ide.vscode.boot.metadata; +import java.util.Optional; + import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.ProgressService; @@ -33,9 +35,9 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr @Override public FuzzyMap getIndex(IDocument doc) { - IJavaProject jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); - if (jp!=null) { - return indexManager.get(jp, progressService); + Optional jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); + if (jp.isPresent()) { + return indexManager.get(jp.get(), progressService); } return EMPTY_INDEX; } diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java index ff504daf1..641d4b0a9 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java @@ -130,6 +130,10 @@ public class TypeUtil { } + public TypeUtil(Optional maybeProject) { + this(maybeProject.orElse(null)); + } + private static final Map PRIMITIVE_TYPE_NAMES = new HashMap<>(); private static final Map PRIMITIVE_TO_BOX_TYPE = new HashMap<>(); static { diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java index cfdb1dc2c..5cf64c59e 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java @@ -52,15 +52,13 @@ class PropertiesHoverCalculator { private FuzzyMap index; private TypeUtil typeUtil; - private IJavaProject project; private IDocument doc; private int offset; private AntlrParser parser; - PropertiesHoverCalculator(FuzzyMap index, TypeUtil typeUtil, IJavaProject project, IDocument doc, int offset) { + PropertiesHoverCalculator(FuzzyMap index, TypeUtil typeUtil, IDocument doc, int offset) { this.index = index; this.typeUtil = typeUtil; - this.project = project; this.doc = doc; this.offset = offset; this.parser = new AntlrParser(); diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverInfoProvider.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverInfoProvider.java index 0c5c7c5bf..2e3179176 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverInfoProvider.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverInfoProvider.java @@ -11,9 +11,12 @@ package org.springframework.ide.vscode.boot.properties.hover; +import java.util.Optional; + import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider; import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider; +import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.util.Renderable; @@ -37,10 +40,6 @@ public class PropertiesHoverInfoProvider implements HoverInfoProvider { @Override public Tuple2 getHoverInfo(IDocument document, int offset) throws Exception { return new PropertiesHoverCalculator(indexProvider.getIndex(document), - typeUtilProvider.getTypeUtil(document), projectFinder.find(new TextDocumentIdentifier(document.getUri())), document, offset).calculate(); + typeUtilProvider.getTypeUtil(document), document, offset).calculate(); } - - - - } diff --git a/headless-services/boot-properties-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java b/headless-services/boot-properties-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java index c8fbe8cd5..c43047e22 100644 --- a/headless-services/boot-properties-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java +++ b/headless-services/boot-properties-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java @@ -14,11 +14,11 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import java.io.File; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import org.eclipse.lsp4j.CompletionItem; @@ -29,7 +29,6 @@ import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider; import org.springframework.ide.vscode.boot.metadata.types.TypeUtil; import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; @@ -50,8 +49,8 @@ public abstract class AbstractPropsEditorTest { protected PropertyIndexHarness md; protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList(new JavaProjectFinder() { @Override - public IJavaProject find(TextDocumentIdentifier doc) { - return getTestProject(); + public Optional find(TextDocumentIdentifier doc) { + return Optional.ofNullable(getTestProject()); } })); diff --git a/headless-services/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinder.java b/headless-services/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinder.java index 59589f48c..abdaddc94 100644 --- a/headless-services/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinder.java +++ b/headless-services/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinder.java @@ -11,6 +11,7 @@ package org.springframework.ide.vscode.commons.gradle; import java.io.File; +import java.util.Optional; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; @@ -32,8 +33,8 @@ public class GradleProjectFinder extends FileBasedJavaProjectFinder { } @Override - public IJavaProject find(File file) { + public Optional find(File file) { File gradlebuild = FileUtils.findFile(file, GradleCore.GRADLE_BUILD_FILE); - return cache.project(gradlebuild); + return Optional.ofNullable(cache.project(gradlebuild)); } } diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java index 9f5e48ebd..0d509e65b 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java @@ -10,16 +10,15 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.languageserver.java; -import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.util.text.IDocument; /** * Composite project manager that acts a single project manager but consissts of many project managers @@ -48,7 +47,8 @@ public class CompositeJavaProjectFinder implements JavaProjectFinder { } @Override - public IJavaProject find(TextDocumentIdentifier doc) { + public Optional find(TextDocumentIdentifier doc) { return projectFinders.stream().map(finder -> finder.find(doc)).filter(Objects::nonNull).findFirst().orElse(null); } + } diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java index ddf5a8cfe..593f4b205 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java @@ -13,6 +13,7 @@ package org.springframework.ide.vscode.commons.languageserver.java; import java.io.File; import java.net.URI; import java.net.URISyntaxException; +import java.util.Optional; import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -31,7 +32,7 @@ import org.springframework.ide.vscode.commons.util.StringUtil; public abstract class FileBasedJavaProjectFinder implements JavaProjectFinder { @Override - public final IJavaProject find(TextDocumentIdentifier doc) { + public final Optional find(TextDocumentIdentifier doc) { try { String uriStr = doc.getUri(); if (StringUtil.hasText(uriStr)) { @@ -45,9 +46,9 @@ public abstract class FileBasedJavaProjectFinder implements JavaProjectFinder { catch (URISyntaxException e) { Log.log(e); } - return null; + return Optional.empty(); } - protected abstract IJavaProject find(File file); + protected abstract Optional find(File file); } diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/JavaProjectFinder.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/JavaProjectFinder.java index c837916ab..d59ab8567 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/JavaProjectFinder.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/JavaProjectFinder.java @@ -10,11 +10,11 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.languageserver.java; -import java.io.File; +import java.util.Optional; +import java.util.function.Predicate; import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.util.text.IDocument; /** * Java project finder provides a means to obtain the project context associated with @@ -25,6 +25,15 @@ import org.springframework.ide.vscode.commons.util.text.IDocument; */ public interface JavaProjectFinder { - IJavaProject find(TextDocumentIdentifier doc); + Optional find(TextDocumentIdentifier doc); + default JavaProjectFinder filter(Predicate acceptWhen) { + return doc -> this.find(doc).flatMap(jp -> { + if (acceptWhen.test(jp)) { + return Optional.of(jp); + } + return Optional.empty(); + }); + } + } diff --git a/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectFinder.java b/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectFinder.java index 3f8587e28..59fd78210 100644 --- a/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectFinder.java +++ b/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectFinder.java @@ -11,6 +11,7 @@ package org.springframework.ide.vscode.commons.maven.java; import java.io.File; +import java.util.Optional; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; @@ -32,8 +33,11 @@ public class MavenProjectFinder extends FileBasedJavaProjectFinder { } @Override - public IJavaProject find(File file) { + public Optional find(File file) { File pomFile = FileUtils.findFile(file, MavenCore.POM_XML); - return cache.project(pomFile); + if (pomFile!=null) { + return Optional.ofNullable(cache.project(pomFile)); + } + return Optional.empty(); } } diff --git a/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFileFinder.java b/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFileFinder.java index 2be89e127..5ac6fa6cf 100644 --- a/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFileFinder.java +++ b/headless-services/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFileFinder.java @@ -11,6 +11,7 @@ package org.springframework.ide.vscode.commons.maven.java.classpathfile; import java.io.File; +import java.util.Optional; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; @@ -34,8 +35,11 @@ public class JavaProjectWithClasspathFileFinder extends FileBasedJavaProjectFind } @Override - public IJavaProject find(File file) { + public Optional find(File file) { File cpFile = FileUtils.findFile(file, MavenCore.CLASSPATH_TXT); - return cache.project(cpFile); + if (cpFile!=null) { + return Optional.ofNullable(cache.project(cpFile)); + } + return Optional.empty(); } }