Looks good,
Paul.
> On 31 May 2016, at 21:43, joe darcy <joe.da...@oracle.com> wrote:
>
> Hello,
>
> Some background, when everything is going well, the toString form of an
> annotation looks something like
>
> // Old non-erroneous annotation
>
> @DangerousAnnotation(utopia=BRIGADOON,
> thirtyTwoBitsAreNotEnough=42,
> classy=interface Fleeting,
> classies=[class java.lang.Object, int],
> moreClassies=[])
>
> with newlines added for clarity. However, there are various kinds of problems
> that can occur with the data in an annotation and in those cases an exception
> proxy is created so that if the corresponding method is called an exception
> is thrown rather than the data being returned. In these cases the string form
> of an annotation with exceptions-that-would-be-thrown-if-methods-are-called
> looks like:
>
> // Current erroneous annotation
>
> @DangerousAnnotation(utopia=sun.reflect.annotation.EnumConstantNotPresentExceptionProxy@766a8c91,
> thirtyTwoBitsAreNotEnough=sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy@1f40866a,
> classy=sun.reflect.annotation.TypeNotPresentExceptionProxy@3de4f72b,
> classies=[class java.lang.Object, int],
> moreClassies=[])
>
> Having the proxy implementation leak through to the string representation in
> this case is not helpful and the string can be made more informative. In
> addition, for Class-related values, the current form doesn't use the syntax
> which is legal in source code for annotations. Class-valued annotations are
> set using Class literal syntax, "Foo.class" rather than "class Foo", and
> arrays of Class-valued item should use braces ("{}") rather than brackets,
> ("[]").
>
> For example, it would be better to have annotation string representations
> which looked like:
>
> // New non-erroneous annotation
>
> @DangerousAnnotation(utopia=BRIGADOON,
> thirtyTwoBitsAreNotEnough=42,
> classy=Fleeting.class,
> classies={java.lang.Object.class, int.class},
> moreClassies={})
>
> // New erroneous annotation
>
> @DangerousAnnotation(utopia=BRIGADOON /* Warning: constant not present! */,
> thirtyTwoBitsAreNotEnough=/* Warning type mismatch! "class
> java.lang.Integer[42]" */,
> classy=Fleeting.class /* Warning: type not present! */,
> classies={java.lang.Object.class, int.class},
> moreClassies={})
>
> Please review the code to implement these behavioral changes:
>
> 5040830: (ann) please improve toString() for annotations containing
> exception proxies
> http://cr.openjdk.java.net/~darcy/5040830.2
>
> (If you have erroneous Class-value items in an array of Class values, then
> this throws an exception since the exception proxy cannot be stored into the
> Class[].)
>
> Thanks,
>
> -Joe
>