From 914a03891047486ae76ff7d6c274b15ce5c7309d Mon Sep 17 00:00:00 2001 From: aboyko Date: Wed, 25 Jan 2023 20:01:27 -0500 Subject: [PATCH] Java Reconcilers as beans --- .../boot/app/BootLanguageServerBootApp.java | 5 +++++ .../ide/vscode/boot/app/RewriteConfig.java | 11 ++++++++++ .../BootJavaLanguageServerComponents.java | 20 +++---------------- .../boot/java/reconcilers/JdtReconciler.java | 3 ++- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java index 455c20655..a2bc78570 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java @@ -48,6 +48,7 @@ import org.springframework.ide.vscode.boot.java.links.SourceLinkFactory; import org.springframework.ide.vscode.boot.java.links.SourceLinks; import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessConnectorRemote; import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessConnectorRemote.RemoteBootAppData; +import org.springframework.ide.vscode.boot.java.reconcilers.JdtReconciler; import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessConnectorService; import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessLiveDataProvider; import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache; @@ -221,6 +222,10 @@ public class BootLanguageServerBootApp { @Bean CompilationUnitCache cuCache(SimpleLanguageServer server, BootLanguageServerParams params) { return new CompilationUnitCache(params.projectFinder, server, params.projectObserver); } + + @Bean JdtReconciler jdtReconciler(CompilationUnitCache cuCache, BootJavaConfig config) { + return new JdtReconciler(cuCache, config); + } @Bean SpringXMLCompletionEngine xmlCompletionEngine(SimpleLanguageServer server, JavaProjectFinder projectFinder, SpringSymbolIndex symbolIndex, BootJavaConfig config) { return new SpringXMLCompletionEngine(server, projectFinder, symbolIndex, config); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/RewriteConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/RewriteConfig.java index da24986bc..838017ff0 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/RewriteConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/RewriteConfig.java @@ -17,6 +17,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.ide.vscode.boot.java.rewrite.RewriteCodeActionHandler; import org.springframework.ide.vscode.boot.java.rewrite.RewriteCompilationUnitCache; import org.springframework.ide.vscode.boot.java.rewrite.RewriteRecipeRepository; +import org.springframework.ide.vscode.boot.java.rewrite.RewriteReconciler; import org.springframework.ide.vscode.boot.java.rewrite.RewriteRefactorings; import org.springframework.ide.vscode.boot.java.rewrite.SpringBootUpgrade; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; @@ -50,4 +51,14 @@ public class RewriteConfig { return new SpringBootUpgrade(server, recipeRepo, projectFinder); } + @ConditionalOnBean(RewriteRecipeRepository.class) + @Bean RewriteReconciler rewriteJavaReconciler(RewriteRecipeRepository recipeRepo, RewriteCompilationUnitCache cuCache, SimpleLanguageServer server, BootJavaConfig config) { + return new RewriteReconciler( + recipeRepo, + cuCache, + server.getQuickfixRegistry(), + config + ); + } + } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index 9c035eae4..1364f7499 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -188,24 +188,12 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent highlightsEngine = createDocumentHighlightEngine(indexer); documents.onDocumentHighlight(highlightsEngine); - List javaReconcilers = new ArrayList<>(); - JdtReconciler jdtReconciler = new JdtReconciler(cuCache, config); - javaReconcilers.add(jdtReconciler); - - Map rewriteCuCacheBeans = appContext.getBeansOfType(RewriteCompilationUnitCache.class); - RewriteCompilationUnitCache orCompilationUnitCache = rewriteCuCacheBeans.isEmpty() ? null : rewriteCuCacheBeans.values().iterator().next(); Map recipeRepoBeans = appContext.getBeansOfType(RewriteRecipeRepository.class); RewriteRecipeRepository recipeRepo = recipeRepoBeans.isEmpty() ? null : recipeRepoBeans.values().iterator().next(); - if (recipeRepo != null && orCompilationUnitCache != null) { - javaReconcilers.add(new RewriteReconciler( - recipeRepo, - orCompilationUnitCache, - server.getQuickfixRegistry(), - config - )); - } - reconcileEngine = new BootJavaReconcileEngine(projectFinder, javaReconcilers.toArray(new JavaReconciler[javaReconcilers.size()]), server, config, projectObserver, recipeRepo); + reconcileEngine = new BootJavaReconcileEngine(projectFinder, + appContext.getBeansOfType(JavaReconciler.class).values().toArray(new JavaReconciler[0]), + server, config, projectObserver, recipeRepo); codeActionProvider = new BootJavaCodeActionProvider( projectFinder, @@ -230,8 +218,6 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent liveChangeDetectionWatchdog.disableHighlights(); } - jdtReconciler.setSpelExpressionSyntaxValidationEnabled(config.isSpelExpressionValidationEnabled()); - log.info("update live process tracker settings - done"); }); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/JdtReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/JdtReconciler.java index cda52bdb4..10987c72b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/JdtReconciler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/JdtReconciler.java @@ -60,7 +60,8 @@ public class JdtReconciler implements JavaReconciler { public JdtReconciler(CompilationUnitCache compilationUnitCache, BootJavaConfig config) { this.compilationUnitCache = compilationUnitCache; - this.config = config; + this.config = config; + config.addListener(evt -> setSpelExpressionSyntaxValidationEnabled(config.isSpelExpressionValidationEnabled())); this.spelExpressionReconciler = new SpelExpressionReconciler(); this.reconcilers = new AnnotationReconciler[] {