RFR: JDK-8281462: Annotation toString output for enum not reusable for source input

Jaikiran Pai jpai at openjdk.java.net
Thu Feb 10 14:07:05 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

src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java line 197:

> 195:                 // Predicate above covers enum constants, including
> 196:                 // those with specialized class bodies.
> 197:                 return toSourceString((Enum<?>) value);

Hello Joe, would it be better to use the new syntax for `instanceof` here to avoid the subsequent cast?


else if (value instanceof Enum<?> v) 
  ....
  return toSourceString(v);

-------------

PR: https://git.openjdk.java.net/jdk/pull/7418


More information about the core-libs-dev mailing list