ProjectReconcileSchedulers as beans
This commit is contained in:
@@ -37,9 +37,11 @@ import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoCon
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.ide.vscode.boot.common.ProjectReconcileScheduler;
|
||||
import org.springframework.ide.vscode.boot.common.PropertyCompletionFactory;
|
||||
import org.springframework.ide.vscode.boot.common.RelaxedNameConfig;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeActionProvider;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.BootJavaProjectReconcilerScheduler;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.BootJavaReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.JavaCodeActionHandler;
|
||||
import org.springframework.ide.vscode.boot.java.links.DefaultJavaElementLocationProvider;
|
||||
@@ -70,9 +72,11 @@ import org.springframework.ide.vscode.boot.metadata.ProjectBasedPropertyIndexPro
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndex;
|
||||
import org.springframework.ide.vscode.boot.metadata.ValueProviderRegistry;
|
||||
import org.springframework.ide.vscode.boot.properties.completions.SpringPropertiesCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.validation.BootVersionValidationEngine;
|
||||
import org.springframework.ide.vscode.boot.xml.SpringXMLCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.yaml.completions.ApplicationYamlAssistContext;
|
||||
import org.springframework.ide.vscode.boot.yaml.completions.SpringYamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.LanguageServerRunner;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.FutureProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
@@ -339,13 +343,54 @@ public class BootLanguageServerBootApp {
|
||||
}
|
||||
|
||||
@Bean
|
||||
BootJavaReconcileEngine getBootJavaReconcileEngine(JavaProjectFinder projectFinder, JavaReconciler[] javaReconcilers, SimpleLanguageServer server,
|
||||
BootJavaConfig config, ProjectObserver projectObserver, Optional<RewriteRecipeRepository> recipeRepoOpt) {
|
||||
return new BootJavaReconcileEngine(projectFinder, javaReconcilers, server, config, projectObserver, recipeRepoOpt.orElse(null));
|
||||
BootJavaReconcileEngine getBootJavaReconcileEngine(JavaProjectFinder projectFinder, JavaReconciler[] javaReconcilers, SimpleLanguageServer server) {
|
||||
return new BootJavaReconcileEngine(projectFinder, javaReconcilers, server);
|
||||
}
|
||||
|
||||
@Bean
|
||||
BootJavaCodeActionProvider getBootJavaCodeActionProvider(JavaProjectFinder projectFinder, Collection<JavaCodeActionHandler> codeActionHandlers) {
|
||||
return new BootJavaCodeActionProvider(projectFinder, codeActionHandlers);
|
||||
}
|
||||
|
||||
@ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness")
|
||||
@Bean
|
||||
BootJavaProjectReconcilerScheduler bootJavaProjectReconcilerScheduler(SimpleLanguageServer server,
|
||||
BootJavaReconcileEngine bootJavaReconciler, ProjectObserver projectObserver, BootJavaConfig config,
|
||||
Optional<RewriteRecipeRepository> recipeRepoOpt, JavaProjectFinder projectFinder) {
|
||||
return new BootJavaProjectReconcilerScheduler(bootJavaReconciler,
|
||||
server.getWorkspaceService().getFileObserver(), projectObserver, config, recipeRepoOpt.orElse(null),
|
||||
server.getTextDocumentService(), projectFinder);
|
||||
}
|
||||
|
||||
@ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness")
|
||||
@Bean
|
||||
ProjectReconcileScheduler bootVersionValidationScheduler(SimpleLanguageServer server, JavaProjectFinder projectFinder, BootJavaConfig config, ProjectObserver projectObserver) {
|
||||
return new ProjectReconcileScheduler(new BootVersionValidationEngine(server, config, projectObserver, projectFinder), projectFinder) {
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
config.addListener(evt -> scheduleValidationForAllProjects());
|
||||
projectObserver.addListener(new ProjectObserver.Listener() {
|
||||
|
||||
@Override
|
||||
public void deleted(IJavaProject project) {
|
||||
unscheduleValidation(project);
|
||||
clear(project, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void created(IJavaProject project) {
|
||||
scheduleValidation(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changed(IJavaProject project) {
|
||||
scheduleValidation(project);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.app;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@@ -19,7 +18,6 @@ import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.ide.vscode.boot.common.IJavaProjectReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.common.ProjectReconcileScheduler;
|
||||
import org.springframework.ide.vscode.boot.factories.SpringFactoriesLanguageServerComponents;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
|
||||
@@ -31,7 +29,6 @@ import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache;
|
||||
import org.springframework.ide.vscode.boot.java.utils.SymbolCache;
|
||||
import org.springframework.ide.vscode.boot.metadata.ProjectBasedPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.boot.properties.BootPropertiesLanguageServerComponents;
|
||||
import org.springframework.ide.vscode.boot.validation.BootVersionValidationEngine;
|
||||
import org.springframework.ide.vscode.boot.xml.SpringXMLLanguageServerComponents;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.CompositeCompletionEngine;
|
||||
@@ -72,6 +69,7 @@ public class BootLanguageServerInitializer implements InitializingBean {
|
||||
@Autowired private JavaProjectFinder projectFinder;
|
||||
@Autowired private LanguageServerProperties configProps;
|
||||
@Autowired(required = false) private RewriteRecipeRepository recipesRepo;
|
||||
@Autowired(required = false) private ProjectReconcileScheduler[] reconcileSchedulers;
|
||||
|
||||
@Qualifier("adHocProperties") @Autowired ProjectBasedPropertyIndexProvider adHocProperties;
|
||||
|
||||
@@ -123,27 +121,16 @@ public class BootLanguageServerInitializer implements InitializingBean {
|
||||
new SpringFactoriesLanguageServerComponents(projectFinder, springIndexer, config)
|
||||
);
|
||||
|
||||
List<ProjectReconcileScheduler> reconcileSchedulers = new ArrayList<>(componentsList.size() + 1);
|
||||
for (LanguageServerComponents c : componentsList) {
|
||||
builder.add(c);
|
||||
|
||||
if (!configProps.isReconcileOnlyOpenedDocs()) {
|
||||
c.getReconcileEngine()
|
||||
.filter(IJavaProjectReconcileEngine.class::isInstance)
|
||||
.map(IJavaProjectReconcileEngine.class::cast)
|
||||
.map(r -> r.getScheduler())
|
||||
.ifPresent(reconcileSchedulers::add);
|
||||
}
|
||||
builder.add(c);
|
||||
}
|
||||
|
||||
// Version reconciler is for Maven/Gradle build files which are not part of
|
||||
// server components because they come from docs we don't support at the moment
|
||||
reconcileSchedulers.add(new BootVersionValidationEngine(server, config, params.projectObserver, projectFinder).getScheduler());
|
||||
|
||||
// Kick off project reconcile schedulers
|
||||
for (ProjectReconcileScheduler scheduler : reconcileSchedulers) {
|
||||
scheduler.start();
|
||||
server.onShutdown(() -> scheduler.stop());
|
||||
if (reconcileSchedulers != null && !configProps.isReconcileOnlyOpenedDocs()) {
|
||||
// Kick off project reconcile schedulers
|
||||
for (ProjectReconcileScheduler scheduler : reconcileSchedulers) {
|
||||
scheduler.start();
|
||||
server.onShutdown(() -> scheduler.stop());
|
||||
}
|
||||
}
|
||||
|
||||
components = builder.build(server);
|
||||
|
||||
@@ -18,6 +18,4 @@ public interface IJavaProjectReconcileEngine {
|
||||
|
||||
void clear(IJavaProject project);
|
||||
|
||||
ProjectReconcileScheduler getScheduler();
|
||||
|
||||
}
|
||||
|
||||
@@ -24,15 +24,11 @@ import java.util.stream.Stream;
|
||||
import org.eclipse.lsp4j.TextDocumentIdentifier;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ide.vscode.boot.app.BootJavaConfig;
|
||||
import org.springframework.ide.vscode.boot.common.IJavaProjectReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.common.ProjectReconcileScheduler;
|
||||
import org.springframework.ide.vscode.boot.java.reconcilers.JavaReconciler;
|
||||
import org.springframework.ide.vscode.boot.java.rewrite.RewriteRecipeRepository;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspathUtil;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
|
||||
@@ -52,24 +48,13 @@ public class BootJavaReconcileEngine implements IReconcileEngine, IJavaProjectRe
|
||||
|
||||
private final JavaProjectFinder projectFinder;
|
||||
private final JavaReconciler[] javaReconcilers;
|
||||
private final BootJavaProjectReconcilerScheduler projectReconeilerScheduler;
|
||||
private final SimpleLanguageServer server;
|
||||
|
||||
public BootJavaReconcileEngine(JavaProjectFinder projectFinder, JavaReconciler[] javaReconcilers,
|
||||
SimpleLanguageServer server, BootJavaConfig config, ProjectObserver projectObserver,
|
||||
RewriteRecipeRepository recipeRepo) {
|
||||
SimpleLanguageServer server) {
|
||||
this.projectFinder = projectFinder;
|
||||
this.javaReconcilers = javaReconcilers;
|
||||
this.server = server;
|
||||
this.projectReconeilerScheduler = new BootJavaProjectReconcilerScheduler(
|
||||
this,
|
||||
server.getWorkspaceService().getFileObserver(),
|
||||
projectObserver,
|
||||
config,
|
||||
recipeRepo,
|
||||
server.getTextDocumentService(),
|
||||
projectFinder
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -181,9 +166,4 @@ public class BootJavaReconcileEngine implements IReconcileEngine, IJavaProjectRe
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectReconcileScheduler getScheduler() {
|
||||
return projectReconeilerScheduler;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ide.vscode.boot.app.BootJavaConfig;
|
||||
import org.springframework.ide.vscode.boot.common.IJavaProjectReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.common.ProjectReconcileScheduler;
|
||||
import org.springframework.ide.vscode.boot.validation.generations.ProjectVersionDiagnosticProvider;
|
||||
import org.springframework.ide.vscode.boot.validation.generations.ProjectVersionDiagnosticProvider.DiagnosticResult;
|
||||
import org.springframework.ide.vscode.boot.validation.generations.SpringIoProjectsProvider;
|
||||
@@ -36,38 +35,10 @@ public class BootVersionValidationEngine implements IJavaProjectReconcileEngine
|
||||
|
||||
private SimpleLanguageServer server;
|
||||
private BootJavaConfig config;
|
||||
private ProjectReconcileScheduler projectReconcileScheduler;
|
||||
|
||||
public BootVersionValidationEngine(SimpleLanguageServer server, BootJavaConfig config, ProjectObserver projectObserver, JavaProjectFinder projectFinder) {
|
||||
this.server = server;
|
||||
this.config = config;
|
||||
this.projectReconcileScheduler = new ProjectReconcileScheduler(this, projectFinder) {
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
config.addListener(evt -> scheduleValidationForAllProjects());
|
||||
projectObserver.addListener(new ProjectObserver.Listener() {
|
||||
|
||||
@Override
|
||||
public void deleted(IJavaProject project) {
|
||||
unscheduleValidation(project);
|
||||
clear(project, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void created(IJavaProject project) {
|
||||
scheduleValidation(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changed(IJavaProject project) {
|
||||
scheduleValidation(project);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
public void reconcile(IJavaProject project) {
|
||||
@@ -115,8 +86,4 @@ public class BootVersionValidationEngine implements IJavaProjectReconcileEngine
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectReconcileScheduler getScheduler() {
|
||||
return projectReconcileScheduler;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,6 @@ public class ValueSpelExpressionValidationTest {
|
||||
@Autowired private CompilationUnitCache compilationUnitCache;
|
||||
@Autowired private SimpleLanguageServer server;
|
||||
@Autowired private BootJavaConfig config;
|
||||
@Autowired private ProjectObserver projectObserver;
|
||||
|
||||
private File directory;
|
||||
private String docUri;
|
||||
@@ -150,7 +149,7 @@ public class ValueSpelExpressionValidationTest {
|
||||
problemCollector = new TestProblemCollector();
|
||||
reconcileEngine = new BootJavaReconcileEngine(projectFinder, new JavaReconciler[] {
|
||||
new JdtReconciler(compilationUnitCache, config)
|
||||
}, server, config, projectObserver, null);
|
||||
}, server);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
|
||||
Reference in New Issue
Block a user