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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user