Polishing
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
package org.springframework.beans.factory.aot;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -32,8 +31,8 @@ import org.springframework.aot.generate.GenerationContext;
|
||||
import org.springframework.aot.generate.MethodReference;
|
||||
import org.springframework.aot.generate.MethodReference.ArgumentCodeGenerator;
|
||||
import org.springframework.aot.hint.MemberCategory;
|
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
|
||||
import org.springframework.aot.test.generate.TestGenerationContext;
|
||||
import org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.RegisteredBean;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
@@ -49,7 +48,7 @@ import org.springframework.javapoet.MethodSpec;
|
||||
import org.springframework.javapoet.ParameterizedTypeName;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
|
||||
import static org.springframework.aot.hint.predicate.RuntimeHintsPredicates.reflection;
|
||||
|
||||
/**
|
||||
* Tests for {@link BeanRegistrationsAotContribution}.
|
||||
@@ -61,32 +60,21 @@ import static org.springframework.beans.factory.aot.BeanRegistrationsAotContribu
|
||||
*/
|
||||
class BeanRegistrationsAotContributionTests {
|
||||
|
||||
private final DefaultListableBeanFactory beanFactory;
|
||||
private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
|
||||
|
||||
private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory;
|
||||
private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory(
|
||||
AotServices.factoriesAndBeans(new MockSpringFactoriesLoader(), this.beanFactory));
|
||||
|
||||
private TestGenerationContext generationContext;
|
||||
private TestGenerationContext generationContext = new TestGenerationContext();
|
||||
|
||||
private MockBeanFactoryInitializationCode beanFactoryInitializationCode;
|
||||
|
||||
|
||||
BeanRegistrationsAotContributionTests() {
|
||||
MockSpringFactoriesLoader springFactoriesLoader = new MockSpringFactoriesLoader();
|
||||
this.beanFactory = new DefaultListableBeanFactory();
|
||||
this.methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory(
|
||||
AotServices.factoriesAndBeans(springFactoriesLoader, this.beanFactory));
|
||||
this.generationContext = new TestGenerationContext();
|
||||
this.beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
|
||||
}
|
||||
private MockBeanFactoryInitializationCode beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
|
||||
|
||||
|
||||
@Test
|
||||
void applyToAppliesContribution() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
|
||||
registeredBean, null, List.of());
|
||||
BeanRegistrationsAotContribution contribution = createContribution(generator);
|
||||
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
|
||||
compile((consumer, compiled) -> {
|
||||
@@ -98,11 +86,9 @@ class BeanRegistrationsAotContributionTests {
|
||||
|
||||
@Test
|
||||
void applyToAppliesContributionWithAliases() {
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
|
||||
registeredBean, null, List.of());
|
||||
BeanRegistrationsAotContribution contribution = createContribution(generator, "testAlias");
|
||||
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
|
||||
compile((consumer, compiled) -> {
|
||||
@@ -117,11 +103,9 @@ class BeanRegistrationsAotContributionTests {
|
||||
this.generationContext = new TestGenerationContext(
|
||||
new ClassNameGenerator(TestGenerationContext.TEST_TARGET, "Management"));
|
||||
this.beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
|
||||
registeredBean, null, List.of());
|
||||
BeanRegistrationsAotContribution contribution = createContribution(generator);
|
||||
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
|
||||
compile((consumer, compiled) -> {
|
||||
@@ -133,19 +117,15 @@ class BeanRegistrationsAotContributionTests {
|
||||
@Test
|
||||
void applyToCallsRegistrationsWithBeanRegistrationsCode() {
|
||||
List<BeanRegistrationsCode> beanRegistrationsCodes = new ArrayList<>();
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList()) {
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
|
||||
registeredBean, null, List.of()) {
|
||||
|
||||
@Override
|
||||
MethodReference generateBeanDefinitionMethod(
|
||||
GenerationContext generationContext,
|
||||
MethodReference generateBeanDefinitionMethod(GenerationContext generationContext,
|
||||
BeanRegistrationsCode beanRegistrationsCode) {
|
||||
beanRegistrationsCodes.add(beanRegistrationsCode);
|
||||
return super.generateBeanDefinitionMethod(generationContext,
|
||||
beanRegistrationsCode);
|
||||
return super.generateBeanDefinitionMethod(generationContext, beanRegistrationsCode);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -158,15 +138,12 @@ class BeanRegistrationsAotContributionTests {
|
||||
|
||||
@Test
|
||||
void applyToRegisterReflectionHints() {
|
||||
List<BeanRegistrationsCode> beanRegistrationsCodes = new ArrayList<>();
|
||||
RegisteredBean registeredBean = registerBean(
|
||||
new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||
this.methodGeneratorFactory, registeredBean, null,
|
||||
Collections.emptyList());
|
||||
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
|
||||
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
|
||||
registeredBean, null, List.of());
|
||||
BeanRegistrationsAotContribution contribution = createContribution(generator);
|
||||
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
|
||||
assertThat(RuntimeHintsPredicates.reflection().onType(TestBean.class)
|
||||
assertThat(reflection().onType(TestBean.class)
|
||||
.withMemberCategory(MemberCategory.INTROSPECT_DECLARED_METHODS))
|
||||
.accepts(this.generationContext.getRuntimeHints());
|
||||
}
|
||||
@@ -178,12 +155,9 @@ class BeanRegistrationsAotContributionTests {
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "cast" })
|
||||
private void compile(
|
||||
BiConsumer<Consumer<DefaultListableBeanFactory>, Compiled> result) {
|
||||
MethodReference beanRegistrationsMethodReference = this.beanFactoryInitializationCode
|
||||
.getInitializers().get(0);
|
||||
MethodReference aliasesMethodReference = this.beanFactoryInitializationCode
|
||||
.getInitializers().get(1);
|
||||
private void compile(BiConsumer<Consumer<DefaultListableBeanFactory>, Compiled> result) {
|
||||
MethodReference beanRegistrationsMethodReference = this.beanFactoryInitializationCode.getInitializers().get(0);
|
||||
MethodReference aliasesMethodReference = this.beanFactoryInitializationCode.getInitializers().get(1);
|
||||
this.beanFactoryInitializationCode.getTypeBuilder().set(type -> {
|
||||
ArgumentCodeGenerator beanFactory = ArgumentCodeGenerator.of(DefaultListableBeanFactory.class, "beanFactory");
|
||||
ClassName className = this.beanFactoryInitializationCode.getClassName();
|
||||
@@ -191,7 +165,8 @@ class BeanRegistrationsAotContributionTests {
|
||||
CodeBlock aliasesMethodInvocation = aliasesMethodReference.toInvokeCodeBlock(beanFactory, className);
|
||||
type.addModifiers(Modifier.PUBLIC);
|
||||
type.addSuperinterface(ParameterizedTypeName.get(Consumer.class, DefaultListableBeanFactory.class));
|
||||
type.addMethod(MethodSpec.methodBuilder("accept").addModifiers(Modifier.PUBLIC)
|
||||
type.addMethod(MethodSpec.methodBuilder("accept")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(DefaultListableBeanFactory.class, "beanFactory")
|
||||
.addStatement(beanRegistrationsMethodInvocation)
|
||||
.addStatement(aliasesMethodInvocation)
|
||||
@@ -204,7 +179,8 @@ class BeanRegistrationsAotContributionTests {
|
||||
|
||||
private BeanRegistrationsAotContribution createContribution(
|
||||
BeanDefinitionMethodGenerator methodGenerator,String... aliases) {
|
||||
return new BeanRegistrationsAotContribution(Map.of(new BeanRegistrationKey("testBean", TestBean.class), new Registration(methodGenerator, aliases)));
|
||||
return new BeanRegistrationsAotContribution(
|
||||
Map.of(new BeanRegistrationKey("testBean", TestBean.class), new Registration(methodGenerator, aliases)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user