RFR: JDK-8281462: Annotation toString output for enum not reusable for source input
Sam Brannen
duke at openjdk.java.net
Thu Feb 10 15:00:12 UTC 2022
On Thu, 10 Feb 2022 05:49:47 GMT, Joe Darcy <darcy at openjdk.org> wrote:
> Two changes to the toString output for annotations to give better source fidelity:
>
> 1) For enum constants, call their name method rather than their toString method. An enum class can override the toString method to print something other than the name.
>
> 2) Switch from using binary names (names with "$" for nested types) to canonical names (names with "." with nested types)
>
> Various existing regression tests are updated to accommodate the changes.
>
> Please also review the CSR:
> https://bugs.openjdk.java.net/browse/JDK-8281568
Changes requested by sbrannen at github.com (no known OpenJDK username).
src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java line 256:
> 254: return Objects.toString(finalComponent.getCanonicalName(),
> 255: "<no canonical name>") +
> 256: arrayBrackets.toString() + ".class";
Since we're using the canonical name now (which takes the array brackets into account), can't the whole method be simplified down to the following?
Suggestion:
return Objects.toString(clazz.getCanonicalName(), "<no canonical name>") + ".class";
-------------
PR: https://git.openjdk.java.net/jdk/pull/7418
More information about the core-libs-dev
mailing list