PT #150740880: VSCode/Eclipse file watching. Back to project finder

Eclipse client file change listening mechanics

Reworked file/project observer implementation

Merge fixes
This commit is contained in:
BoykoAlex
2017-10-13 17:06:59 -04:00
parent aef5d309c6
commit d4a9907b0d
62 changed files with 1455 additions and 1056 deletions

View File

@@ -45,12 +45,8 @@ 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.CompositeJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.java.MavenProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
import org.springframework.ide.vscode.commons.util.BadLocationException;
import org.springframework.ide.vscode.commons.util.BasicFileObserver;
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;
@@ -62,22 +58,19 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
*/
public class AutowiredHoverProviderTest {
private JavaProjectManager projectManager;
private CompositeJavaProjectFinder projectFinder;
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;
private BasicFileObserver fileObserver;
@Before
public void setup() throws Exception {
projectManager = new CompositeJavaProjectManager(new JavaProjectManager[] {new MavenProjectManager(MavenCore.getDefault())});
fileObserver = new BasicFileObserver();
projectManager.setFileObserver(fileObserver);
projectFinder = new CompositeJavaProjectFinder();
indexHarness = new PropertyIndexHarness();
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
@Override
public BootJavaLanguageServer call() throws Exception {
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider());
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider());
return server;
}
}) {
@@ -94,7 +87,7 @@ public class AutowiredHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);
@@ -120,7 +113,7 @@ public class AutowiredHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);
@@ -139,7 +132,7 @@ public class AutowiredHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);
@@ -160,7 +153,7 @@ public class AutowiredHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);

View File

@@ -45,12 +45,8 @@ import org.springframework.ide.vscode.boot.java.autowired.SpringBootAppProvider;
import org.springframework.ide.vscode.boot.java.beans.ComponentHoverProvider;
import org.springframework.ide.vscode.commons.java.IClasspath;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.java.MavenProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
import org.springframework.ide.vscode.commons.util.BadLocationException;
import org.springframework.ide.vscode.commons.util.BasicFileObserver;
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;
@@ -62,22 +58,19 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
*/
public class ComponentHoverProviderTest {
private JavaProjectManager projectManager;
private CompositeJavaProjectFinder projectFinder;
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;
private BasicFileObserver fileObserver;
@Before
public void setup() throws Exception {
projectManager = new CompositeJavaProjectManager(new JavaProjectManager[] {new MavenProjectManager(MavenCore.getDefault())});
fileObserver = new BasicFileObserver();
projectManager.setFileObserver(fileObserver);
projectFinder = new CompositeJavaProjectFinder();
indexHarness = new PropertyIndexHarness();
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
@Override
public BootJavaLanguageServer call() throws Exception {
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider());
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider());
return server;
}
}) {
@@ -94,7 +87,7 @@ public class ComponentHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);
@@ -120,7 +113,7 @@ public class ComponentHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutowiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);
@@ -141,7 +134,7 @@ public class ComponentHoverProviderTest {
harness.intialize(directory);
String docURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/MyAutomaticallyWiredComponent.java";
IJavaProject project = projectManager.find(directory);
IJavaProject project = projectFinder.find(directory);
TextDocument document = createTempTextDocument(docURI);
CompilationUnit cu = parse(document, project);

View File

@@ -29,10 +29,7 @@ import org.springframework.ide.vscode.boot.java.beans.ComponentSymbolProvider;
import org.springframework.ide.vscode.boot.java.beans.Constants;
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.java.MavenProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
@@ -43,7 +40,7 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
public class SpringIndexerBeansTest {
private Map<String, SymbolProvider> symbolProviders;
private JavaProjectManager projectManager;
private CompositeJavaProjectFinder projectManager;
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;
@@ -53,7 +50,7 @@ public class SpringIndexerBeansTest {
symbolProviders.put(Constants.SPRING_BEAN, new BeansSymbolProvider());
symbolProviders.put(Constants.SPRING_COMPONENT, new ComponentSymbolProvider());
projectManager = new CompositeJavaProjectManager(new JavaProjectManager[] {new MavenProjectManager(MavenCore.getDefault())});
projectManager = new CompositeJavaProjectFinder();
indexHarness = new PropertyIndexHarness();
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {

View File

@@ -28,10 +28,7 @@ import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.Constants;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.java.MavenProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
@@ -42,7 +39,7 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
public class RequestMappingSymbolProviderTest {
private Map<String, SymbolProvider> symbolProviders;
private JavaProjectManager projectManager;
private CompositeJavaProjectFinder projectManager;
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;
@@ -51,7 +48,7 @@ public class RequestMappingSymbolProviderTest {
symbolProviders = new HashMap<>();
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
projectManager = new CompositeJavaProjectManager(new JavaProjectManager[] {new MavenProjectManager(MavenCore.getDefault())});
projectManager = new CompositeJavaProjectFinder();
indexHarness = new PropertyIndexHarness();
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {

View File

@@ -15,6 +15,7 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
@@ -24,8 +25,8 @@ 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.AbstractJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
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.IDocument;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.languageserver.testharness.Editor;
@@ -38,7 +39,7 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
*/
public class ScopeCompletionTest {
protected final JavaProjectManager javaProjectFinder = new AbstractJavaProjectManager() {
protected final CompositeJavaProjectFinder javaProjectFinder = new CompositeJavaProjectFinder(Arrays.asList(new JavaProjectFinder() {
@Override
public boolean isProjectRoot(File file) {
return false;
@@ -51,7 +52,7 @@ public class ScopeCompletionTest {
public IJavaProject find(IDocument doc) {
return getTestProject();
}
};
}));
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;

View File

@@ -33,11 +33,10 @@ import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
import org.springframework.ide.vscode.boot.java.requestmapping.Constants;
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
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;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.java.MavenProjectManager;
import org.springframework.ide.vscode.commons.util.BasicFileObserver;
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
@@ -48,25 +47,28 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
public class SpringIndexerTest {
private Map<String, SymbolProvider> symbolProviders;
private JavaProjectManager projectManager;
private CompositeJavaProjectFinder projectFinder;
private LanguageServerHarness<BootJavaLanguageServer> harness;
private PropertyIndexHarness indexHarness;
private BasicFileObserver fileObserver;
private SpringIndexer indexer;
@Before
public void setup() throws Exception {
symbolProviders = new HashMap<>();
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
projectManager = new CompositeJavaProjectManager(new JavaProjectManager[] {new MavenProjectManager(MavenCore.getDefault())});
fileObserver = new BasicFileObserver();
projectManager.setFileObserver(fileObserver);
projectFinder = new CompositeJavaProjectFinder();
indexHarness = new PropertyIndexHarness();
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
@Override
public BootJavaLanguageServer call() throws Exception {
BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider());
BootJavaLanguageServer server = new BootJavaLanguageServer(projectFinder, indexHarness.getIndexProvider()) {
@Override
protected SpringIndexer createAnnotationIndexer(SimpleLanguageServer server, JavaProjectFinder projectManager) {
return indexer = new SpringIndexer((BootJavaLanguageServer) server, projectFinder, symbolProviders);
}
};
return server;
}
}) {
@@ -81,9 +83,7 @@ public class SpringIndexerTest {
public void testScanningAllAnnotationsSimpleProjectUpfront() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
@@ -105,9 +105,7 @@ public class SpringIndexerTest {
public void testRetrievingSymbolsPerDocument() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
String uriPrefix = "file://" + directory.getAbsolutePath();
List<? extends SymbolInformation> symbols = indexer.getSymbols(uriPrefix + "/src/main/java/org/test/MainClass.java");
@@ -132,9 +130,7 @@ public class SpringIndexerTest {
public void testScanningAllAnnotationsMultiModuleProjectUpfront() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/").toURI());
indexer.initialize(directory.toPath());
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
@@ -156,10 +152,7 @@ public class SpringIndexerTest {
public void testUpdateChangedDocument() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
// create initial index content
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
// update document and update index
String changedDocURI = "file://" + directory.getAbsolutePath() + "/src/main/java/org/test/SimpleMappingClass.java";
@@ -194,9 +187,7 @@ public class SpringIndexerTest {
public void testFilterSymbolsUsingQueryString() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("mapp");
@@ -216,9 +207,7 @@ public class SpringIndexerTest {
public void testFilterSymbolsUsingQueryStringSplittedResult() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("@/foo-root-mapping -- (no method defined)");
@@ -234,9 +223,7 @@ public class SpringIndexerTest {
public void testFilterSymbolsUsingQueryStringFullSymbolString() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath());
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("@/foo-root-mapping/embedded-foo-mapping-with-root -- (no method defined)");
@@ -268,9 +255,7 @@ public class SpringIndexerTest {
public void testRefreshOnProjectChange() throws Exception {
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()));
SpringIndexer indexer = new SpringIndexer(harness.getServer(), projectManager, symbolProviders);
File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
indexer.initialize(directory.toPath()).get();
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(8, allSymbols.size());
@@ -278,7 +263,7 @@ public class SpringIndexerTest {
File pomFile = directory.toPath().resolve(MavenCore.POM_XML).toFile();
assertFalse(indexer.isInitializing());
fileObserver.notifyFileChanged(pomFile.toURI().toString());
harness.changeFile(pomFile.toURI().toString());
// Refresh in progress
assertTrue(indexer.isInitializing());

View File

@@ -15,6 +15,8 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
@@ -25,8 +27,8 @@ 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.AbstractJavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectManager;
import org.springframework.ide.vscode.commons.languageserver.java.AbstractJavaProjectFinder;
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
import org.springframework.ide.vscode.commons.util.text.IDocument;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.languageserver.testharness.Editor;
@@ -39,21 +41,6 @@ import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
*/
public class ValueCompletionTest {
protected final JavaProjectManager javaProjectFinder = new AbstractJavaProjectManager() {
@Override
public boolean isProjectRoot(File file) {
return false;
}
@Override
public IJavaProject find(File file) {
return null;
}
@Override
public IJavaProject find(IDocument doc) {
return getTestProject();
}
};
private LanguageServerHarness<BootJavaLanguageServer> harness;
private IJavaProject testProject;
@@ -69,7 +56,24 @@ public class ValueCompletionTest {
harness = new LanguageServerHarness<BootJavaLanguageServer>(new Callable<BootJavaLanguageServer>() {
@Override
public BootJavaLanguageServer call() throws Exception {
BootJavaLanguageServer server = new BootJavaLanguageServer(javaProjectFinder, indexHarness.getIndexProvider());
BootJavaLanguageServer server = new BootJavaLanguageServer(
new CompositeJavaProjectFinder(new ArrayList<>(Collections.singleton(new AbstractJavaProjectFinder() {
@Override
public boolean isProjectRoot(File file) {
return false;
}
@Override
public IJavaProject find(File file) {
return null;
}
@Override
public IJavaProject find(IDocument doc) {
return getTestProject();
}
}))),
indexHarness.getIndexProvider());
return server;
}
}) {