Ignored problem marker + quick fix becomes CodeAction.

This commit is contained in:
aboyko
2022-10-21 17:31:16 -04:00
parent 0fb7e7daca
commit 6c9543c174
25 changed files with 120 additions and 104 deletions

View File

@@ -32,10 +32,15 @@ public interface DiagnosticSeverityProvider {
}
}
DiagnosticSeverity getDiagnosticSeverity(ReconcileProblem problem);
DiagnosticSeverity getDiagnosticSeverity(ProblemType problem);
default DiagnosticSeverity getDiagnosticSeverity(ReconcileProblem problem) {
return getDiagnosticSeverity(problem.getType());
}
static final DiagnosticSeverityProvider DEFAULT = (problem) -> {
ProblemSeverity severity = problem.getType().getDefaultSeverity();
ProblemSeverity severity = problem.getDefaultSeverity();
return diagnosticSeverity(severity);
};
}

View File

@@ -753,7 +753,7 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
@Override
public void accept(ReconcileProblem problem) {
try {
DiagnosticSeverity severity = getDiagnosticSeverity(problem);
DiagnosticSeverity severity = severityProvider.getDiagnosticSeverity(problem);
if (severity!=null) {
Diagnostic d = new Diagnostic();
d.setCode(problem.getCode());
@@ -788,10 +788,6 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
};
}
public DiagnosticSeverity getDiagnosticSeverity(ReconcileProblem problem) {
return severityProvider.getDiagnosticSeverity(problem);
}
/**
* If reconciling is in progress, waits until reconciling has caught up to
* all the document changes.
@@ -824,6 +820,10 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
public DiagnosticService getDiagnosticService() {
return diagnosticService;
}
public DiagnosticSeverityProvider getDiagnosticSeverityProvider() {
return severityProvider;
}
@Override
public SimpleLanguageServer getServer() {

View File

@@ -27,11 +27,10 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemTy
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemTypes;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class HelloMethodRenameProblemDescriptor implements RecipeSpringJavaProblemDescriptor {
public class HelloMethodRenameProblemDescriptor implements RecipeCodeActionDescriptor {
private static final String LABEL = "Switch hello method into bye";
private static final String RECIPE_ID = "org.springframework.rewrite.test.HelloMethodRenameRecipe";

View File

@@ -10,22 +10,15 @@
*******************************************************************************/
package org.springframework.rewrite.test;
import java.util.Collections;
import java.util.List;
import org.springframework.ide.vscode.commons.rewrite.config.CodeActionRepository;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
public class StsTestCodeActionRepo extends CodeActionRepository {
@Override
public List<RecipeCodeActionDescriptor> getCodeActionDescriptors() {
return Collections.emptyList();
}
@Override
public List<RecipeSpringJavaProblemDescriptor> getProblemDescriptors() {
return List.of(new HelloMethodRenameProblemDescriptor());
}

View File

@@ -16,6 +16,4 @@ public abstract class CodeActionRepository {
public abstract List<RecipeCodeActionDescriptor> getCodeActionDescriptors();
public abstract List<RecipeSpringJavaProblemDescriptor> getProblemDescriptors();
}

View File

@@ -14,6 +14,7 @@ import org.openrewrite.ExecutionContext;
import org.openrewrite.java.JavaVisitor;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
public interface RecipeCodeActionDescriptor {
@@ -24,6 +25,10 @@ public interface RecipeCodeActionDescriptor {
JavaVisitor<ExecutionContext> getMarkerVisitor(ApplicationContext applicationContext);
boolean isApplicable(IJavaProject project);
default ProblemType getProblemType() {
return null;
}
static String buildLabel(String label, RecipeScope s) {
switch (s) {

View File

@@ -1,19 +0,0 @@
/*******************************************************************************
* Copyright (c) 2022 VMware, 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:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.commons.rewrite.config;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
public interface RecipeSpringJavaProblemDescriptor extends RecipeCodeActionDescriptor {
ProblemType getProblemType();
}

View File

@@ -77,10 +77,6 @@ public class StsEnvironment extends Environment {
return codeActionRepos.get().flatMap(r -> r.getCodeActionDescriptors().stream()).collect(Collectors.toList());
}
public List<RecipeSpringJavaProblemDescriptor> listProblemDescriptors() {
return codeActionRepos.get().flatMap(r -> r.getProblemDescriptors().stream()).collect(Collectors.toList());
}
public static Builder builder() {
return new Builder(new Properties());
}

View File

@@ -13,7 +13,6 @@ package org.springframework.ide.vscode.concourse;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.springframework.ide.vscode.commons.languageserver.reconcile.DiagnosticSeverityProvider;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems;
import org.springframework.stereotype.Component;
@@ -21,12 +20,11 @@ import org.springframework.stereotype.Component;
public class ConcourseDiagnosticSeverities implements DiagnosticSeverityProvider {
@Override
public DiagnosticSeverity getDiagnosticSeverity(ReconcileProblem problem) {
ProblemType type = problem.getType();
public DiagnosticSeverity getDiagnosticSeverity(ProblemType type) {
if (YamlSchemaProblems.PROPERTY_CONSTRAINT.contains(type)) {
return DiagnosticSeverity.Warning;
}
return DEFAULT.getDiagnosticSeverity(problem);
return DEFAULT.getDiagnosticSeverity(type);
}
}

View File

@@ -17,7 +17,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ide.vscode.commons.languageserver.reconcile.DiagnosticSeverityProvider;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.languageserver.util.Settings;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.ide.vscode.commons.util.Assert;
@@ -51,10 +51,10 @@ public class ProblemSeverityConfigurer implements InitializingBean {
severityOverrides.put(code, ProblemSeverity.valueOf(severity));
}
}
server.setDiagnosticSeverityProvider((ReconcileProblem problem) -> {
ProblemSeverity severity = severityOverrides.get(problem.getType().getCode());
server.setDiagnosticSeverityProvider((ProblemType problem) -> {
ProblemSeverity severity = severityOverrides.get(problem.getCode());
if (severity==null) {
severity = problem.getType().getDefaultSeverity();
severity = problem.getDefaultSeverity();
}
return DiagnosticSeverityProvider.diagnosticSeverity(severity);
});

View File

@@ -10,6 +10,7 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot.java;
import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.IGNORE;
import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.HINT;
import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.WARNING;
@@ -24,7 +25,11 @@ public enum Boot2JavaProblemType implements ProblemType {
JAVA_PUBLIC_BEAN_METHOD(HINT, "Public modifier on `@Bean` method. They no longer have to be public visibility to be usable by Spring.", "public `@Bean` method"),
JAVA_TEST_SPRING_EXTENSION(WARNING, "`@SpringBootTest` and all test slice annotations already applies `@SpringExtension` as of Spring Boot 2.1.0.", "Unnecessary `@SpringExtension`");
JAVA_TEST_SPRING_EXTENSION(WARNING, "`@SpringBootTest` and all test slice annotations already applies `@SpringExtension` as of Spring Boot 2.1.0.", "Unnecessary `@SpringExtension`"),
JAVA_CONSTRUCTOR_PARAMETER_INJECTION(IGNORE, "Use constrcutor parameter injection", "Use constrcutor parameter injection"),
JAVA_PRECISE_REQUEST_MAPPING(HINT, "Use precise mapping annotation, i.e. '@GetMapping', '@PostMapping', etc.", "Use precise mapping annotation, i.e. '@GetMapping', '@PostMapping', etc.");
private final ProblemSeverity defaultSeverity;
private String description;

View File

@@ -12,31 +12,22 @@ package org.springframework.ide.vscode.boot.java.rewrite;
import java.util.List;
import org.springframework.ide.vscode.boot.java.rewrite.codeaction.AutowiredFieldIntoConstructorParameterCodeAction;
import org.springframework.ide.vscode.boot.java.rewrite.codeaction.NoRequestMappingAnnotationCodeAction;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.AutowiredFieldIntoConstructorParameterCodeAction;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.BeanMethodNotPublicProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.BeanPostProcessingIgnoreInAotProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.Boot3NotSupportedTypeProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.NoAutowiredOnConstructorProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.NoRequestMappingAnnotationCodeAction;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.NotRegisteredBeansProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.PreciseBeanTypeProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.UnnecessarySpringExtensionProblem;
import org.springframework.ide.vscode.commons.rewrite.config.CodeActionRepository;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
public class BootCodeActionRepository extends CodeActionRepository {
@Override
public List<RecipeCodeActionDescriptor> getCodeActionDescriptors() {
return List.of(
new AutowiredFieldIntoConstructorParameterCodeAction(),
new NoRequestMappingAnnotationCodeAction()
);
}
@Override
public List<RecipeSpringJavaProblemDescriptor> getProblemDescriptors() {
return List.of(
new BeanMethodNotPublicProblem(),
new NoAutowiredOnConstructorProblem(),
@@ -44,7 +35,9 @@ public class BootCodeActionRepository extends CodeActionRepository {
new PreciseBeanTypeProblem(),
new BeanPostProcessingIgnoreInAotProblem(),
new NotRegisteredBeansProblem(),
new Boot3NotSupportedTypeProblem()
new Boot3NotSupportedTypeProblem(),
new NoRequestMappingAnnotationCodeAction(),
new AutowiredFieldIntoConstructorParameterCodeAction()
);
}

View File

@@ -70,7 +70,6 @@ import org.springframework.ide.vscode.commons.rewrite.LoadUtils;
import org.springframework.ide.vscode.commons.rewrite.LoadUtils.DurationTypeConverter;
import org.springframework.ide.vscode.commons.rewrite.ORDocUtils;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.StsEnvironment;
import org.springframework.ide.vscode.commons.rewrite.maven.MavenProjectParser;
@@ -99,8 +98,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
final private List<RecipeCodeActionDescriptor> codeActionDescriptors;
final private List<RecipeSpringJavaProblemDescriptor> javaProblemDescriptors;
final private ListenerList<Void> loadListeners;
private ApplicationContext applicationContext;
@@ -121,7 +118,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
this.recipes = new HashMap<>();
this.globalCommandRecipes = new ArrayList<>();
this.codeActionDescriptors = new ArrayList<>();
this.javaProblemDescriptors = new ArrayList<>();
this.loadListeners = new ListenerList<>();
server.doOnInitialized(() -> {
@@ -159,7 +155,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
recipes.clear();
globalCommandRecipes.clear();
codeActionDescriptors.clear();
javaProblemDescriptors.clear();
}
private synchronized void loadRecipes() {
@@ -180,7 +175,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
}
}
}
javaProblemDescriptors.addAll(env.listProblemDescriptors());
codeActionDescriptors.addAll(env.listCodeActionDescriptors());
log.info("Done loading Rewrite Recipes");
} catch (Throwable t) {
@@ -264,15 +258,6 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
return Optional.ofNullable(recipes.get(name));
}
public RecipeSpringJavaProblemDescriptor getProblemRecipeDescriptor(String id) {
for (RecipeSpringJavaProblemDescriptor d : javaProblemDescriptors) {
if (id.equals(d.getId())) {
return d;
}
}
return null;
}
public RecipeCodeActionDescriptor getCodeActionRecipeDescriptor(String id) {
for (RecipeCodeActionDescriptor d : codeActionDescriptors) {
if (id.equals(d.getId())) {
@@ -282,12 +267,24 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
return null;
}
public List<RecipeSpringJavaProblemDescriptor> getProblemRecipeDescriptors() {
return javaProblemDescriptors;
public List<RecipeCodeActionDescriptor> getProblemRecipeDescriptors() {
List<RecipeCodeActionDescriptor> l = new ArrayList<>(codeActionDescriptors.size());
for (RecipeCodeActionDescriptor d : codeActionDescriptors) {
if (d.getProblemType() != null && server.getDiagnosticSeverityProvider().getDiagnosticSeverity(d.getProblemType()) != null) {
l.add(d);
}
}
return l;
}
public List<RecipeCodeActionDescriptor> getCodeActionRecipeDescriptors() {
return codeActionDescriptors;
List<RecipeCodeActionDescriptor> l = new ArrayList<>(codeActionDescriptors.size());
for (RecipeCodeActionDescriptor d : codeActionDescriptors) {
if (d.getProblemType() == null || server.getDiagnosticSeverityProvider().getDiagnosticSeverity(d.getProblemType()) == null) {
l.add(d);
}
}
return l;
}
public List<RecipeCodeActionDescriptor> getApplicableCodeActionRecipeDescriptors(IJavaProject project, List<RecipeCodeActionDescriptor> descriptors) {

View File

@@ -46,7 +46,7 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemC
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblemImpl;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.ORAstUtils;
@@ -81,7 +81,7 @@ public class RewriteReconciler implements JavaReconciler {
try {
problemCollector.beginCollecting();
List<RecipeSpringJavaProblemDescriptor> descriptors = getProblemRecipeDescriptors(project);
List<RecipeCodeActionDescriptor> descriptors = getProblemRecipeDescriptors(project);
if (!descriptors.isEmpty()) {
CompilationUnit cu = cuCache.getCU(project, URI.create(doc.getUri()));
@@ -104,7 +104,7 @@ public class RewriteReconciler implements JavaReconciler {
if (astNode != null) {
Range range = astNode.getMarkers().findFirst(Range.class).orElse(null);
if (range != null) {
RecipeSpringJavaProblemDescriptor recipeFixDescriptor = recipeRepo.getProblemRecipeDescriptor(m.getDescriptorId());
RecipeCodeActionDescriptor recipeFixDescriptor = recipeRepo.getCodeActionRecipeDescriptor(m.getDescriptorId());
if (recipeFixDescriptor != null) {
return List.of(createProblem(doc, recipeFixDescriptor, m, range));
}
@@ -113,7 +113,7 @@ public class RewriteReconciler implements JavaReconciler {
return Collections.emptyList();
}
private ReconcileProblemImpl createProblem(IDocument doc, RecipeSpringJavaProblemDescriptor recipeFixDescriptor,
private ReconcileProblemImpl createProblem(IDocument doc, RecipeCodeActionDescriptor recipeFixDescriptor,
FixAssistMarker m, Range range) {
ProblemType problemType = recipeFixDescriptor.getProblemType();
ReconcileProblemImpl problem = new ReconcileProblemImpl(problemType, m.getLabel() == null ? problemType.getLabel() : m.getLabel(), range.getStart().getOffset(), range.getEnd().getOffset() - range.getStart().getOffset());
@@ -139,7 +139,7 @@ public class RewriteReconciler implements JavaReconciler {
if (config.isRewriteReconcileEnabled()) {
try {
List<RecipeSpringJavaProblemDescriptor> descriptors = getProblemRecipeDescriptors(project);
List<RecipeCodeActionDescriptor> descriptors = getProblemRecipeDescriptors(project);
JavaParser javaParser = ORAstUtils.createJavaParser(project);
if (javaParser != null) {
@@ -170,7 +170,7 @@ public class RewriteReconciler implements JavaReconciler {
return allProblems;
}
private List<RecipeSpringJavaProblemDescriptor> getProblemRecipeDescriptors(IJavaProject project)
private List<RecipeCodeActionDescriptor> getProblemRecipeDescriptors(IJavaProject project)
throws InterruptedException, ExecutionException {
return recipeRepo.getProblemRecipeDescriptors().stream().filter(d -> d.getProblemType() != null).filter(d -> {
switch (config.getProblemApplicability(d.getProblemType())) {
@@ -184,7 +184,7 @@ public class RewriteReconciler implements JavaReconciler {
}).collect(Collectors.toList());
}
private void collectProblems(List<RecipeSpringJavaProblemDescriptor> descriptors, IDocument doc, CompilationUnit compilationUnit, Consumer<ReconcileProblem> problemHandler) {
private void collectProblems(List<RecipeCodeActionDescriptor> descriptors, IDocument doc, CompilationUnit compilationUnit, Consumer<ReconcileProblem> problemHandler) {
CompilationUnit cu = recipeRepo.mark(descriptors, compilationUnit);
new JavaIsoVisitor<ExecutionContext>() {

View File

@@ -8,7 +8,7 @@
* Contributors:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.rewrite.codeaction;
package org.springframework.ide.vscode.boot.java.rewrite.reconcile;
import static org.springframework.ide.vscode.commons.java.SpringProjectUtil.springBootVersionGreaterOrEqual;
@@ -32,7 +32,9 @@ import org.openrewrite.java.tree.JavaType.FullyQualified;
import org.openrewrite.java.tree.TypeUtils;
import org.openrewrite.marker.Range;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.AnnotationHierarchies;
@@ -107,4 +109,9 @@ public class AutowiredFieldIntoConstructorParameterCodeAction implements RecipeC
return springBootVersionGreaterOrEqual(2, 0, 0).test(project);
}
@Override
public ProblemType getProblemType() {
return Boot2JavaProblemType.JAVA_CONSTRUCTOR_PARAMETER_INJECTION;
}
}

View File

@@ -28,11 +28,10 @@ import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class BeanMethodNotPublicProblem implements RecipeSpringJavaProblemDescriptor {
public class BeanMethodNotPublicProblem implements RecipeCodeActionDescriptor {
private static final String ID = "org.openrewrite.java.spring.BeanMethodsNotPublic";

View File

@@ -29,12 +29,11 @@ import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.BeanPostProcessingIgnoreInAot;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class BeanPostProcessingIgnoreInAotProblem implements RecipeSpringJavaProblemDescriptor {
public class BeanPostProcessingIgnoreInAotProblem implements RecipeCodeActionDescriptor {
private static final String RECIPE_ID = "org.springframework.ide.vscode.commons.rewrite.java.BeanPostProcessingIgnoreInAot";
private static final String LABEL = "Add method 'isBeanExcludedFromAotProcessing' that returns 'false'";

View File

@@ -29,10 +29,10 @@ import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.Boot3JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
public class Boot3NotSupportedTypeProblem implements RecipeSpringJavaProblemDescriptor {
public class Boot3NotSupportedTypeProblem implements RecipeCodeActionDescriptor {
private static final List<String> TYPE_FQNAMES = List.of(
"org.springframework.web.multipart.commons.CommonsMultipartResolver",

View File

@@ -24,20 +24,20 @@ import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.J.MethodDeclaration;
import org.openrewrite.java.tree.JavaType.FullyQualified;
import org.openrewrite.marker.Range;
import org.openrewrite.java.tree.Statement;
import org.openrewrite.java.tree.TypeUtils;
import org.openrewrite.marker.Range;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.Annotations;
import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.AnnotationHierarchies;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class NoAutowiredOnConstructorProblem implements RecipeSpringJavaProblemDescriptor {
public class NoAutowiredOnConstructorProblem implements RecipeCodeActionDescriptor {
private static final String ID = "org.openrewrite.java.spring.NoAutowiredOnConstructor";
private static final String LABEL = "Remove Unnecessary @Autowired";

View File

@@ -8,7 +8,7 @@
* Contributors:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.rewrite.codeaction;
package org.springframework.ide.vscode.boot.java.rewrite.reconcile;
import static org.springframework.ide.vscode.commons.java.SpringProjectUtil.springBootVersionGreaterOrEqual;
@@ -23,7 +23,9 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
import org.openrewrite.marker.Range;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
@@ -66,4 +68,9 @@ public class NoRequestMappingAnnotationCodeAction implements RecipeCodeActionDes
return springBootVersionGreaterOrEqual(2, 0, 0).test(project);
}
@Override
public ProblemType getProblemType() {
return Boot2JavaProblemType.JAVA_PRECISE_REQUEST_MAPPING;
}
}

View File

@@ -40,8 +40,8 @@ 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.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
@@ -49,7 +49,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableSet;
public class NotRegisteredBeansProblem implements RecipeSpringJavaProblemDescriptor {
public class NotRegisteredBeansProblem implements RecipeCodeActionDescriptor {
private static final String DEFINE_METHOD_RECIPE = "org.springframework.ide.vscode.commons.rewrite.java.DefineMethod";

View File

@@ -30,11 +30,10 @@ import org.springframework.ide.vscode.boot.java.Boot3JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class PreciseBeanTypeProblem implements RecipeSpringJavaProblemDescriptor {
public class PreciseBeanTypeProblem implements RecipeCodeActionDescriptor {
private static final String RECIPE_ID = "org.openrewrite.java.spring.boot3.PreciseBeanType";

View File

@@ -30,11 +30,10 @@ import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeScope;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeSpringJavaProblemDescriptor;
import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
import org.springframework.ide.vscode.commons.rewrite.java.FixDescriptor;
public class UnnecessarySpringExtensionProblem implements RecipeSpringJavaProblemDescriptor {
public class UnnecessarySpringExtensionProblem implements RecipeCodeActionDescriptor {
private static final String LABEL = "Remove unnecessary @SpringExtension";
private static final String ID = "org.openrewrite.java.spring.boot2.UnnecessarySpringExtension";

View File

@@ -31,6 +31,18 @@
"label": "Unnecessary `@SpringExtension`",
"description": "`@SpringBootTest` and all test slice annotations already applies `@SpringExtension` as of Spring Boot 2.1.0.",
"defaultSeverity": "WARNING"
},
{
"code": "JAVA_CONSTRUCTOR_PARAMETER_INJECTION",
"label": "Use constrcutor parameter injection",
"description": "Use constrcutor parameter injection",
"defaultSeverity": "IGNORE"
},
{
"code": "JAVA_PRECISE_REQUEST_MAPPING",
"label": "Use precise mapping annotation, i.e. '@GetMapping', '@PostMapping', etc.",
"description": "Use precise mapping annotation, i.e. '@GetMapping', '@PostMapping', etc.",
"defaultSeverity": "HINT"
}
]
},

View File

@@ -336,6 +336,30 @@
"HINT",
"ERROR"
]
},
"spring-boot.ls.problem.boot2.JAVA_CONSTRUCTOR_PARAMETER_INJECTION": {
"type": "string",
"default": "IGNORE",
"description": "Use constrcutor parameter injection",
"enum": [
"IGNORE",
"INFO",
"WARNING",
"HINT",
"ERROR"
]
},
"spring-boot.ls.problem.boot2.JAVA_PRECISE_REQUEST_MAPPING": {
"type": "string",
"default": "HINT",
"description": "Use precise mapping annotation, i.e. '@GetMapping', '@PostMapping', etc.",
"enum": [
"IGNORE",
"INFO",
"WARNING",
"HINT",
"ERROR"
]
}
}
},