From 4588b0861cee10e48723febb63144b11ad4691ee Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 20 Mar 2025 11:31:31 +0100 Subject: [PATCH] GH-1499: do not check bean registrar imports when it is not a bean registrar implementation --- .../BeanRegistrarDeclarationReconciler.java | 6 +++++ ...eanRegistrarDeclarationReconcilerTest.java | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/BeanRegistrarDeclarationReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/BeanRegistrarDeclarationReconciler.java index 26e254ffc..09783cc65 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/BeanRegistrarDeclarationReconciler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/BeanRegistrarDeclarationReconciler.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -26,6 +27,7 @@ import org.eclipse.jdt.core.dom.TypeDeclaration; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; import org.springframework.ide.vscode.boot.java.Annotations; import org.springframework.ide.vscode.boot.java.Boot4JavaProblemType; +import org.springframework.ide.vscode.boot.java.utils.ASTUtils; import org.springframework.ide.vscode.commons.Version; import org.springframework.ide.vscode.commons.java.IClasspathUtil; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -73,6 +75,10 @@ public class BeanRegistrarDeclarationReconciler implements JdtAstReconciler { return true; } + if (ASTUtils.findInTypeHierarchy(type, Set.of(Annotations.BEAN_REGISTRAR_INTERFACE)) == null) { + return true; + } + List configBeans = new ArrayList<>(); Path p = Path.of(docURI); List sourceFolders = IClasspathUtil.getSourceFolders(project.getClasspath()).map(f -> f.toPath()).filter(f -> p.startsWith(f)).collect(Collectors.toList()); diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/reconcilers/test/BeanRegistrarDeclarationReconcilerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/reconcilers/test/BeanRegistrarDeclarationReconcilerTest.java index 1ad4937a1..4cd02f125 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/reconcilers/test/BeanRegistrarDeclarationReconcilerTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/reconcilers/test/BeanRegistrarDeclarationReconcilerTest.java @@ -58,6 +58,33 @@ public class BeanRegistrarDeclarationReconcilerTest extends BaseReconcilerTest { return new BeanRegistrarDeclarationReconciler(new QuickfixRegistry(), null); } + @Test + void noValidationIfNoBeanRegistrar() throws Throwable { + String source = """ + package com.example.demo; + + import org.springframework.beans.factory.BeanRegistrar; + import org.springframework.beans.factory.BeanRegistry; + import org.springframework.core.env.Environment; + + public class MyBeanRegistrar { + + public void register(BeanRegistry registry, Environment env) { + } + + } + """; + List problems = reconcile(() -> { + SpringMetamodelIndex springIndex = new SpringMetamodelIndex(); + + BeanRegistrarDeclarationReconciler r = new BeanRegistrarDeclarationReconciler(new QuickfixRegistry(), springIndex); + + return r; + }, "A.java", source, false); + + assertEquals(0, problems.size()); + } + @Test void noConfigBeans() throws Throwable { String source = """