diff --git a/eclipse-distribution/org.springframework.boot.ide.product.e419/.project b/eclipse-distribution/org.springframework.boot.ide.product.e419/.project
new file mode 100644
index 000000000..8bbadaf74
--- /dev/null
+++ b/eclipse-distribution/org.springframework.boot.ide.product.e419/.project
@@ -0,0 +1,17 @@
+
+
+ org.springframework.boot.ide.product.e419
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java
index ce9645440..399c56aa2 100644
--- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java
+++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2022 Pivotal, Inc.
+ * Copyright (c) 2017, 2023 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
@@ -93,7 +93,7 @@ public class SpringProjectUtil {
return null;
}
- private static boolean hasSpecificLibraryOnClasspath(IJavaProject jp, String libraryNamePrefix, boolean onlyLibs) {
+ public static boolean hasSpecificLibraryOnClasspath(IJavaProject jp, String libraryNamePrefix, boolean onlyLibs) {
try {
IClasspath cp = jp.getClasspath();
if (cp!=null) {
diff --git a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameProblemDescriptor.java b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameProblemDescriptor.java
index 1e9e3cec9..e4ec96da6 100644
--- a/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameProblemDescriptor.java
+++ b/headless-services/commons/commons-rewrite-test/src/main/java/org/springframework/rewrite/test/HelloMethodRenameProblemDescriptor.java
@@ -19,12 +19,12 @@ import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.MethodDeclaration;
import org.openrewrite.marker.Range;
-import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemCategory;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemTypes;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -36,7 +36,7 @@ public class HelloMethodRenameProblemDescriptor implements RecipeCodeActionDescr
private static final String RECIPE_ID = "org.springframework.rewrite.test.HelloMethodRenameRecipe";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaIsoVisitor<>() {
@Override
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/DefaultMarkerVisitorContext.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/DefaultMarkerVisitorContext.java
new file mode 100644
index 000000000..cb9482a43
--- /dev/null
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/DefaultMarkerVisitorContext.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2023 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.context.ApplicationContext;
+import org.springframework.ide.vscode.commons.java.IJavaProject;
+
+public record DefaultMarkerVisitorContext(ApplicationContext appContext, IJavaProject project) implements MarkerVisitorContext {
+
+}
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/MarkerVisitorContext.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/MarkerVisitorContext.java
new file mode 100644
index 000000000..d11fddb60
--- /dev/null
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/MarkerVisitorContext.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2023 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.context.ApplicationContext;
+import org.springframework.ide.vscode.commons.java.IJavaProject;
+
+public interface MarkerVisitorContext {
+
+ IJavaProject project();
+
+ ApplicationContext appContext();
+
+}
diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/RecipeCodeActionDescriptor.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/RecipeCodeActionDescriptor.java
index 5bce924e2..59208e6f6 100644
--- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/RecipeCodeActionDescriptor.java
+++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/config/RecipeCodeActionDescriptor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -12,7 +12,6 @@ package org.springframework.ide.vscode.commons.rewrite.config;
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;
@@ -22,7 +21,7 @@ public interface RecipeCodeActionDescriptor {
return getClass().getName();
}
- JavaVisitor getMarkerVisitor(ApplicationContext applicationContext);
+ JavaVisitor getMarkerVisitor(MarkerVisitorContext context);
boolean isApplicable(IJavaProject project);
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Boot2JavaProblemType.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Boot2JavaProblemType.java
index bf0edf008..75529134f 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Boot2JavaProblemType.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Boot2JavaProblemType.java
@@ -10,10 +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.INFO;
-import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.HINT;
-import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.WARNING;
+import static org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemSeverity.*;
import org.springframework.ide.vscode.boot.common.SpringProblemCategories;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemCategory;
@@ -40,7 +37,9 @@ public enum Boot2JavaProblemType implements ProblemType {
HTTP_SECIRITY_AUTHORIZE_HTTP_REQUESTS(WARNING, "'HttpSecurity.authroizeRequests(...)' API and related classes are to be deprecated use new `authorizeHttpRequests(...) and related classes", "Usage of old 'HttpSecurity.authroizeRequests(...)' API"),
- WEB_SECURITY_CONFIGURER_ADAPTER(WARNING, "'WebSecurityConfigurerAdapter' is removed in Spring-Security 6.x. Refactor classes extending the 'WebSecurityConfigurerAdapter' into 'Configuration' beans and methods into 'Bean' definitions ", "Replace usage of 'WebSecurityConfigurerAdapter' as this class to be removed in Security 6.x");
+ WEB_SECURITY_CONFIGURER_ADAPTER(WARNING, "'WebSecurityConfigurerAdapter' is removed in Spring-Security 6.x. Refactor classes extending the 'WebSecurityConfigurerAdapter' into 'Configuration' beans and methods into 'Bean' definitions ", "Replace usage of 'WebSecurityConfigurerAdapter' as this class to be removed in Security 6.x"),
+
+ DOMAIN_ID_FOR_REPOSITORY(ERROR, "Invalid Domain ID type for Spring Data Repository", "Invalid Domain ID Type for Spring Data Repository");
private final ProblemSeverity defaultSeverity;
private String description;
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/BootCodeActionRepository.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/BootCodeActionRepository.java
index 3a64f61e4..0910fff51 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/BootCodeActionRepository.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/BootCodeActionRepository.java
@@ -18,6 +18,7 @@ import org.springframework.ide.vscode.boot.java.rewrite.reconcile.AutowiredField
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.EntityIdForRepoProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.HttpSecurityLamdaDslCodeAction;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.NoAutowiredOnConstructorProblem;
import org.springframework.ide.vscode.boot.java.rewrite.reconcile.NoRepoAnnotationProblem;
@@ -49,7 +50,8 @@ public class BootCodeActionRepository extends CodeActionRepository {
new ServerHttpSecurityLambdaDslCodeAction(),
new AddConfigurationIfBeansPresentCodeAction(),
new AuthorizeHttpRequestsCodeAction(),
- new WebSecurityConfigurerAdapterCodeAction()
+ new WebSecurityConfigurerAdapterCodeAction(),
+ new EntityIdForRepoProblem()
);
}
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteCodeActionHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteCodeActionHandler.java
index 016c4009c..5f3d3ce9c 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteCodeActionHandler.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteCodeActionHandler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -108,7 +108,7 @@ public class RewriteCodeActionHandler implements JavaCodeActionHandler {
CompilationUnit cu = cuCache.getCU(project, URI.create(doc.getUri()));
if (cu != null) {
- cu = recipeRepo.mark(descriptors, cu);
+ cu = recipeRepo.mark(project, descriptors, cu);
List codeActions = new ArrayList<>();
new JavaIsoVisitor() {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
index 1f4b7cf07..7c7382ea8 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
@@ -66,6 +66,7 @@ import org.springframework.ide.vscode.commons.protocol.java.ProjectBuild;
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.DefaultMarkerVisitorContext;
import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
import org.springframework.ide.vscode.commons.rewrite.config.StsEnvironment;
import org.springframework.ide.vscode.commons.rewrite.gradle.GradleIJavaProjectParser;
@@ -302,10 +303,10 @@ public class RewriteRecipeRepository implements ApplicationContextAware {
return l;
}
- public CompilationUnit mark(List extends RecipeCodeActionDescriptor> descriptors, CompilationUnit compilationUnit) {
+ public CompilationUnit mark(IJavaProject project, List extends RecipeCodeActionDescriptor> descriptors, CompilationUnit compilationUnit) {
CompilationUnit cu = compilationUnit;
for (RecipeCodeActionDescriptor d : descriptors) {
- TreeVisitor, ExecutionContext> markVisitor = d.getMarkerVisitor(applicationContext);
+ TreeVisitor, ExecutionContext> markVisitor = d.getMarkerVisitor(new DefaultMarkerVisitorContext(applicationContext, project));
if (markVisitor != null) {
try {
cu = (CompilationUnit) markVisitor.visit(cu, new InMemoryExecutionContext(e -> log.error("Marker visitor failed!", e)));
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteReconciler.java
index c2b9d04aa..da3e09383 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteReconciler.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteReconciler.java
@@ -90,7 +90,7 @@ public class RewriteReconciler implements JavaReconciler {
if (!descriptors.isEmpty()) {
CompilationUnit cu = cuCache.getCU(project, URI.create(doc.getUri()));
if (cu != null) {
- collectProblems(descriptors, doc, cu, problemCollector::accept);
+ collectProblems(project, descriptors, doc, cu, problemCollector::accept);
}
}
} catch (Exception e) {
@@ -279,7 +279,7 @@ public class RewriteReconciler implements JavaReconciler {
Path sourcePath = Paths.get(URI.create(doc.getUri()));
if (cu.getSourcePath().equals(sourcePath)) {
k++;
- collectProblems(descriptors, doc, cu, problems::add);
+ collectProblems(project, descriptors, doc, cu, problems::add);
if (!problems.isEmpty()) {
allProblems.put(doc, problems);
}
@@ -316,8 +316,8 @@ public class RewriteReconciler implements JavaReconciler {
}).collect(Collectors.toList());
}
- private void collectProblems(List descriptors, IDocument doc, CompilationUnit compilationUnit, Consumer problemHandler) {
- CompilationUnit cu = recipeRepo.mark(descriptors, compilationUnit);
+ private void collectProblems(IJavaProject project, List descriptors, IDocument doc, CompilationUnit compilationUnit, Consumer problemHandler) {
+ CompilationUnit cu = recipeRepo.mark(project, descriptors, compilationUnit);
if (compilationUnit != cu) {
new JavaMarkerVisitor() {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AddConfigurationIfBeansPresentCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AddConfigurationIfBeansPresentCodeAction.java
index 5254e0816..e278c093c 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AddConfigurationIfBeansPresentCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AddConfigurationIfBeansPresentCodeAction.java
@@ -20,12 +20,12 @@ import org.openrewrite.java.spring.boot2.AddConfigurationAnnotationIfBeansPresen
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.J.MethodDeclaration;
import org.openrewrite.java.tree.J.VariableDeclarations;
-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.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.java.Version;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -41,7 +41,7 @@ public class AddConfigurationIfBeansPresentCodeAction implements RecipeCodeActio
private static final String FIX_LABEL = "Add missing '@Configuration' annotations over classes";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AuthorizeHttpRequestsCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AuthorizeHttpRequestsCodeAction.java
index 823c10bee..e3933ab70 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AuthorizeHttpRequestsCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AuthorizeHttpRequestsCodeAction.java
@@ -20,12 +20,12 @@ import org.openrewrite.java.MethodMatcher;
import org.openrewrite.java.tree.J.MethodInvocation;
import org.openrewrite.java.tree.J.VariableDeclarations;
import org.openrewrite.java.tree.JavaType.FullyQualified;
-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.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.java.Version;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -56,7 +56,7 @@ public class AuthorizeHttpRequestsCodeAction implements RecipeCodeActionDescript
}
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AutowiredFieldIntoConstructorParameterCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AutowiredFieldIntoConstructorParameterCodeAction.java
index b6ec83263..f053a8686 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AutowiredFieldIntoConstructorParameterCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/AutowiredFieldIntoConstructorParameterCodeAction.java
@@ -32,10 +32,10 @@ import org.openrewrite.java.tree.J.VariableDeclarations;
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.MarkerVisitorContext;
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;
@@ -52,7 +52,7 @@ public class AutowiredFieldIntoConstructorParameterCodeAction implements RecipeC
private static final String AUTOWIRED = "org.springframework.beans.factory.annotation.Autowired";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanMethodNotPublicProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanMethodNotPublicProblem.java
index c735a2e34..adedf3283 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanMethodNotPublicProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanMethodNotPublicProblem.java
@@ -21,10 +21,10 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J;
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.java.SpringProjectUtil;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -40,7 +40,7 @@ public class BeanMethodNotPublicProblem implements RecipeCodeActionDescriptor {
private static final AnnotationMatcher BEAN_ANNOTATION_MATCHER = new AnnotationMatcher("@org.springframework.context.annotation.Bean");
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanPostProcessingIgnoreInAotProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanPostProcessingIgnoreInAotProblem.java
index 87a7358c3..389ebe923 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanPostProcessingIgnoreInAotProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/BeanPostProcessingIgnoreInAotProblem.java
@@ -22,10 +22,10 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.J.MethodDeclaration;
import org.openrewrite.marker.Range;
-import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.SpringAotJavaProblemType;
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.MarkerVisitorContext;
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.BeanPostProcessingIgnoreInAot;
@@ -39,7 +39,7 @@ public class BeanPostProcessingIgnoreInAotProblem implements RecipeCodeActionDes
private static final String LABEL = "Add method 'isBeanExcludedFromAotProcessing' that returns 'false'";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/Boot3NotSupportedTypeProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/Boot3NotSupportedTypeProblem.java
index b7978952f..fbb36903f 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/Boot3NotSupportedTypeProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/Boot3NotSupportedTypeProblem.java
@@ -24,10 +24,10 @@ import org.openrewrite.java.tree.JavaType.FullyQualified;
import org.openrewrite.java.tree.JavaType.Method;
import org.openrewrite.java.tree.NameTree;
import org.openrewrite.java.tree.TypeUtils;
-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.MarkerVisitorContext;
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.JavaMarkerVisitor;
@@ -41,7 +41,7 @@ public class Boot3NotSupportedTypeProblem implements RecipeCodeActionDescriptor
);
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
@Override
public J.Identifier visitIdentifier(J.Identifier ident, ExecutionContext executionContext) {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/EntityIdForRepoProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/EntityIdForRepoProblem.java
new file mode 100644
index 000000000..1dd8ea023
--- /dev/null
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/EntityIdForRepoProblem.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2023 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.boot.java.rewrite.reconcile;
+
+import static org.springframework.ide.vscode.commons.java.SpringProjectUtil.springBootVersionGreaterOrEqual;
+
+import org.openrewrite.ExecutionContext;
+import org.openrewrite.Tree;
+import org.openrewrite.java.JavaVisitor;
+import org.openrewrite.java.spring.boot2.search.EntityIdForRepositoryVisitor;
+import org.openrewrite.java.tree.JavaType;
+import org.openrewrite.marker.Marker;
+import org.springframework.ide.vscode.boot.java.Boot2JavaProblemType;
+import org.springframework.ide.vscode.commons.java.IJavaProject;
+import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
+import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
+import org.springframework.ide.vscode.commons.rewrite.config.RecipeCodeActionDescriptor;
+import org.springframework.ide.vscode.commons.rewrite.java.FixAssistMarker;
+
+public class EntityIdForRepoProblem implements RecipeCodeActionDescriptor {
+
+ private static final String ID = "org.openrewrite.java.spring.boot2.search.EntityIdForRepositoryVisitor";
+
+ @Override
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
+ boolean considerIdField = context.project() != null && SpringProjectUtil.hasSpecificLibraryOnClasspath(context.project(), "spring-data-mongodb-", true);
+ return new EntityIdForRepositoryVisitor<>(considerIdField) {
+ @Override
+ protected Marker createMarker(JavaType domainIdType) {
+ return new FixAssistMarker(Tree.randomId(), ID).withLabel("Expected Domain ID type is '" + domainIdType + "'");
+ }
+ };
+ }
+
+ @Override
+ public boolean isApplicable(IJavaProject project) {
+ return springBootVersionGreaterOrEqual(2, 0, 0).test(project);
+ }
+
+ @Override
+ public String getId() {
+ return ID;
+ }
+
+ @Override
+ public ProblemType getProblemType() {
+ return Boot2JavaProblemType.DOMAIN_ID_FOR_REPOSITORY;
+ }
+
+}
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/HttpSecurityLamdaDslCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/HttpSecurityLamdaDslCodeAction.java
index c1ffd619e..14003b4b0 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/HttpSecurityLamdaDslCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/HttpSecurityLamdaDslCodeAction.java
@@ -19,12 +19,12 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.spring.boot2.HttpSecurityLambdaDsl;
import org.openrewrite.java.tree.J.MethodInvocation;
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.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.java.Version;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -40,7 +40,7 @@ public class HttpSecurityLamdaDslCodeAction implements RecipeCodeActionDescripto
private HttpSecurityLambdaDsl recipe = new HttpSecurityLambdaDsl();
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoAutowiredOnConstructorProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoAutowiredOnConstructorProblem.java
index ab1380d77..d52bda26e 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoAutowiredOnConstructorProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoAutowiredOnConstructorProblem.java
@@ -27,10 +27,10 @@ import org.openrewrite.java.tree.JavaType.FullyQualified;
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.MarkerVisitorContext;
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;
@@ -45,7 +45,7 @@ public class NoAutowiredOnConstructorProblem implements RecipeCodeActionDescript
private static final String LABEL = "Remove Unnecessary @Autowired";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext context) {
J.ClassDeclaration cd = super.visitClassDeclaration(classDecl, context);
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRepoAnnotationProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRepoAnnotationProblem.java
index 90153c659..e32aa83da 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRepoAnnotationProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRepoAnnotationProblem.java
@@ -24,10 +24,10 @@ import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType;
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.MarkerVisitorContext;
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;
@@ -42,7 +42,7 @@ public class NoRepoAnnotationProblem implements RecipeCodeActionDescriptor {
private static final String ANNOTATION_REPOSITORY = Annotations.REPOSITORY;
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java
index 56a6906d6..5164dda5f 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NoRequestMappingAnnotationCodeAction.java
@@ -21,10 +21,10 @@ import org.openrewrite.java.AnnotationMatcher;
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.MarkerVisitorContext;
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;
@@ -38,7 +38,7 @@ public class NoRequestMappingAnnotationCodeAction implements RecipeCodeActionDes
private static final AnnotationMatcher REQUEST_MAPPING_ANNOTATION_MATCHER = new AnnotationMatcher("@org.springframework.web.bind.annotation.RequestMapping");
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
public J.Annotation visitAnnotation(J.Annotation annotation, ExecutionContext ctx) {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NotRegisteredBeansProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NotRegisteredBeansProblem.java
index 9c72ee5e4..12c414403 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NotRegisteredBeansProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/NotRegisteredBeansProblem.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2022 VMware, Inc.
+ * Copyright (c) 2022, 2023 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
@@ -18,7 +18,6 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
-import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.WorkspaceSymbol;
import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
@@ -28,7 +27,6 @@ import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType;
import org.openrewrite.java.tree.JavaType.FullyQualified;
import org.openrewrite.java.tree.TypeUtils;
-import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.SpringAotJavaProblemType;
import org.springframework.ide.vscode.boot.java.beans.BeansSymbolAddOnInformation;
@@ -37,8 +35,8 @@ import org.springframework.ide.vscode.boot.java.handlers.EnhancedSymbolInformati
import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation;
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.MarkerVisitorContext;
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;
@@ -59,7 +57,7 @@ public class NotRegisteredBeansProblem implements RecipeCodeActionDescriptor {
);
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
@@ -70,7 +68,7 @@ public class NotRegisteredBeansProblem implements RecipeCodeActionDescriptor {
String beanClassName = type.getFullyQualifiedName();
boolean applicable = AOT_BEANS.stream().filter(fqName -> TypeUtils.isAssignableTo(fqName, type)).findFirst().isPresent();
if (applicable) {
- SpringSymbolIndex index = applicationContext.getBean(SpringSymbolIndex.class);
+ SpringSymbolIndex index = context.appContext().getBean(SpringSymbolIndex.class);
List beanSymbols = index.getSymbols(data -> {
SymbolAddOnInformation[] additionalInformation = data.getAdditionalInformation();
if (additionalInformation != null) {
@@ -87,48 +85,44 @@ public class NotRegisteredBeansProblem implements RecipeCodeActionDescriptor {
List constructors = c.getType().getMethods().stream().filter(m -> m.isConstructor()).collect(Collectors.toList());
if (beanSymbols.isEmpty()) {
SourceFile source = getCursor().firstEnclosing(SourceFile.class);
- String uri = source.getSourcePath().toUri().toASCIIString();
FixAssistMarker marker = new FixAssistMarker(Tree.randomId(), getId());
- JavaProjectFinder projectFinder = applicationContext.getBean(JavaProjectFinder.class);
- if (projectFinder != null) {
- IJavaProject project = projectFinder.find(new TextDocumentIdentifier(uri)).orElse(null);
- if (project != null) {
-
- for (EnhancedSymbolInformation s : index.getEnhancedSymbols(project)) {
- if (s.getAdditionalInformation() != null) {
- ConfigBeanSymbolAddOnInformation configInfo = Arrays.stream(s.getAdditionalInformation()).filter(ConfigBeanSymbolAddOnInformation.class::isInstance).map(ConfigBeanSymbolAddOnInformation.class::cast).findFirst().orElse(null);
- if (configInfo != null) {
- for (JavaType.Method constructor : constructors) {
- String constructorParamsSignature = "(" + constructor.getParameterTypes().stream().map(pt -> typePattern(pt)).collect(Collectors.joining(",")) + ")";
- String beanMethodName = "get" + type.getClassName();
- String pattern = beanMethodName + constructorParamsSignature;
- String contructorParamsLabel = "(" + constructor.getParameterTypes().stream().map(NotRegisteredBeansProblem::typeStr).collect(Collectors.joining(", ")) + ")";
-
- Builder paramBuilder = ImmutableList.builder();
- for (int i = 0; i < constructor.getParameterNames().size() && i < constructor.getParameterTypes().size(); i++) {
- JavaType paramType = constructor.getParameterTypes().get(i);
- String paramName = constructor.getParameterNames().get(i);
- paramBuilder.add(typeStr(paramType) + ' ' + paramName);
- }
- String paramsStr = String.join(", ", paramBuilder.build().toArray(String[]::new));
-
- fixListBuilder.add(new FixDescriptor(DEFINE_METHOD_RECIPE, List.of(s.getSymbol().getLocation().getLeft().getUri()), "Define bean in config '" + configInfo.getBeanID() + "' with constructor " + contructorParamsLabel)
- .withRecipeScope(RecipeScope.FILE)
- .withParameters(Map.of(
- "targetFqName", configInfo.getBeanType(),
- "signature", pattern,
- "template", "@Bean\n"
- + type.getClassName() + " " + beanMethodName + "(" + paramsStr + ") {\n"
- + "return new " + type.getClassName() + "(" + constructor.getParameterNames().stream().collect(Collectors.joining(", ")) + ");\n"
- + "}\n",
- "imports", allFQTypes(constructor).toArray(String[]::new),
- "typeStubs", new String[] { source.printAll() },
- "classpath", IClasspathUtil.getAllBinaryRoots(project.getClasspath()).stream().map(f -> f.toPath().toString()).toArray(String[]::new)
-
- ))
- );
- }
- }
+ IJavaProject project = context.project();
+ if (project != null) {
+
+ for (EnhancedSymbolInformation s : index.getEnhancedSymbols(project)) {
+ if (s.getAdditionalInformation() != null) {
+ ConfigBeanSymbolAddOnInformation configInfo = Arrays.stream(s.getAdditionalInformation()).filter(ConfigBeanSymbolAddOnInformation.class::isInstance).map(ConfigBeanSymbolAddOnInformation.class::cast).findFirst().orElse(null);
+ if (configInfo != null) {
+ for (JavaType.Method constructor : constructors) {
+ String constructorParamsSignature = "(" + constructor.getParameterTypes().stream().map(pt -> typePattern(pt)).collect(Collectors.joining(",")) + ")";
+ String beanMethodName = "get" + type.getClassName();
+ String pattern = beanMethodName + constructorParamsSignature;
+ String contructorParamsLabel = "(" + constructor.getParameterTypes().stream().map(NotRegisteredBeansProblem::typeStr).collect(Collectors.joining(", ")) + ")";
+
+ Builder paramBuilder = ImmutableList.builder();
+ for (int i = 0; i < constructor.getParameterNames().size() && i < constructor.getParameterTypes().size(); i++) {
+ JavaType paramType = constructor.getParameterTypes().get(i);
+ String paramName = constructor.getParameterNames().get(i);
+ paramBuilder.add(typeStr(paramType) + ' ' + paramName);
+ }
+ String paramsStr = String.join(", ", paramBuilder.build().toArray(String[]::new));
+
+ fixListBuilder.add(new FixDescriptor(DEFINE_METHOD_RECIPE, List.of(s.getSymbol().getLocation().getLeft().getUri()), "Define bean in config '" + configInfo.getBeanID() + "' with constructor " + contructorParamsLabel)
+ .withRecipeScope(RecipeScope.FILE)
+ .withParameters(Map.of(
+ "targetFqName", configInfo.getBeanType(),
+ "signature", pattern,
+ "template", "@Bean\n"
+ + type.getClassName() + " " + beanMethodName + "(" + paramsStr + ") {\n"
+ + "return new " + type.getClassName() + "(" + constructor.getParameterNames().stream().collect(Collectors.joining(", ")) + ");\n"
+ + "}\n",
+ "imports", allFQTypes(constructor).toArray(String[]::new),
+ "typeStubs", new String[] { source.printAll() },
+ "classpath", IClasspathUtil.getAllBinaryRoots(project.getClasspath()).stream().map(f -> f.toPath().toString()).toArray(String[]::new)
+
+ ))
+ );
+ }
}
}
}
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java
index afc3657fb..e90069008 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java
@@ -24,9 +24,9 @@ import org.openrewrite.java.tree.J.Return;
import org.openrewrite.java.tree.JavaType;
import org.openrewrite.java.tree.TypeUtils;
import org.openrewrite.marker.Range;
-import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.SpringAotJavaProblemType;
import org.springframework.ide.vscode.commons.java.IJavaProject;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -42,7 +42,7 @@ public class PreciseBeanTypeProblem implements RecipeCodeActionDescriptor {
private static final String MSG_KEY = "returnType";
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) {
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/ServerHttpSecurityLambdaDslCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/ServerHttpSecurityLambdaDslCodeAction.java
index 6bd6a92d0..31a439e84 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/ServerHttpSecurityLambdaDslCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/ServerHttpSecurityLambdaDslCodeAction.java
@@ -19,12 +19,12 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.spring.boot2.ServerHttpSecurityLambdaDsl;
import org.openrewrite.java.tree.J.MethodInvocation;
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.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.java.Version;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -40,7 +40,7 @@ public class ServerHttpSecurityLambdaDslCodeAction implements RecipeCodeActionDe
private ServerHttpSecurityLambdaDsl recipe = new ServerHttpSecurityLambdaDsl();
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/UnnecessarySpringExtensionProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/UnnecessarySpringExtensionProblem.java
index 25baf033a..02de24a5d 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/UnnecessarySpringExtensionProblem.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/UnnecessarySpringExtensionProblem.java
@@ -24,9 +24,9 @@ import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType.FullyQualified;
import org.openrewrite.java.tree.TypeUtils;
-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.rewrite.config.MarkerVisitorContext;
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;
@@ -58,7 +58,7 @@ public class UnnecessarySpringExtensionProblem implements RecipeCodeActionDescri
private static final AnnotationMatcher SPRING_EXTENSION_ANNOTATIN_MATCHER = new AnnotationMatcher("@org.junit.jupiter.api.extension.ExtendWith(org.springframework.test.context.junit.jupiter.SpringExtension.class)");
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
@Override
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/WebSecurityConfigurerAdapterCodeAction.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/WebSecurityConfigurerAdapterCodeAction.java
index 19d5e774a..bf3d7ee40 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/WebSecurityConfigurerAdapterCodeAction.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/WebSecurityConfigurerAdapterCodeAction.java
@@ -22,13 +22,13 @@ import org.openrewrite.java.tree.J.ClassDeclaration;
import org.openrewrite.java.tree.JavaType;
import org.openrewrite.java.tree.TypeTree;
import org.openrewrite.java.tree.TypeUtils;
-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.java.SpringProjectUtil;
import org.springframework.ide.vscode.commons.java.Version;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType;
+import org.springframework.ide.vscode.commons.rewrite.config.MarkerVisitorContext;
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;
@@ -82,7 +82,7 @@ public class WebSecurityConfigurerAdapterCodeAction implements RecipeCodeActionD
}
@Override
- public JavaVisitor getMarkerVisitor(ApplicationContext applicationContext) {
+ public JavaVisitor getMarkerVisitor(MarkerVisitorContext context) {
return new JavaMarkerVisitor<>() {
@Override
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 cee5419ca..ae9b5022e 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
@@ -73,6 +73,12 @@
"label": "Replace usage of 'WebSecurityConfigurerAdapter' as this class to be removed in Security 6.x",
"description": "'WebSecurityConfigurerAdapter' is removed in Spring-Security 6.x. Refactor classes extending the 'WebSecurityConfigurerAdapter' into 'Configuration' beans and methods into 'Bean' definitions ",
"defaultSeverity": "WARNING"
+ },
+ {
+ "code": "DOMAIN_ID_FOR_REPOSITORY",
+ "label": "Invalid Domain ID Type for Spring Data Repository",
+ "description": "Invalid Domain ID type for Spring Data Repository",
+ "defaultSeverity": "ERROR"
}
]
},
diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json
index a17949fb3..995c3216f 100644
--- a/vscode-extensions/vscode-spring-boot/package.json
+++ b/vscode-extensions/vscode-spring-boot/package.json
@@ -442,6 +442,18 @@
"HINT",
"ERROR"
]
+ },
+ "spring-boot.ls.problem.boot2.DOMAIN_ID_FOR_REPOSITORY": {
+ "type": "string",
+ "default": "ERROR",
+ "description": "Invalid Domain ID type for Spring Data Repository",
+ "enum": [
+ "IGNORE",
+ "INFO",
+ "WARNING",
+ "HINT",
+ "ERROR"
+ ]
}
}
},
@@ -1010,4 +1022,4 @@
"extensionDependencies": [
"redhat.java"
]
-}
+}
\ No newline at end of file