Refine ApplicationContextAotGenerator class name generation
Refine the class name logic so that the name is passed in rather than using `ApplicationContext.getId()`. Also propagate the name so that the generated classes use it. See gh-28565
This commit is contained in:
@@ -81,19 +81,21 @@ class BeanDefinitionMethodGenerator {
|
||||
* Generate the method that returns the {@link BeanDefinition} to be
|
||||
* registered.
|
||||
* @param generationContext the generation context
|
||||
* @param featureNamePrefix the prefix to use for the feature name
|
||||
* @param beanRegistrationsCode the bean registrations code
|
||||
* @return a reference to the generated method.
|
||||
*/
|
||||
MethodReference generateBeanDefinitionMethod(GenerationContext generationContext,
|
||||
BeanRegistrationsCode beanRegistrationsCode) {
|
||||
String featureNamePrefix, BeanRegistrationsCode beanRegistrationsCode) {
|
||||
|
||||
BeanRegistrationCodeFragments codeFragments = getCodeFragments(beanRegistrationsCode);
|
||||
BeanRegistrationCodeFragments codeFragments = getCodeFragments(beanRegistrationsCode, featureNamePrefix);
|
||||
Class<?> target = codeFragments.getTarget(this.registeredBean,
|
||||
this.constructorOrFactoryMethod);
|
||||
if (!target.getName().startsWith("java.")) {
|
||||
String featureName = featureNamePrefix + "BeanDefinitions";
|
||||
GeneratedClass generatedClass = generationContext.getClassGenerator()
|
||||
.getOrGenerateClass(new BeanDefinitionsJavaFileGenerator(target),
|
||||
target, "BeanDefinitions");
|
||||
target, featureName);
|
||||
MethodGenerator methodGenerator = generatedClass.getMethodGenerator()
|
||||
.withName(getName());
|
||||
GeneratedMethod generatedMethod = generateBeanDefinitionMethod(
|
||||
@@ -112,10 +114,11 @@ class BeanDefinitionMethodGenerator {
|
||||
}
|
||||
|
||||
private BeanRegistrationCodeFragments getCodeFragments(
|
||||
BeanRegistrationsCode beanRegistrationsCode) {
|
||||
BeanRegistrationsCode beanRegistrationsCode, String featureNamePrefix) {
|
||||
|
||||
BeanRegistrationCodeFragments codeFragments = new DefaultBeanRegistrationCodeFragments(
|
||||
beanRegistrationsCode, this.registeredBean, this.methodGeneratorFactory);
|
||||
beanRegistrationsCode, this.registeredBean, this.methodGeneratorFactory,
|
||||
featureNamePrefix);
|
||||
for (BeanRegistrationAotContribution aotContribution : this.aotContributions) {
|
||||
codeFragments = aotContribution.customizeBeanRegistrationCodeFragments(codeFragments);
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ class BeanDefinitionMethodGeneratorFactory {
|
||||
* {@link BeanDefinitionMethodGenerator} will include all
|
||||
* {@link BeanRegistrationAotProcessor} provided contributions.
|
||||
* @param registeredBean the registered bean
|
||||
* @param innerBeanPropertyName the inner bean property name or {@code null}
|
||||
* @return a new {@link BeanDefinitionMethodGenerator} instance or
|
||||
* {@code null}
|
||||
*/
|
||||
|
||||
@@ -46,10 +46,10 @@ public interface BeanFactoryInitializationCode {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ID of the bean factory or and empty string if no ID is avaialble.
|
||||
* @return the bean factory ID
|
||||
* Return the name of the bean factory or and empty string if no ID is available.
|
||||
* @return the bean factory name
|
||||
*/
|
||||
default String getId() {
|
||||
default String getName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
@@ -63,12 +63,13 @@ class BeanRegistrationsAotContribution
|
||||
|
||||
ClassName className = generationContext.getClassNameGenerator().generateClassName(
|
||||
beanFactoryInitializationCode.getTarget(),
|
||||
beanFactoryInitializationCode.getId() + "BeanFactoryRegistrations");
|
||||
beanFactoryInitializationCode.getName() + "BeanFactoryRegistrations");
|
||||
BeanRegistrationsCodeGenerator codeGenerator = new BeanRegistrationsCodeGenerator(
|
||||
className);
|
||||
GeneratedMethod registerMethod = codeGenerator.getMethodGenerator()
|
||||
.generateMethod("registerBeanDefinitions")
|
||||
.using(builder -> generateRegisterMethod(builder, generationContext,
|
||||
beanFactoryInitializationCode.getName(),
|
||||
codeGenerator));
|
||||
JavaFile javaFile = codeGenerator.generatedJavaFile(className);
|
||||
generationContext.getGeneratedFiles().addSourceFile(javaFile);
|
||||
@@ -77,7 +78,7 @@ class BeanRegistrationsAotContribution
|
||||
}
|
||||
|
||||
private void generateRegisterMethod(MethodSpec.Builder builder,
|
||||
GenerationContext generationContext,
|
||||
GenerationContext generationContext, String featureNamePrefix,
|
||||
BeanRegistrationsCode beanRegistrationsCode) {
|
||||
|
||||
builder.addJavadoc("Register the bean definitions.");
|
||||
@@ -87,7 +88,7 @@ class BeanRegistrationsAotContribution
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
this.registrations.forEach((beanName, beanDefinitionMethodGenerator) -> {
|
||||
MethodReference beanDefinitionMethod = beanDefinitionMethodGenerator
|
||||
.generateBeanDefinitionMethod(generationContext,
|
||||
.generateBeanDefinitionMethod(generationContext, featureNamePrefix,
|
||||
beanRegistrationsCode);
|
||||
code.addStatement("$L.registerBeanDefinition($S, $L)",
|
||||
BEAN_FACTORY_PARAMETER_NAME, beanName,
|
||||
|
||||
@@ -54,14 +54,18 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
|
||||
private final BeanDefinitionMethodGeneratorFactory beanDefinitionMethodGeneratorFactory;
|
||||
|
||||
private final String featureNamePrefix;
|
||||
|
||||
|
||||
DefaultBeanRegistrationCodeFragments(BeanRegistrationsCode beanRegistrationsCode,
|
||||
RegisteredBean registeredBean,
|
||||
BeanDefinitionMethodGeneratorFactory beanDefinitionMethodGeneratorFactory) {
|
||||
BeanDefinitionMethodGeneratorFactory beanDefinitionMethodGeneratorFactory,
|
||||
String featureNamePrefix) {
|
||||
|
||||
this.beanRegistrationsCode = beanRegistrationsCode;
|
||||
this.registeredBean = registeredBean;
|
||||
this.beanDefinitionMethodGeneratorFactory = beanDefinitionMethodGeneratorFactory;
|
||||
this.featureNamePrefix = featureNamePrefix;
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +124,7 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
.getBeanDefinitionMethodGenerator(innerRegisteredBean, name);
|
||||
Assert.state(methodGenerator != null, "Unexpected filtering of inner-bean");
|
||||
MethodReference generatedMethod = methodGenerator
|
||||
.generateBeanDefinitionMethod(generationContext,
|
||||
.generateBeanDefinitionMethod(generationContext, this.featureNamePrefix,
|
||||
this.beanRegistrationsCode);
|
||||
return generatedMethod.toInvokeCodeBlock();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user