From 1924aad07c078d325aeab82438156507894f6066 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Oct 2020 14:54:24 +0100 Subject: [PATCH] Limit supported annotations to `@ConfigurationProperties` and `@Configuration` Previously, the configuration property annotation processor declared that it supported all annotation types. This hurt performance and prevented incremental builds with Gradle when compiling source code containing source-retention annotations. This commit updates its supported annotation types to be only `@ConfigurationProperties` and `@Configuration`. The latter is declared to allow binding third-party classes returned from a `@Bean` method. Fixes gh-23580 --- .../ConfigurationMetadataAnnotationProcessor.java | 3 ++- .../ConfigurationMetadataAnnotationProcessorTests.java | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java index b97f9b36697..1ddd1535d09 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java @@ -59,7 +59,8 @@ import org.springframework.boot.configurationprocessor.metadata.ItemMetadata; * @author Jonas Keßler * @since 1.2.0 */ -@SupportedAnnotationTypes({ "*" }) +@SupportedAnnotationTypes({ ConfigurationMetadataAnnotationProcessor.CONFIGURATION_PROPERTIES_ANNOTATION, + "org.springframework.context.annotation.Configuration" }) public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor { static final String ADDITIONAL_METADATA_LOCATIONS_OPTION = "org.springframework.boot.configurationprocessor.additionalMetadataLocations"; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java index fe89c466a00..be387985a5b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java @@ -68,6 +68,13 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; */ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGenerationTests { + @Test + void supportedAnnotations() { + assertThat(new ConfigurationMetadataAnnotationProcessor().getSupportedAnnotationTypes()) + .containsExactlyInAnyOrder("org.springframework.boot.context.properties.ConfigurationProperties", + "org.springframework.context.annotation.Configuration"); + } + @Test void notAnnotated() { ConfigurationMetadata metadata = compile(NotAnnotated.class);