Generate missing hints for custom PropertySource factories

Closes gh-30175
This commit is contained in:
Stephane Nicoll
2023-04-25 16:15:58 +02:00
parent 230840a41c
commit f6875b11ff
2 changed files with 35 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,7 +29,9 @@ import org.junit.jupiter.api.Test;
import org.springframework.aot.generate.MethodReference;
import org.springframework.aot.generate.MethodReference.ArgumentCodeGenerator;
import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.ResourcePatternHint;
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
import org.springframework.aot.test.generate.TestGenerationContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
@@ -50,6 +52,7 @@ import org.springframework.context.testfixture.context.generator.SimpleComponent
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.test.tools.Compiled;
import org.springframework.core.test.tools.TestCompiler;
import org.springframework.core.type.AnnotationMetadata;
@@ -291,6 +294,16 @@ class ConfigurationClassPostProcessorAotContributionTests {
});
}
@Test
void applyToWhenHasCustomFactoryRegistersHints() {
BeanFactoryInitializationAotContribution contribution = getContribution(
PropertySourceWithCustomFactoryConfiguration.class);
contribution.applyTo(generationContext, beanFactoryInitializationCode);
assertThat(RuntimeHintsPredicates.reflection().onType(CustomPropertySourcesFactory.class)
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS))
.accepts(generationContext.getRuntimeHints());
}
@SuppressWarnings("unchecked")
private void compile(BiConsumer<Consumer<GenericApplicationContext>, Compiled> result) {
MethodReference methodReference = beanFactoryInitializationCode.getInitializers().get(0);
@@ -332,6 +345,13 @@ class ConfigurationClassPostProcessorAotContributionTests {
}
@Configuration(proxyBeanMethods = false)
@PropertySource(value = "classpath:org/springframework/context/annotation/p1.properties",
factory = CustomPropertySourcesFactory.class)
static class PropertySourceWithCustomFactoryConfiguration {
}
}
@Nested
@@ -379,4 +399,8 @@ class ConfigurationClassPostProcessorAotContributionTests {
.containsExactly(entry(key.getName(), value.getName()));
}
static class CustomPropertySourcesFactory extends DefaultPropertySourceFactory {
}
}