JDK 9 RFR of JDK-8162817: Annotation toString output not reusable for source input

joe darcy joe.darcy at oracle.com
Mon Aug 1 21:39:41 UTC 2016

As pointed out by recent core-libs-dev traffic ([1] [2]), the toString 
output for annotation objects cannot be directly reused as source input 
if the annotation values are any of:

* Class values of array classes (uses JVM name)
* Arrays (output uses brackets ("[]") rather than braces {"{}")

In addition, there are problems with other situations including:

* Strings don't have surrounding " characters.

* Chars don't have surrounding ' charcters.

* Long values outside of the int range don't have a "L" suffix.

Please review the webrev for the change addressing these shortcomings:

     JDK-8162817: Annotation toString output not reusable for source input

This change should cover 99 44/100 % of the annotation values that 
appear in practice; limited efforts were taken quoting characters in 
strings, etc.

The basic approach is to introduce a family of overloaded toSourceString 
methods to wrap/filter different kinds of values coupled with methods to 
convert the various primitive arrays to Stream<String> for final 
processing by a shared method to surround an array by "{" and "}" and 
add comma separators as needed.





More information about the core-libs-dev mailing list