ClassNameGenerator can currently only be created with a required non-null Class<?> defaultTarget.
Consequently, any generated class name must be based off that; however, there are times when source code needs to be generated using a predefined class name.
For example, the AotTestAttributesCodeGenerator class in spring-test currently must hard code a constant for org.springframework.test.context.aot.AotTestAttributes__Generated since the generated mappings are created with a ClassNameGenerator that uses AotTestAttributes as the defaultTarget class and "Generated" as the feature name.
Ideally, we should be able to predefine the mappings class name as org.springframework.test.context.aot.GeneratedAotTestAttributes (or similar) and supply that to the ClassNameGenerator.
There is a similar issue in Spring Boot where code relies on a generated name.
Comment From: sbrannen
There is a similar issue in Spring Boot where code relies on a generated name.
I believe it's related to contexts within an application context hierarchy.
@philwebb, perhaps you can provide further details on that.
Comment From: philwebb
We have this line in SpringApplication which relies on the name generated by ApplicationContextInitializationCodeGenerator.
Comment From: snicoll
ClassNameGenerator can currently only be created with a required non-null Class<?> defaultTarget.
I find this bit confusing. That part is not a problem per se, it's rather that the current generatedFiles does not offer a way to include a GeneratedClass with a dedicated name. Looking at the code, the above wouldn't matter if GeneratedClasses had a way to "register" a new class based on a ClassName. We have getOrCreate as well as add to take into consideration.
Comment From: snicoll
So it turns out this need is because the TCF needs to generate two classes at a fixed place, without taking care of a featureNamePrefix if any. I find this a little odd considering that GeneratedClasses is designed completely around the need of naming things consistently. It's also a dangerous API to put in people's hand. They shouldn't be allowed to determine the exact name of the class.
I am going to decline this for that reason. I also would like we take the time to revisit the arrangement in the TCF so that it doesn't generate class names that look like any other class (i.e. non-generated ones).