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.
This commit is contained in:
Kris De Volder
2017-10-17 11:04:08 -07:00
parent 69491029b3
commit 71dabb8d6c
19 changed files with 56 additions and 41 deletions

View File

@@ -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;

View File

@@ -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<JavaProjectFinder> 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);
}
}

View File

@@ -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.
* <p>
* 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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;