Trigger reconcile on classpath changes

This commit is contained in:
Kris De Volder
2018-09-07 13:19:54 -07:00
parent 55f20d7d99
commit ed27056ea0
5 changed files with 47 additions and 11 deletions

View File

@@ -10,15 +10,33 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
import org.springframework.ide.vscode.boot.properties.BootPropertiesLanguageServerComponents;
import org.springframework.ide.vscode.commons.languageserver.composable.ComposableLanguageServer;
import org.springframework.ide.vscode.commons.languageserver.composable.CompositeLanguageServerComponents;
import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents;
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
public class BootLanguageServer<C extends LanguageServerComponents> extends ComposableLanguageServer<C> {
private static final Logger log = LoggerFactory.getLogger(BootLanguageServer.class);
private static ProjectObserver.Listener reconcileOpenDocuments(SimpleLanguageServer s, CompositeLanguageServerComponents c) {
return ProjectObserver.onAny(project -> {
c.getReconcileEngine().ifPresent(reconciler -> {
log.info("A project changed {}, triggering reconcile on all open documents", project.getElementName());
for (TextDocument doc : s.getTextDocumentService().getAll()) {
s.validateWith(doc.getId(), reconciler);
}
});
});
}
private BootLanguageServer(String extensionId, LSFactory<C> _components) {
super(extensionId, _components);
}
@@ -26,13 +44,15 @@ public class BootLanguageServer<C extends LanguageServerComponents> extends Comp
public static ComposableLanguageServer<CompositeLanguageServerComponents> create(LSFactory<BootLanguageServerParams> _params) {
return new ComposableLanguageServer<>("vscode-boot", s -> {
BootLanguageServerParams params = _params.create(s);
CompositeLanguageServerComponents.Builder components = new CompositeLanguageServerComponents.Builder();
components.add(new BootPropertiesLanguageServerComponents(s, (ignore) -> params));
components.add(new BootJavaLanguageServerComponents(s, (ignore) -> params));
return components.build(s);
CompositeLanguageServerComponents.Builder builder = new CompositeLanguageServerComponents.Builder();
builder.add(new BootPropertiesLanguageServerComponents(s, (ignore) -> params));
builder.add(new BootJavaLanguageServerComponents(s, (ignore) -> params));
CompositeLanguageServerComponents components = builder.build(s);
params.projectObserver.addListener(reconcileOpenDocuments(s, components));
return components;
});
}
public static ComposableLanguageServer<BootPropertiesLanguageServerComponents> createProperties(LSFactory<BootLanguageServerParams> params) {
return new ComposableLanguageServer<>("vscode-boot-properties", s -> new BootPropertiesLanguageServerComponents(s, params));
}