From 89e894205a5978c60b104aaa7ed142b966b43882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Tue, 11 Jun 2024 14:23:54 +0200 Subject: [PATCH] Improve exception message to include affected configuration class Closes gh-32998 --- .../context/annotation/ConfigurationClassParser.java | 3 ++- .../springframework/context/annotation/Gh23206Tests.java | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index cddae13bae9..38343c16476 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -323,7 +323,8 @@ class ConfigurationClassParser { List registerBeanConditions = collectRegisterBeanConditions(configClass); if (!registerBeanConditions.isEmpty()) { throw new ApplicationContextException( - "Component scan could not be used with conditions in REGISTER_BEAN phase: " + registerBeanConditions); + "Component scan for configuration class [%s] could not be used with conditions in REGISTER_BEAN phase: %s" + .formatted(configClass.getMetadata().getClassName(), registerBeanConditions)); } for (AnnotationAttributes componentScan : componentScans) { // The config class is annotated with @ComponentScan -> perform the scan immediately diff --git a/spring-context/src/test/java/org/springframework/context/annotation/Gh23206Tests.java b/spring-context/src/test/java/org/springframework/context/annotation/Gh23206Tests.java index 08f4bbbf764..5b4b42ed707 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/Gh23206Tests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/Gh23206Tests.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.context.ApplicationContextException; +import org.springframework.context.annotation.Gh23206Tests.ConditionalConfiguration.NestedConfiguration; import org.springframework.context.annotation.componentscan.simple.SimpleComponent; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -39,7 +40,9 @@ public class Gh23206Tests { assertThatExceptionOfType(BeanDefinitionStoreException.class).isThrownBy(context::refresh) .withMessageContaining(ConditionalComponentScanConfiguration.class.getName()) .havingCause().isInstanceOf(ApplicationContextException.class) - .withMessageContaining("Component scan could not be used with conditions in REGISTER_BEAN phase"); + .withMessageStartingWith("Component scan for configuration class [") + .withMessageContaining(ConditionalComponentScanConfiguration.class.getName()) + .withMessageContaining("could not be used with conditions in REGISTER_BEAN phase"); } @Test @@ -49,7 +52,9 @@ public class Gh23206Tests { assertThatExceptionOfType(BeanDefinitionStoreException.class).isThrownBy(context::refresh) .withMessageContaining(ConditionalConfiguration.class.getName()) .havingCause().isInstanceOf(ApplicationContextException.class) - .withMessageContaining("Component scan could not be used with conditions in REGISTER_BEAN phase"); + .withMessageStartingWith("Component scan for configuration class [") + .withMessageContaining(NestedConfiguration.class.getName()) + .withMessageContaining("could not be used with conditions in REGISTER_BEAN phase"); }