|
|
|
|
@ -23,6 +23,8 @@ import java.util.function.Supplier;
@@ -23,6 +23,8 @@ import java.util.function.Supplier;
|
|
|
|
|
import javax.lang.model.element.Modifier; |
|
|
|
|
|
|
|
|
|
import org.assertj.core.api.ThrowingConsumer; |
|
|
|
|
import org.junit.jupiter.api.Disabled; |
|
|
|
|
import org.junit.jupiter.api.Nested; |
|
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
|
|
|
|
|
|
import org.springframework.aot.generate.GeneratedClass; |
|
|
|
|
@ -44,6 +46,12 @@ import org.springframework.beans.testfixture.beans.factory.generator.InnerCompon
@@ -44,6 +46,12 @@ import org.springframework.beans.testfixture.beans.factory.generator.InnerCompon
|
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.InnerComponentConfiguration.EnvironmentAwareComponent; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.InnerComponentConfiguration.NoDependencyComponent; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.SimpleConfiguration; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedBean; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedConstructor; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedForRemovalBean; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedForRemovalConstructor; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedForRemovalMemberConfiguration; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.deprecation.DeprecatedMemberConfiguration; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.factory.NumberHolder; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.factory.NumberHolderFactoryBean; |
|
|
|
|
import org.springframework.beans.testfixture.beans.factory.generator.factory.SampleFactory; |
|
|
|
|
@ -57,6 +65,7 @@ import org.springframework.javapoet.ParameterizedTypeName;
@@ -57,6 +65,7 @@ import org.springframework.javapoet.ParameterizedTypeName;
|
|
|
|
|
import org.springframework.util.ReflectionUtils; |
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
|
import static org.assertj.core.api.Assertions.assertThatNoException; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Tests for {@link InstanceSupplierCodeGenerator}. |
|
|
|
|
@ -68,18 +77,20 @@ class InstanceSupplierCodeGeneratorTests {
@@ -68,18 +77,20 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
|
|
|
|
|
private final TestGenerationContext generationContext; |
|
|
|
|
|
|
|
|
|
private final DefaultListableBeanFactory beanFactory; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
InstanceSupplierCodeGeneratorTests() { |
|
|
|
|
this.generationContext = new TestGenerationContext(); |
|
|
|
|
this.beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenHasDefaultConstructor() { |
|
|
|
|
BeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
TestBean bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
TestBean bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(TestBean.class); |
|
|
|
|
assertThat(compiled.getSourceFile()) |
|
|
|
|
.contains("InstanceSupplier.using(TestBean::new)"); |
|
|
|
|
@ -91,11 +102,9 @@ class InstanceSupplierCodeGeneratorTests {
@@ -91,11 +102,9 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenHasConstructorWithParameter() { |
|
|
|
|
BeanDefinition beanDefinition = new RootBeanDefinition(InjectionComponent.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerSingleton("injected", "injected"); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
InjectionComponent bean = getBean(beanFactory, beanDefinition, |
|
|
|
|
instanceSupplier); |
|
|
|
|
this.beanFactory.registerSingleton("injected", "injected"); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
InjectionComponent bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(InjectionComponent.class).extracting("bean") |
|
|
|
|
.isEqualTo("injected"); |
|
|
|
|
}); |
|
|
|
|
@ -107,10 +116,9 @@ class InstanceSupplierCodeGeneratorTests {
@@ -107,10 +116,9 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
void generateWhenHasConstructorWithInnerClassAndDefaultConstructor() { |
|
|
|
|
RootBeanDefinition beanDefinition = new RootBeanDefinition( |
|
|
|
|
NoDependencyComponent.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerSingleton("configuration", new InnerComponentConfiguration()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
NoDependencyComponent bean = getBean(beanFactory, beanDefinition, |
|
|
|
|
this.beanFactory.registerSingleton("configuration", new InnerComponentConfiguration()); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
NoDependencyComponent bean = getBean(beanDefinition, |
|
|
|
|
instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(NoDependencyComponent.class); |
|
|
|
|
assertThat(compiled.getSourceFile()).contains( |
|
|
|
|
@ -124,11 +132,10 @@ class InstanceSupplierCodeGeneratorTests {
@@ -124,11 +132,10 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
void generateWhenHasConstructorWithInnerClassAndParameter() { |
|
|
|
|
BeanDefinition beanDefinition = new RootBeanDefinition( |
|
|
|
|
EnvironmentAwareComponent.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerSingleton("configuration", new InnerComponentConfiguration()); |
|
|
|
|
beanFactory.registerSingleton("environment", new StandardEnvironment()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
EnvironmentAwareComponent bean = getBean(beanFactory, beanDefinition, |
|
|
|
|
this.beanFactory.registerSingleton("configuration", new InnerComponentConfiguration()); |
|
|
|
|
this.beanFactory.registerSingleton("environment", new StandardEnvironment()); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
EnvironmentAwareComponent bean = getBean(beanDefinition, |
|
|
|
|
instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(EnvironmentAwareComponent.class); |
|
|
|
|
assertThat(compiled.getSourceFile()).contains( |
|
|
|
|
@ -142,10 +149,9 @@ class InstanceSupplierCodeGeneratorTests {
@@ -142,10 +149,9 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
void generateWhenHasConstructorWithGeneric() { |
|
|
|
|
BeanDefinition beanDefinition = new RootBeanDefinition( |
|
|
|
|
NumberHolderFactoryBean.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerSingleton("number", 123); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
NumberHolder<?> bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
this.beanFactory.registerSingleton("number", 123); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
NumberHolder<?> bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(NumberHolder.class); |
|
|
|
|
assertThat(bean).extracting("number").isNull(); // No property actually set
|
|
|
|
|
assertThat(compiled.getSourceFile()).contains("NumberHolderFactoryBean::new"); |
|
|
|
|
@ -158,9 +164,8 @@ class InstanceSupplierCodeGeneratorTests {
@@ -158,9 +164,8 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
void generateWhenHasPrivateConstructor() { |
|
|
|
|
BeanDefinition beanDefinition = new RootBeanDefinition( |
|
|
|
|
TestBeanWithPrivateConstructor.class); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
TestBeanWithPrivateConstructor bean = getBean(beanFactory, beanDefinition, |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
TestBeanWithPrivateConstructor bean = getBean(beanDefinition, |
|
|
|
|
instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(TestBeanWithPrivateConstructor.class); |
|
|
|
|
assertThat(compiled.getSourceFile()) |
|
|
|
|
@ -175,11 +180,10 @@ class InstanceSupplierCodeGeneratorTests {
@@ -175,11 +180,10 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("stringBean", "config").getBeanDefinition(); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(String.class); |
|
|
|
|
assertThat(bean).isEqualTo("Hello"); |
|
|
|
|
assertThat(compiled.getSourceFile()).contains( |
|
|
|
|
@ -195,11 +199,10 @@ class InstanceSupplierCodeGeneratorTests {
@@ -195,11 +199,10 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("privateStaticStringBean", "config") |
|
|
|
|
.getBeanDefinition(); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(String.class); |
|
|
|
|
assertThat(bean).isEqualTo("Hello"); |
|
|
|
|
assertThat(compiled.getSourceFile()) |
|
|
|
|
@ -215,11 +218,10 @@ class InstanceSupplierCodeGeneratorTests {
@@ -215,11 +218,10 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(Integer.class) |
|
|
|
|
.setFactoryMethodOnBean("integerBean", "config").getBeanDefinition(); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
Integer bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
Integer bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(Integer.class); |
|
|
|
|
assertThat(bean).isEqualTo(42); |
|
|
|
|
assertThat(compiled.getSourceFile()) |
|
|
|
|
@ -236,13 +238,12 @@ class InstanceSupplierCodeGeneratorTests {
@@ -236,13 +238,12 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
.setFactoryMethodOnBean("create", "config").getBeanDefinition(); |
|
|
|
|
beanDefinition.setResolvedFactoryMethod(ReflectionUtils |
|
|
|
|
.findMethod(SampleFactory.class, "create", Number.class, String.class)); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(SampleFactory.class).getBeanDefinition()); |
|
|
|
|
beanFactory.registerSingleton("number", 42); |
|
|
|
|
beanFactory.registerSingleton("string", "test"); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
this.beanFactory.registerSingleton("number", 42); |
|
|
|
|
this.beanFactory.registerSingleton("string", "test"); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
String bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(String.class); |
|
|
|
|
assertThat(bean).isEqualTo("42test"); |
|
|
|
|
assertThat(compiled.getSourceFile()).contains("SampleFactory.create("); |
|
|
|
|
@ -257,11 +258,10 @@ class InstanceSupplierCodeGeneratorTests {
@@ -257,11 +258,10 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
.rootBeanDefinition(Integer.class) |
|
|
|
|
.setFactoryMethodOnBean("throwingIntegerBean", "config") |
|
|
|
|
.getBeanDefinition(); |
|
|
|
|
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition()); |
|
|
|
|
compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
Integer bean = getBean(beanFactory, beanDefinition, instanceSupplier); |
|
|
|
|
compile(beanDefinition, (instanceSupplier, compiled) -> { |
|
|
|
|
Integer bean = getBean(beanDefinition, instanceSupplier); |
|
|
|
|
assertThat(bean).isInstanceOf(Integer.class); |
|
|
|
|
assertThat(bean).isEqualTo(42); |
|
|
|
|
assertThat(compiled.getSourceFile()).doesNotContain(") throws Exception {"); |
|
|
|
|
@ -270,6 +270,108 @@ class InstanceSupplierCodeGeneratorTests {
@@ -270,6 +270,108 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
.satisfies(hasMethodWithMode(ExecutableMode.INTROSPECT)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Nested |
|
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
|
class DeprecationTests { |
|
|
|
|
|
|
|
|
|
private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() |
|
|
|
|
.withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Werror"); |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@Disabled("Need to move to a separate method so that the warning can be suppressed") |
|
|
|
|
void generateWhenTargetClassIsDeprecated() { |
|
|
|
|
compileAndCheckWarnings(new RootBeanDefinition(DeprecatedBean.class)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetConstructorIsDeprecated() { |
|
|
|
|
compileAndCheckWarnings(new RootBeanDefinition(DeprecatedConstructor.class)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetFactoryMethodIsDeprecated() { |
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("deprecatedString", "config").getBeanDefinition(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(DeprecatedMemberConfiguration.class).getBeanDefinition()); |
|
|
|
|
compileAndCheckWarnings(beanDefinition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetFactoryMethodParameterIsDeprecated() { |
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("deprecatedParameter", "config").getBeanDefinition(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(DeprecatedMemberConfiguration.class).getBeanDefinition()); |
|
|
|
|
beanFactory.registerBeanDefinition("parameter", new RootBeanDefinition(DeprecatedBean.class)); |
|
|
|
|
compileAndCheckWarnings(beanDefinition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetFactoryMethodReturnTypeIsDeprecated() { |
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(DeprecatedBean.class) |
|
|
|
|
.setFactoryMethodOnBean("deprecatedReturnType", "config").getBeanDefinition(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(DeprecatedMemberConfiguration.class).getBeanDefinition()); |
|
|
|
|
compileAndCheckWarnings(beanDefinition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void compileAndCheckWarnings(BeanDefinition beanDefinition) { |
|
|
|
|
assertThatNoException().isThrownBy(() -> compile(TEST_COMPILER, beanDefinition, |
|
|
|
|
((instanceSupplier, compiled) -> {}))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Nested |
|
|
|
|
@SuppressWarnings("removal") |
|
|
|
|
class DeprecationForRemovalTests { |
|
|
|
|
|
|
|
|
|
private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() |
|
|
|
|
.withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Werror"); |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@Disabled("Need to move to a separate method so that the warning can be suppressed") |
|
|
|
|
void generateWhenTargetClassIsDeprecatedForRemoval() { |
|
|
|
|
compileAndCheckWarnings(new RootBeanDefinition(DeprecatedForRemovalBean.class)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetConstructorIsDeprecatedForRemoval() { |
|
|
|
|
compileAndCheckWarnings(new RootBeanDefinition(DeprecatedForRemovalConstructor.class)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetFactoryMethodIsDeprecatedForRemoval() { |
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("deprecatedString", "config").getBeanDefinition(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(DeprecatedForRemovalMemberConfiguration.class).getBeanDefinition()); |
|
|
|
|
compileAndCheckWarnings(beanDefinition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void generateWhenTargetFactoryMethodParameterIsDeprecatedForRemoval() { |
|
|
|
|
BeanDefinition beanDefinition = BeanDefinitionBuilder |
|
|
|
|
.rootBeanDefinition(String.class) |
|
|
|
|
.setFactoryMethodOnBean("deprecatedParameter", "config").getBeanDefinition(); |
|
|
|
|
beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder |
|
|
|
|
.genericBeanDefinition(DeprecatedForRemovalMemberConfiguration.class).getBeanDefinition()); |
|
|
|
|
beanFactory.registerBeanDefinition("parameter", new RootBeanDefinition(DeprecatedForRemovalBean.class)); |
|
|
|
|
compileAndCheckWarnings(beanDefinition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void compileAndCheckWarnings(BeanDefinition beanDefinition) { |
|
|
|
|
assertThatNoException().isThrownBy(() -> compile(TEST_COMPILER, beanDefinition, |
|
|
|
|
((instanceSupplier, compiled) -> {}))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ReflectionHints getReflectionHints() { |
|
|
|
|
return this.generationContext.getRuntimeHints().reflection(); |
|
|
|
|
} |
|
|
|
|
@ -287,17 +389,20 @@ class InstanceSupplierCodeGeneratorTests {
@@ -287,17 +389,20 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
|
private <T> T getBean(DefaultListableBeanFactory beanFactory, |
|
|
|
|
BeanDefinition beanDefinition, InstanceSupplier<?> instanceSupplier) { |
|
|
|
|
private <T> T getBean(BeanDefinition beanDefinition, InstanceSupplier<?> instanceSupplier) { |
|
|
|
|
((RootBeanDefinition) beanDefinition).setInstanceSupplier(instanceSupplier); |
|
|
|
|
beanFactory.registerBeanDefinition("testBean", beanDefinition); |
|
|
|
|
return (T) beanFactory.getBean("testBean"); |
|
|
|
|
this.beanFactory.registerBeanDefinition("testBean", beanDefinition); |
|
|
|
|
return (T) this.beanFactory.getBean("testBean"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void compile(BeanDefinition beanDefinition, BiConsumer<InstanceSupplier<?>, Compiled> result) { |
|
|
|
|
compile(TestCompiler.forSystem(), beanDefinition, result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void compile(DefaultListableBeanFactory beanFactory, BeanDefinition beanDefinition, |
|
|
|
|
private void compile(TestCompiler testCompiler, BeanDefinition beanDefinition, |
|
|
|
|
BiConsumer<InstanceSupplier<?>, Compiled> result) { |
|
|
|
|
|
|
|
|
|
DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory(beanFactory); |
|
|
|
|
DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory(this.beanFactory); |
|
|
|
|
freshBeanFactory.registerBeanDefinition("testBean", beanDefinition); |
|
|
|
|
RegisteredBean registeredBean = RegisteredBean.of(freshBeanFactory, "testBean"); |
|
|
|
|
DeferredTypeBuilder typeBuilder = new DeferredTypeBuilder(); |
|
|
|
|
@ -317,8 +422,8 @@ class InstanceSupplierCodeGeneratorTests {
@@ -317,8 +422,8 @@ class InstanceSupplierCodeGeneratorTests {
|
|
|
|
|
.addStatement("return $L", generatedCode).build()); |
|
|
|
|
}); |
|
|
|
|
this.generationContext.writeGeneratedContent(); |
|
|
|
|
TestCompiler.forSystem().with(this.generationContext).compile(compiled -> |
|
|
|
|
result.accept((InstanceSupplier<?>) compiled.getInstance(Supplier.class).get(), compiled)); |
|
|
|
|
testCompiler.with(this.generationContext).compile(compiled -> result.accept( |
|
|
|
|
(InstanceSupplier<?>) compiled.getInstance(Supplier.class).get(), compiled)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|