RFR: JDK-8198945: Invalid RuntimeVisibleTypeAnnotations for annotation on anonymous class type parameter
Alex Buckley
alex.buckley at oracle.com
Tue Jul 3 18:37:11 UTC 2018
On 7/2/2018 7:34 PM, Liam Miller-Cushon wrote:
> On Mon, Jul 2, 2018 at 7:14 PM Werner Dietl <wdietl at gmail.com
> <mailto:wdietl at gmail.com>> wrote:
>
> Class Test$1 has no type arguments, so I would find having NEW type
> annotations on a type argument confusing.
>
> Ah, right. Thanks for the catch.
>
> So I would be for either no NEW type annotations for anonymous class
> instantiations, or duplicating only the top-level type annotations.
> For method f() this would generate three type annotations:
>
> RuntimeInvisibleTypeAnnotations:
> 0: #22(): NEW, offset=9
> Test$TA
> 1: #23(): NEW, offset=9, location=[TYPE_ARGUMENT(0)]
> Test$TB
> 2: #22(): NEW, offset=0
> Test$TA
>
> Duplicating only the top-level type annotations would be my slight
> preference over no NEW annotations at all.
>
>
> I revised the fix to only duplicate top-level annotations:
> http://cr.openjdk.java.net/~cushon/8198945/webrev.02
> <http://cr.openjdk.java.net/~cushon/8198945/webrev.02/>
I am OK with this. To be clear, given this code in a method of class Test:
new @TA I<@TB Object>() {};
new @TA J<@TB Object>();
we're going to generate annotations as if the code was:
new @TA Test$1();
new @TA J<@TB Object>();
class Test$1 implements @TA I<@TB Object> {}
(The type_annotation structure for the first @TA has a NEW target_type,
while the type_annotation structure for the second @TA has a
CLASS_EXTENDS target_type. Since the structures are not identical, it's
misleading to say that anything is "duplicated".)
Alex
More information about the compiler-dev
mailing list