Polishing
This commit is contained in:
@@ -88,8 +88,7 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
|
||||
@Test
|
||||
void generateBeanDefinitionMethodGeneratesMethod() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
@@ -172,10 +171,8 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
|
||||
@Test
|
||||
void generateBeanDefinitionMethodWhenHasInstancePostProcessorGeneratesMethod() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanRegistrationAotContribution aotContribution = (generationContext,
|
||||
beanRegistrationCode) -> {
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanRegistrationAotContribution aotContribution = (generationContext, beanRegistrationCode) -> {
|
||||
GeneratedMethod generatedMethod = beanRegistrationCode.getMethods().add("postProcess", method ->
|
||||
method.addModifiers(Modifier.STATIC)
|
||||
.addParameter(RegisteredBean.class, "registeredBean")
|
||||
@@ -183,16 +180,14 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
.returns(TestBean.class).addCode("return new $T($S);", TestBean.class, "postprocessed"));
|
||||
beanRegistrationCode.addInstancePostProcessor(generatedMethod.toMethodReference());
|
||||
};
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections
|
||||
.singletonList(aotContribution);
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections.singletonList(aotContribution);
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null, aotContributions);
|
||||
MethodReference method = generator.generateBeanDefinitionMethod(
|
||||
this.generationContext, this.beanRegistrationsCode);
|
||||
compile(method, (actual, compiled) -> {
|
||||
assertThat(actual.getBeanClass()).isEqualTo(TestBean.class);
|
||||
InstanceSupplier<?> supplier = (InstanceSupplier<?>) actual
|
||||
.getInstanceSupplier();
|
||||
InstanceSupplier<?> supplier = (InstanceSupplier<?>) actual.getInstanceSupplier();
|
||||
try {
|
||||
TestBean instance = (TestBean) supplier.get(registeredBean);
|
||||
assertThat(instance.getName()).isEqualTo("postprocessed");
|
||||
@@ -204,9 +199,10 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test // gh-28748
|
||||
@Test // gh-28748
|
||||
void generateBeanDefinitionMethodWhenHasInstancePostProcessorAndFactoryMethodGeneratesMethod() {
|
||||
this.beanFactory.registerBeanDefinition("testBeanConfiguration", new RootBeanDefinition(TestBeanConfiguration.class));
|
||||
this.beanFactory.registerBeanDefinition("testBeanConfiguration",
|
||||
new RootBeanDefinition(TestBeanConfiguration.class));
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
|
||||
beanDefinition.setFactoryBeanName("testBeanConfiguration");
|
||||
beanDefinition.setFactoryMethodName("testBean");
|
||||
@@ -220,8 +216,7 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
.returns(TestBean.class).addCode("return new $T($S);", TestBean.class, "postprocessed"));
|
||||
beanRegistrationCode.addInstancePostProcessor(generatedMethod.toMethodReference());
|
||||
};
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections
|
||||
.singletonList(aotContribution);
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections.singletonList(aotContribution);
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null, aotContributions);
|
||||
MethodReference method = generator.generateBeanDefinitionMethod(
|
||||
@@ -244,10 +239,9 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
|
||||
@Test
|
||||
void generateBeanDefinitionMethodWhenHasCodeFragmentsCustomizerGeneratesMethod() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanRegistrationAotContribution aotContribution = BeanRegistrationAotContribution
|
||||
.withCustomCodeFragments(this::customizeBeanDefinitionCode);
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanRegistrationAotContribution aotContribution =
|
||||
BeanRegistrationAotContribution.withCustomCodeFragments(this::customizeBeanDefinitionCode);
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections.singletonList(aotContribution);
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null, aotContributions);
|
||||
@@ -260,21 +254,16 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
});
|
||||
}
|
||||
|
||||
private BeanRegistrationCodeFragments customizeBeanDefinitionCode(
|
||||
BeanRegistrationCodeFragments codeFragments) {
|
||||
private BeanRegistrationCodeFragments customizeBeanDefinitionCode(BeanRegistrationCodeFragments codeFragments) {
|
||||
return new BeanRegistrationCodeFragmentsDecorator(codeFragments) {
|
||||
|
||||
@Override
|
||||
public CodeBlock generateNewBeanDefinitionCode(
|
||||
GenerationContext generationContext,
|
||||
ResolvableType beanType,
|
||||
BeanRegistrationCode beanRegistrationCode) {
|
||||
public CodeBlock generateNewBeanDefinitionCode(GenerationContext generationContext,
|
||||
ResolvableType beanType, BeanRegistrationCode beanRegistrationCode) {
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement("// I am custom");
|
||||
code.add(super.generateNewBeanDefinitionCode(generationContext, beanType, beanRegistrationCode));
|
||||
return code.build();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@@ -301,10 +290,9 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
beanDefinition.setAttribute("a", "A");
|
||||
beanDefinition.setAttribute("b", "B");
|
||||
RegisteredBean registeredBean = registerBean(beanDefinition);
|
||||
BeanRegistrationAotContribution aotContribution = BeanRegistrationAotContribution
|
||||
.withCustomCodeFragments(this::customizeAttributeFilter);
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections
|
||||
.singletonList(aotContribution);
|
||||
BeanRegistrationAotContribution aotContribution =
|
||||
BeanRegistrationAotContribution.withCustomCodeFragments(this::customizeAttributeFilter);
|
||||
List<BeanRegistrationAotContribution> aotContributions = Collections.singletonList(aotContribution);
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
aotContributions);
|
||||
@@ -316,20 +304,15 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
});
|
||||
}
|
||||
|
||||
private BeanRegistrationCodeFragments customizeAttributeFilter(
|
||||
BeanRegistrationCodeFragments codeFragments) {
|
||||
private BeanRegistrationCodeFragments customizeAttributeFilter(BeanRegistrationCodeFragments codeFragments) {
|
||||
return new BeanRegistrationCodeFragmentsDecorator(codeFragments) {
|
||||
|
||||
@Override
|
||||
public CodeBlock generateSetBeanDefinitionPropertiesCode(
|
||||
GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode,
|
||||
RootBeanDefinition beanDefinition,
|
||||
public CodeBlock generateSetBeanDefinitionPropertiesCode(GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode, RootBeanDefinition beanDefinition,
|
||||
Predicate<String> attributeFilter) {
|
||||
return super.generateSetBeanDefinitionPropertiesCode(generationContext,
|
||||
beanRegistrationCode, beanDefinition, "a"::equals);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@@ -471,8 +454,7 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
@Test
|
||||
@CompileWithForkedClassLoader
|
||||
void generateBeanDefinitionMethodWhenPackagePrivateBean() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(PackagePrivateTestBean.class));
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(PackagePrivateTestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
@@ -502,6 +484,13 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
testBeanDefinitionMethodInCurrentFile(DocumentBuilderFactory.class, beanDefinition);
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateBeanDefinitionMethodWhenBeanIsOfPrimitiveType() {
|
||||
RootBeanDefinition beanDefinition = (RootBeanDefinition) BeanDefinitionBuilder
|
||||
.rootBeanDefinition(Boolean.class).setFactoryMethod("parseBoolean").addConstructorArgValue("true").getBeanDefinition();
|
||||
testBeanDefinitionMethodInCurrentFile(Boolean.class, beanDefinition);
|
||||
}
|
||||
|
||||
private void testBeanDefinitionMethodInCurrentFile(Class<?> targetType, RootBeanDefinition beanDefinition) {
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(beanDefinition));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
@@ -525,8 +514,7 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
return RegisteredBean.of(this.beanFactory, beanName);
|
||||
}
|
||||
|
||||
private void compile(MethodReference method,
|
||||
BiConsumer<RootBeanDefinition, Compiled> result) {
|
||||
private void compile(MethodReference method, BiConsumer<RootBeanDefinition, Compiled> result) {
|
||||
this.beanRegistrationsCode.getTypeBuilder().set(type -> {
|
||||
CodeBlock methodInvocation = method.toInvokeCodeBlock(ArgumentCodeGenerator.none(),
|
||||
this.beanRegistrationsCode.getClassName());
|
||||
|
||||
Reference in New Issue
Block a user