From d2d6de5123bc976da6d62b3f1ba310cf684259ba Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Mon, 5 Oct 2020 11:18:33 -0700 Subject: [PATCH] Preference page for boot-ls Java problem severities --- .../plugin.xml | 6 ++ .../SpringJavaProblemSeverityPrefsPage.java | 32 +++++++++ .../boot/java/SpringJavaProblemType.java | 69 +++++++++++++++++++ .../handlers/BootJavaCompletionEngine.java | 1 - .../handlers/SpelExpressionReconciler.java | 3 +- ...opertiesCompletionProposalsCalculator.java | 2 - .../src/main/resources/problem-types.json | 8 +++ .../boot/test/ProblemTypesMetadataTest.java | 2 + .../vscode/boot/test/ProblemTypesToJson.java | 2 + 9 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/SpringJavaProblemSeverityPrefsPage.java create mode 100644 headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/SpringJavaProblemType.java diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml b/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml index 2f1e5a832..4166d63e2 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/plugin.xml @@ -143,6 +143,12 @@ class="org.springframework.tooling.boot.ls.prefs.ApplicationYamlEditorProblemSeverityPrefsPage" id="org.springframework.tooling.boot.ls.prefs.ApplicationYamlEditorProblemSeverityPrefsPage"> + + diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/SpringJavaProblemSeverityPrefsPage.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/SpringJavaProblemSeverityPrefsPage.java new file mode 100644 index 000000000..a98da96a7 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/SpringJavaProblemSeverityPrefsPage.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2020 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.boot.ls.prefs; + +import java.io.IOException; + +import org.springframework.ide.eclipse.editor.support.preferences.ProblemSeverityPreferencesUtil; +import org.springframework.ide.eclipse.editor.support.preferences.ProblemSeverityPreferityPageFromMetadata; +import org.springframework.tooling.boot.ls.BootLanguageServerPlugin; + +public class SpringJavaProblemSeverityPrefsPage extends ProblemSeverityPreferityPageFromMetadata { + + public static final ProblemSeverityPreferencesUtil util = new ProblemSeverityPreferencesUtil("problem.java."); + + public SpringJavaProblemSeverityPrefsPage() throws IOException { + super(util, LanguageServerProblemTypesMetadata.load().get("java")); + } + + @Override + protected String getPluginId() { + return BootLanguageServerPlugin.PLUGIN_ID; + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/SpringJavaProblemType.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/SpringJavaProblemType.java new file mode 100644 index 000000000..36dd8cba2 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/SpringJavaProblemType.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2020 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java; + +import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity; +import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType; +import org.springframework.ide.vscode.commons.util.Assert; + +import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.ERROR;; + +/** + * This enum is supposed to represent *all* the different types of problems SpringBoot language server + * may detect in Java code. + */ +public enum SpringJavaProblemType implements ProblemType { + + JAVA_SPEL_EXPRESSION_SYNTAX(ERROR, "SpEL parser raised a ParseException", "SpEL Expression Syntax"); + + private final ProblemSeverity defaultSeverity; + private String description; + private String label; + + private SpringJavaProblemType(ProblemSeverity defaultSeverity, String description) { + this(defaultSeverity, description, null); + } + + private SpringJavaProblemType(ProblemSeverity defaultSeverity, String description, String label) { + this.description = description; + this.defaultSeverity = defaultSeverity; + this.label = label; + Assert.isLegal(name().startsWith("JAVA_")); + } + + @Override + public ProblemSeverity getDefaultSeverity() { + return defaultSeverity; + } + + public String getLabel() { + if (label==null) { + label = createDefaultLabel(); + } + return label; + } + + @Override + public String getDescription() { + return description; + } + + private String createDefaultLabel() { + String label = this.toString().substring(5).toLowerCase().replace('_', ' '); + return Character.toUpperCase(label.charAt(0)) + label.substring(1); + } + + @Override + public String getCode() { + return name(); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java index 4d66d003a..ce68095c5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaCompletionEngine.java @@ -19,7 +19,6 @@ import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.NodeFinder; -import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetManager; import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SpelExpressionReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SpelExpressionReconciler.java index 5e4f6d638..f9f998236 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SpelExpressionReconciler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SpelExpressionReconciler.java @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot.java.handlers; import org.springframework.expression.ParseException; import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.ide.vscode.boot.java.SpringJavaProblemType; import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector; import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity; import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemTypes; @@ -57,7 +58,7 @@ public class SpelExpressionReconciler implements Reconciler { private void createProblem(String spelExpression, String message, int startPosition, int position, IProblemCollector problemCollector) { int start = startPosition + position; int length = spelExpression.length() - position; - ReconcileProblem problem = new ReconcileProblemImpl(ProblemTypes.create("SpEL Expression Problem", ProblemSeverity.ERROR), message, start, length); + ReconcileProblem problem = new ReconcileProblemImpl(SpringJavaProblemType.JAVA_SPEL_EXPRESSION_SYNTAX, message, start, length); problemCollector.accept(problem); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java index b1f94de53..2a8937466 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java @@ -42,14 +42,12 @@ import org.springframework.ide.vscode.boot.properties.reconcile.PropertyNavigato import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; import org.springframework.ide.vscode.commons.languageserver.completion.LazyProposalApplier; -import org.springframework.ide.vscode.commons.languageserver.completion.TransformedCompletion; import org.springframework.ide.vscode.commons.languageserver.util.PrefixFinder; import org.springframework.ide.vscode.commons.util.BadLocationException; import org.springframework.ide.vscode.commons.util.CollectionUtil; import org.springframework.ide.vscode.commons.util.FuzzyMap; import org.springframework.ide.vscode.commons.util.FuzzyMap.Match; import org.springframework.ide.vscode.commons.util.FuzzyMatcher; -import org.springframework.ide.vscode.commons.util.Streams; import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.commons.util.text.DocumentRegion; import org.springframework.ide.vscode.commons.util.text.IDocument; diff --git a/headless-services/spring-boot-language-server/src/main/resources/problem-types.json b/headless-services/spring-boot-language-server/src/main/resources/problem-types.json index 61908a5e0..8657db6d3 100644 --- a/headless-services/spring-boot-language-server/src/main/resources/problem-types.json +++ b/headless-services/spring-boot-language-server/src/main/resources/problem-types.json @@ -1,4 +1,12 @@ { + "java": [ + { + "code": "JAVA_SPEL_EXPRESSION_SYNTAX", + "label": "SpEL Expression Syntax", + "description": "SpEL parser raised a ParseException", + "defaultSeverity": "ERROR" + } + ], "application-yaml": [ { "code": "YAML_SYNTAX_ERROR", diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesMetadataTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesMetadataTest.java index 9dd02d008..9a721589f 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesMetadataTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesMetadataTest.java @@ -11,6 +11,7 @@ package org.springframework.ide.vscode.boot.test; import org.junit.jupiter.api.Test; +import org.springframework.ide.vscode.boot.java.SpringJavaProblemType; import org.springframework.ide.vscode.boot.properties.reconcile.ApplicationPropertiesProblemType; import org.springframework.ide.vscode.boot.yaml.reconcile.ApplicationYamlProblemType; @@ -24,6 +25,7 @@ public class ProblemTypesMetadataTest { ProblemTypesToJson reader = new ProblemTypesToJson().read(); reader.validate("application-properties", ApplicationPropertiesProblemType.values()); reader.validate("application-yaml", ApplicationYamlProblemType.values()); + reader.validate("java", SpringJavaProblemType.values()); } } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesToJson.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesToJson.java index 5113f19c5..f296edf89 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesToJson.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ProblemTypesToJson.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.io.FileUtils; +import org.springframework.ide.vscode.boot.java.SpringJavaProblemType; import org.springframework.ide.vscode.boot.properties.reconcile.ApplicationPropertiesProblemType; import org.springframework.ide.vscode.boot.yaml.reconcile.ApplicationYamlProblemType; import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType; @@ -99,6 +100,7 @@ public class ProblemTypesToJson { ProblemTypesToJson writer = new ProblemTypesToJson(); writer.problemsFor("application-yaml", ApplicationYamlProblemType.values()); writer.problemsFor("application-properties", ApplicationPropertiesProblemType.values()); + writer.problemsFor("java", SpringJavaProblemType.values()); writer.dump(); }