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

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