Skip to content

Commit ea094dd

Browse files
committed
Fix package tangles caused by ConfigurationProperties hints
Relocate `ConfigurationPropertiesReflectionHintsProcessor` and refactor it to be a general purpose `BindableRuntimeHintsRegistrar`. Prior to this commit, `ConfigurationPropertiesReflectionHintsProcessor` was used to declare binding hints for classes that were bound, but might be `@ConfigurationProperties`. By moving and renaming the class, it's now better aligned to the way it's used. Support for `@NestedConfigurationProperties` has been implemented by adding a `@Nestable` meta-annotation. This allow us to create the appropriate hints, without the `Binder` needing to be directly aware of the `@NestedConfigurationProperties` annotation. Closes gh-32815
1 parent eb1d72e commit ea094dd

File tree

9 files changed

+328
-283
lines changed

9 files changed

+328
-283
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerRuntimeHints.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,19 @@
1616

1717
package org.springframework.boot.autoconfigure.freemarker;
1818

19-
import org.springframework.aot.hint.RuntimeHints;
2019
import org.springframework.aot.hint.RuntimeHintsRegistrar;
2120
import org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider.FreeMarkerTemplateAvailabilityProperties;
22-
import org.springframework.boot.context.properties.ConfigurationPropertiesReflectionHintsProcessor;
21+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
2322

2423
/**
2524
* {@link RuntimeHintsRegistrar} for FreeMarker support.
2625
*
2726
* @author Moritz Halbritter
2827
*/
29-
class FreeMarkerRuntimeHints implements RuntimeHintsRegistrar {
28+
class FreeMarkerRuntimeHints extends BindableRuntimeHintsRegistrar {
3029

31-
@Override
32-
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
33-
ConfigurationPropertiesReflectionHintsProcessor
34-
.processConfigurationProperties(FreeMarkerTemplateAvailabilityProperties.class, hints.reflection());
30+
FreeMarkerRuntimeHints() {
31+
super(FreeMarkerTemplateAvailabilityProperties.class);
3532
}
3633

3734
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.boot.autoconfigure.http;
1818

19-
import org.springframework.aot.hint.RuntimeHints;
20-
import org.springframework.aot.hint.RuntimeHintsRegistrar;
2119
import org.springframework.beans.factory.ObjectProvider;
2220
import org.springframework.boot.autoconfigure.AutoConfiguration;
2321
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -31,7 +29,7 @@
3129
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition;
3230
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
3331
import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration;
34-
import org.springframework.boot.context.properties.ConfigurationPropertiesReflectionHintsProcessor;
32+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
3533
import org.springframework.boot.context.properties.bind.Binder;
3634
import org.springframework.boot.web.servlet.server.Encoding;
3735
import org.springframework.context.annotation.Bean;
@@ -102,12 +100,10 @@ private static class ReactiveWebApplication {
102100

103101
}
104102

105-
static class HttpMessageConvertersAutoConfigurationRuntimeHints implements RuntimeHintsRegistrar {
103+
static class HttpMessageConvertersAutoConfigurationRuntimeHints extends BindableRuntimeHintsRegistrar {
106104

107-
@Override
108-
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
109-
ConfigurationPropertiesReflectionHintsProcessor.processConfigurationProperties(Encoding.class,
110-
hints.reflection());
105+
HttpMessageConvertersAutoConfigurationRuntimeHints() {
106+
super(Encoding.class);
111107
}
112108

113109
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
import org.apache.commons.logging.LogFactory;
3737

3838
import org.springframework.aot.AotDetector;
39-
import org.springframework.aot.hint.RuntimeHints;
40-
import org.springframework.aot.hint.RuntimeHintsRegistrar;
4139
import org.springframework.beans.BeansException;
4240
import org.springframework.beans.factory.config.BeanDefinition;
4341
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
@@ -49,8 +47,8 @@
4947
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
5048
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
5149
import org.springframework.boot.Banner.Mode;
52-
import org.springframework.boot.context.properties.ConfigurationPropertiesReflectionHintsProcessor;
5350
import org.springframework.boot.context.properties.bind.Bindable;
51+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
5452
import org.springframework.boot.context.properties.bind.Binder;
5553
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
5654
import org.springframework.boot.convert.ApplicationConversionService;
@@ -1428,12 +1426,10 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
14281426

14291427
}
14301428

1431-
static class SpringApplicationRuntimeHints implements RuntimeHintsRegistrar {
1429+
static class SpringApplicationRuntimeHints extends BindableRuntimeHintsRegistrar {
14321430

1433-
@Override
1434-
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
1435-
ConfigurationPropertiesReflectionHintsProcessor.processConfigurationProperties(SpringApplication.class,
1436-
hints.reflection());
1431+
SpringApplicationRuntimeHints() {
1432+
super(SpringApplication.class);
14371433
}
14381434

14391435
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigDataPropertiesRuntimeHints.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.springframework.aot.hint.ExecutableMode;
2020
import org.springframework.aot.hint.RuntimeHints;
2121
import org.springframework.aot.hint.RuntimeHintsRegistrar;
22-
import org.springframework.boot.context.properties.ConfigurationPropertiesReflectionHintsProcessor;
22+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
2323
import org.springframework.util.ReflectionUtils;
2424

2525
/**
@@ -31,8 +31,7 @@ class ConfigDataPropertiesRuntimeHints implements RuntimeHintsRegistrar {
3131

3232
@Override
3333
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
34-
ConfigurationPropertiesReflectionHintsProcessor.processConfigurationProperties(ConfigDataProperties.class,
35-
hints.reflection());
34+
BindableRuntimeHintsRegistrar.forTypes(ConfigDataProperties.class).registerHints(hints);
3635
hints.reflection().registerMethod(ReflectionUtils.findMethod(ConfigDataLocation.class, "of", String.class),
3736
ExecutableMode.INVOKE);
3837
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanFactoryInitializationAotProcessor.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
2525
import org.springframework.beans.factory.aot.BeanFactoryInitializationCode;
2626
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
27+
import org.springframework.boot.context.properties.bind.BindableRuntimeHintsRegistrar;
2728
import org.springframework.util.ClassUtils;
2829
import org.springframework.util.CollectionUtils;
2930

@@ -66,10 +67,7 @@ private ConfigurationPropertiesReflectionHintsContribution(Iterable<Class<?>> ty
6667
@Override
6768
public void applyTo(GenerationContext generationContext,
6869
BeanFactoryInitializationCode beanFactoryInitializationCode) {
69-
for (Class<?> type : this.types) {
70-
ConfigurationPropertiesReflectionHintsProcessor.processConfigurationProperties(type,
71-
generationContext.getRuntimeHints().reflection());
72-
}
70+
BindableRuntimeHintsRegistrar.forTypes(this.types).registerHints(generationContext.getRuntimeHints());
7371
}
7472

7573
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesReflectionHintsProcessor.java

Lines changed: 0 additions & 252 deletions
This file was deleted.

0 commit comments

Comments
 (0)