ClassNameGenerator
has two variants for the generateClassName
feature. One that takes a target Class<?>
and another that takes a target String
. I'm a bit confused by the concept of a target here and I think we should explain that a bit more in the javadocs.
These methods also have different behavior:
ClassName first = this.generator.generateClassName(java.io.InputStream.class, "bytes");
// will result in java.io.InputStream__Bytes
ClassName first = this.generator.generateClassName("java.io.InputStream", "bytes");
// will result in __.JavaIoInputStream__Bytes
Even if the difference of behavior is intended, the name and docs are very similar. Also, a common use case for the ClassNameGenerator
is about generating sources in a specific package to work around visibility issues. The second variant can make this case more difficult to achieve.
As a side note, this class is also referring to the now defunct @see GeneratedClassName
.
cc @philwebb @snicoll
Comment From: philwebb
The String
variant was added to support generation where there isn't a single class that can be linked. I think it's currently only used in BeanRegistrationsAotContribution
. We should probably rename that method to make it clearer that there is no target class.
I know @snicoll was wondering about the use of the __
package in general, perhaps we can make the generated BeanRegistrations
class be in the same package as the @SpringBootApplication
class then we can drop the string version entirely.
The ClassNameGenerator
should be removed, we dropped that class during the prototype work.
Comment From: snicoll
The second method that takes a String
rather than a Class<?>
has been removed in 4bd33cb6e0659df2cd0b9fa04feea8fd77e5a16d. I am going to look at the Javadoc and see if we can clarify