From 71dabb8d6ce33ff34cf761f7f17f6fac366d4351 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 17 Oct 2017 11:04:08 -0700 Subject: [PATCH] Streamlime and simplify JavaProjectFinder Only a single method needs to be implemented now to define how a project context is found for a given document location. --- .../java/handlers/BootJavaCompletionEngine.java | 3 ++- .../java/handlers/BootJavaHoverProvider.java | 3 ++- .../handlers/BootJavaReferencesHandler.java | 3 ++- .../vscode/boot/java/utils/SpringIndexer.java | 5 +++-- .../DefaultSpringPropertyIndexProvider.java | 3 ++- .../test/AutowiredHoverProviderTest.java | 9 +++++---- .../beans/test/ComponentHoverProviderTest.java | 7 ++++--- .../java/scope/test/ScopeCompletionTest.java | 4 ++-- .../java/value/test/ValueCompletionTest.java | 4 ++-- .../springframework/ide/vscode/boot/Main.java | 3 ++- .../DefaultSpringPropertyIndexProvider.java | 3 ++- .../hover/PropertiesHoverInfoProvider.java | 3 ++- .../editor/harness/AbstractPropsEditorTest.java | 7 ++++--- .../commons/gradle/GradleProjectFinder.java | 4 ++-- .../java/CompositeJavaProjectFinder.java | 7 ++++--- ...der.java => FileBasedJavaProjectFinder.java} | 17 ++++++++++------- .../languageserver/java/JavaProjectFinder.java | 4 ++-- .../commons/maven/java/MavenProjectFinder.java | 4 ++-- .../JavaProjectWithClasspathFileFinder.java | 4 ++-- 19 files changed, 56 insertions(+), 41 deletions(-) rename headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/{AbstractJavaProjectFinder.java => FileBasedJavaProjectFinder.java} (72%) 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 f47bd2042..2262f5064 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 @@ -25,6 +25,7 @@ import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.NodeFinder; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetManager; import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -108,7 +109,7 @@ public class BootJavaCompletionEngine implements ICompletionEngine { } private String[] getClasspathEntries(IDocument doc) throws Exception { - IJavaProject project = this.projectFinder.find(doc); + IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); 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 05dfd2413..a76b63f68 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 @@ -31,6 +31,7 @@ import org.eclipse.jdt.core.dom.NormalAnnotation; import org.eclipse.jdt.core.dom.SingleMemberAnnotation; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.TextDocumentPositionParams; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp; @@ -211,7 +212,7 @@ public class BootJavaHoverProvider implements HoverHandler { } private IJavaProject getProject(IDocument doc) throws Exception { - return this.projectFinder.find(doc); + return this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); } 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 05558835b..bd6f550ce 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 @@ -26,6 +26,7 @@ import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.NodeFinder; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.ReferenceParams; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; @@ -124,7 +125,7 @@ public class BootJavaReferencesHandler implements ReferencesHandler { } private String[] getClasspathEntries(IDocument doc) throws Exception { - IJavaProject project = this.projectFinder.find(doc); + IJavaProject project = this.projectFinder.find(new TextDocumentIdentifier(doc.getUri())); 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 03ba54e5b..64cd34717 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 @@ -44,6 +44,7 @@ import org.eclipse.jdt.core.dom.SingleMemberAnnotation; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.SymbolKind; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider; import org.springframework.ide.vscode.commons.java.IClasspath; @@ -185,7 +186,7 @@ public class SpringIndexer { try { initializeTask.get(); - IJavaProject project = projectFinder.find(new File(new URI(docURI))); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); if (project != null) { String[] classpathEntries = getClasspathEntries(project); @@ -268,7 +269,7 @@ public class SpringIndexer { .filter(path -> path.getFileName().toString().endsWith(".java")) .filter(Files::isRegularFile) .map(path -> path.toAbsolutePath().toString()) - .collect(Collectors.groupingBy((javaFile) -> projectFinder.find(new File(javaFile)))); + .collect(Collectors.groupingBy((javaFile) -> projectFinder.find(new TextDocumentIdentifier(new File(javaFile).toURI().toString())))); System.out.println("scan directory done!!!"); 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 2871fb420..567adebac 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,7 @@ package org.springframework.ide.vscode.boot.metadata; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.ProgressService; @@ -34,7 +35,7 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr @Override public FuzzyMap getIndex(IDocument doc) { - IJavaProject jp = javaProjectFinder.find(doc); + IJavaProject jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); if (jp != null) { return indexManager.get(jp, progressService); } 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 63103884a..3b0816eef 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 @@ -37,6 +37,7 @@ import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.MarkedString; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.Before; import org.junit.Test; @@ -88,7 +89,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); @@ -114,7 +115,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); @@ -133,7 +134,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); @@ -154,7 +155,7 @@ public class AutowiredHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); 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 74e96b2d5..3b2accae8 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 @@ -37,6 +37,7 @@ import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.MarkedString; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.Before; import org.junit.Test; @@ -88,7 +89,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); @@ -114,7 +115,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); @@ -135,7 +136,7 @@ public class ComponentHoverProviderTest { String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java"; TextDocument document = createTempTextDocument(docURI); - IJavaProject project = projectFinder.find(document); + IJavaProject project = projectFinder.find(new TextDocumentIdentifier(docURI)); CompilationUnit cu = parse(document, project); diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/scope/test/ScopeCompletionTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/scope/test/ScopeCompletionTest.java index 0260c1627..015ed2639 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/scope/test/ScopeCompletionTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/scope/test/ScopeCompletionTest.java @@ -25,7 +25,7 @@ import org.junit.Before; import org.junit.Test; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder; +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.util.text.LanguageId; @@ -39,7 +39,7 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness; */ public class ScopeCompletionTest { - protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList((JavaProjectFinder)new AbstractJavaProjectFinder() { + protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList((JavaProjectFinder)new FileBasedJavaProjectFinder() { @Override public IJavaProject find(File doc) { return getTestProject(); 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 34ecdeb09..910f55424 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 @@ -26,7 +26,7 @@ import org.junit.Test; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; import org.springframework.ide.vscode.boot.java.value.ValueCompletionProcessor; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder; import org.springframework.ide.vscode.commons.util.text.LanguageId; import org.springframework.ide.vscode.languageserver.testharness.Editor; @@ -53,7 +53,7 @@ public class ValueCompletionTest { harness = new LanguageServerHarness(() -> { BootJavaLanguageServer server = new BootJavaLanguageServer( - new CompositeJavaProjectFinder(new ArrayList<>(Collections.singleton(new AbstractJavaProjectFinder() { + new CompositeJavaProjectFinder(new ArrayList<>(Collections.singleton(new FileBasedJavaProjectFinder() { @Override public IJavaProject find(File doc) { return getTestProject(); diff --git a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/Main.java b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/Main.java index 9a42bf802..2432d548a 100644 --- a/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/Main.java +++ b/headless-services/boot-properties-language-server/src/main/java/org/springframework/ide/vscode/boot/Main.java @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot; import java.io.IOException; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.boot.metadata.DefaultSpringPropertyIndexProvider; import org.springframework.ide.vscode.boot.metadata.types.TypeUtil; import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider; @@ -33,7 +34,7 @@ public class Main { LaunguageServerApp.start(() -> { CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(); DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder); - TypeUtilProvider typeUtilProvider = (IDocument doc) -> new TypeUtil(javaProjectFinder.find(doc)); + TypeUtilProvider typeUtilProvider = (IDocument doc) -> new TypeUtil(javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri()))); SimpleLanguageServer server = new BootPropertiesLanguageServer(indexProvider, typeUtilProvider, javaProjectFinder); indexProvider.setProgressService(server.getProgressService()); return server; 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 685fc56f9..dcfc6c383 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,7 @@ package org.springframework.ide.vscode.boot.metadata; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.ProgressService; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; @@ -32,7 +33,7 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr @Override public FuzzyMap getIndex(IDocument doc) { - IJavaProject jp = javaProjectFinder.find(doc); + IJavaProject jp = javaProjectFinder.find(new TextDocumentIdentifier(doc.getUri())); if (jp!=null) { return indexManager.get(jp, progressService); } 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 a12562845..0c5c7c5bf 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,6 +11,7 @@ package org.springframework.ide.vscode.boot.properties.hover; +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.languageserver.hover.HoverInfoProvider; @@ -36,7 +37,7 @@ 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(document), document, offset).calculate(); + typeUtilProvider.getTypeUtil(document), projectFinder.find(new TextDocumentIdentifier(document.getUri())), 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 3f5b54401..c8fbe8cd5 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 @@ -22,13 +22,14 @@ import java.util.List; import java.util.Set; import org.eclipse.lsp4j.CompletionItem; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.junit.Before; import org.springframework.ide.vscode.boot.editor.harness.PropertyIndexHarness.ItemConfigurer; 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.AbstractJavaProjectFinder; +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; @@ -47,9 +48,9 @@ public abstract class AbstractPropsEditorTest { private ProjectsHarness projects = ProjectsHarness.INSTANCE; protected PropertyIndexHarness md; - protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList(new AbstractJavaProjectFinder() { + protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList(new JavaProjectFinder() { @Override - public IJavaProject find(File doc) { + public IJavaProject find(TextDocumentIdentifier doc) { return 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 23ee9469e..59589f48c 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 @@ -13,7 +13,7 @@ package org.springframework.ide.vscode.commons.gradle; import java.io.File; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; import org.springframework.ide.vscode.commons.util.FileUtils; /** @@ -22,7 +22,7 @@ import org.springframework.ide.vscode.commons.util.FileUtils; * @author Alex Boyko * */ -public class GradleProjectFinder extends AbstractJavaProjectFinder { +public class GradleProjectFinder extends FileBasedJavaProjectFinder { private GradleProjectCache cache; 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 e1ccda51c..9f5e48ebd 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 @@ -17,6 +17,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.util.text.IDocument; @@ -26,7 +27,7 @@ import org.springframework.ide.vscode.commons.util.text.IDocument; * @author Alex Boyko * */ -public class CompositeJavaProjectFinder extends AbstractJavaProjectFinder { +public class CompositeJavaProjectFinder implements JavaProjectFinder { private final List projectFinders; @@ -47,7 +48,7 @@ public class CompositeJavaProjectFinder extends AbstractJavaProjectFinder { } @Override - public IJavaProject find(File file) { - return projectFinders.stream().map(finder -> finder.find(file)).filter(Objects::nonNull).findFirst().orElse(null); + public IJavaProject 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/AbstractJavaProjectFinder.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java similarity index 72% rename from headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractJavaProjectFinder.java rename to headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java index bcb93d8d8..ddf5a8cfe 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractJavaProjectFinder.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/FileBasedJavaProjectFinder.java @@ -14,27 +14,28 @@ import java.io.File; import java.net.URI; import java.net.URISyntaxException; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.StringUtil; -import org.springframework.ide.vscode.commons.util.text.IDocument; /** - * Abstract implementation of Java project finder interface + * File-based abstract implementation of JavaProjectFinder. + *

+ * Note that implementations derived from this class have a built-in + * limitation that they only work for documents stored on disk. * * @author Alex Boyko - * + * @author Kris De Volder */ -public abstract class AbstractJavaProjectFinder implements JavaProjectFinder { +public abstract class FileBasedJavaProjectFinder implements JavaProjectFinder { @Override - public final IJavaProject find(IDocument doc) { + public final IJavaProject find(TextDocumentIdentifier doc) { try { String uriStr = doc.getUri(); if (StringUtil.hasText(uriStr)) { URI uri = new URI(uriStr); - // TODO: This only work with File uri. Should it work with others - // too? if (uri.getScheme().equalsIgnoreCase("file")) { File file = new File(uri).getAbsoluteFile(); return find(file); @@ -47,4 +48,6 @@ public abstract class AbstractJavaProjectFinder implements JavaProjectFinder { return null; } + protected abstract IJavaProject 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 4593a1fc5..c837916ab 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 @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.commons.languageserver.java; import java.io.File; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.util.text.IDocument; @@ -24,7 +25,6 @@ import org.springframework.ide.vscode.commons.util.text.IDocument; */ public interface JavaProjectFinder { - IJavaProject find(IDocument doc); - IJavaProject find(File file); + IJavaProject find(TextDocumentIdentifier doc); } 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 fded919c0..3f8587e28 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 @@ -13,7 +13,7 @@ package org.springframework.ide.vscode.commons.maven.java; import java.io.File; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; import org.springframework.ide.vscode.commons.maven.MavenCore; import org.springframework.ide.vscode.commons.util.FileUtils; @@ -23,7 +23,7 @@ import org.springframework.ide.vscode.commons.util.FileUtils; * @author Alex Boyko * */ -public class MavenProjectFinder extends AbstractJavaProjectFinder { +public class MavenProjectFinder extends FileBasedJavaProjectFinder { private MavenProjectCache cache; 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 8b0bd1163..2be89e127 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 @@ -13,7 +13,7 @@ package org.springframework.ide.vscode.commons.maven.java.classpathfile; import java.io.File; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder; +import org.springframework.ide.vscode.commons.languageserver.java.FileBasedJavaProjectFinder; import org.springframework.ide.vscode.commons.maven.MavenCore; import org.springframework.ide.vscode.commons.util.FileUtils; @@ -24,7 +24,7 @@ import org.springframework.ide.vscode.commons.util.FileUtils; * @author Alex Boyko * */ -public class JavaProjectWithClasspathFileFinder extends AbstractJavaProjectFinder { +public class JavaProjectWithClasspathFileFinder extends FileBasedJavaProjectFinder { private JavaProjectWithClasspathFileCache cache;