@ -88,8 +88,7 @@ class BeanDefinitionMethodGeneratorTests {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 ( ) ) ;