From ae43ae98d02bf72c291fb9f4d144bda75ffe3aa8 Mon Sep 17 00:00:00 2001 From: aboyko Date: Tue, 6 Dec 2022 14:58:26 -0500 Subject: [PATCH] ON/OFF support for auto-config reconciling in factories file --- .../app/BootLanguageServerInitializer.java | 2 +- ...ringFactoriesLanguageServerComponents.java | 5 ++- .../SpringFactoriesReconcileEngine.java | 38 ++++++++++--------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java index c7dd041ea..563507c19 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java @@ -137,7 +137,7 @@ public class BootLanguageServerInitializer implements InitializingBean { BootJavaLanguageServerComponents bootJavaLanguageServerComponent = new BootJavaLanguageServerComponents(appContext); builder.add(bootJavaLanguageServerComponent); builder.add(new SpringXMLLanguageServerComponents(server, springIndexer, params, config)); - builder.add(new SpringFactoriesLanguageServerComponents(projectFinder, springIndexer)); + builder.add(new SpringFactoriesLanguageServerComponents(projectFinder, springIndexer, config)); components = builder.build(server); projectReconciler = (IJavaProjectReconcileEngine) bootJavaLanguageServerComponent.getReconcileEngine().get(); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java index 21b7bee84..92a63fb40 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java @@ -13,6 +13,7 @@ package org.springframework.ide.vscode.boot.factories; import java.util.Optional; import java.util.Set; +import org.springframework.ide.vscode.boot.app.BootJavaConfig; import org.springframework.ide.vscode.boot.app.SpringSymbolIndex; import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; @@ -26,9 +27,9 @@ public class SpringFactoriesLanguageServerComponents implements LanguageServerCo private SpringFactoriesReconcileEngine reconciler; private SpringSymbolIndex springIndex; - public SpringFactoriesLanguageServerComponents(JavaProjectFinder projectFinder, SpringSymbolIndex springIndex) { + public SpringFactoriesLanguageServerComponents(JavaProjectFinder projectFinder, SpringSymbolIndex springIndex, BootJavaConfig config) { this.springIndex = springIndex; - reconciler = new SpringFactoriesReconcileEngine(projectFinder); + reconciler = new SpringFactoriesReconcileEngine(projectFinder, config); } @Override diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesReconcileEngine.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesReconcileEngine.java index 5c223330a..02fdc3d6e 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesReconcileEngine.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesReconcileEngine.java @@ -1,5 +1,3 @@ -package org.springframework.ide.vscode.boot.factories; - /******************************************************************************* * Copyright (c) 2022 VMware, Inc. * All rights reserved. This program and the accompanying materials @@ -10,15 +8,19 @@ package org.springframework.ide.vscode.boot.factories; * Contributors: * VMware, Inc. - initial API and implementation *******************************************************************************/ +package org.springframework.ide.vscode.boot.factories; + import java.util.Map; import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.springframework.ide.vscode.boot.app.BootJavaConfig; import org.springframework.ide.vscode.boot.java.Boot3JavaProblemType; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.SpringProjectUtil; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; 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.ProblemCategory.Toggle.Option; import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblemImpl; import org.springframework.ide.vscode.commons.util.text.IDocument; import org.springframework.ide.vscode.java.properties.antlr.parser.AntlrParser; @@ -33,23 +35,25 @@ public class SpringFactoriesReconcileEngine implements IReconcileEngine { } private final JavaProjectFinder projectFinder; - private AntlrParser parser = new AntlrParser(); - - private final Map keyValuePairReconcilers = Map.of( - "org.springframework.boot.autoconfigure.EnableAutoConfiguration", (project, pair, problemCollector) -> { - if (SpringProjectUtil.springBootVersionGreaterOrEqual(3, 0, 0).test(project)) { - ReconcileProblemImpl problem = new ReconcileProblemImpl( - Boot3JavaProblemType.FACTORIES_KEY_NOT_SUPPORTED, - "Key is not supported as of Spring Boot 3. See Boot 3 documentation topic \"Locating Auto-configuration Candidates\"", - pair.getOffset(), - pair.getLength()); - problemCollector.accept(problem); - } - } - ); + private final AntlrParser parser = new AntlrParser(); + private final Map keyValuePairReconcilers; - public SpringFactoriesReconcileEngine(JavaProjectFinder projectFinder) { + public SpringFactoriesReconcileEngine(JavaProjectFinder projectFinder, BootJavaConfig config) { this.projectFinder = projectFinder; + + keyValuePairReconcilers = Map.of( + "org.springframework.boot.autoconfigure.EnableAutoConfiguration", (project, pair, problemCollector) -> { + Option applicability = config.getProblemApplicability(Boot3JavaProblemType.FACTORIES_KEY_NOT_SUPPORTED); + if (applicability == Option.ON || (applicability == Option.AUTO && SpringProjectUtil.springBootVersionGreaterOrEqual(3, 0, 0).test(project))) { + ReconcileProblemImpl problem = new ReconcileProblemImpl( + Boot3JavaProblemType.FACTORIES_KEY_NOT_SUPPORTED, + "Key is not supported as of Spring Boot 3. See Boot 3 documentation topic \"Locating Auto-configuration Candidates\"", + pair.getOffset(), + pair.getLength()); + problemCollector.accept(problem); + } + } + ); } @Override