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
    http://cr.openjdk.java.net/~darcy/8162817.1/

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.

Thanks,

-Joe

[1] http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-July/042637.html

[2] http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-July/042645.html

Reply via email to