<div dir="auto"><div dir="auto">Alex, </div><div dir="auto"><br></div><div dir="auto">Thanks for the confirmation. I appreciate it. </div><div dir="auto"><br></div><div dir="auto">We suspect that this was introduced in a refactoring and not noticed due to a lack of tests. I would think that this particular scenario is relatively rare (a public interface that mentions an array of inner types), but it is a serious issue for some of our users.</div><div dir="auto"><br></div><div dir="auto">I'm not sure what phase of rampdown JDK 11 is in. What are the chances that this could be fixed before the next LTS release is made? </div><div dir="auto"><br></div><div dir="auto">Thanks, </div><div dir="auto"><br></div><div dir="auto">Mike</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 19, 2018, 12:23 PM Alex Buckley <<a href="mailto:alex.buckley@oracle.com">alex.buckley@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Werner,<br>
<br>
On 7/18/2018 4:49 PM, Werner Dietl wrote:<br>
> class ArrayOfInner {<br>
>    class Inner {}<br>
><br>
>    @TA(1) ArrayOfInner. @TA(2) Inner oi;<br>
>    @TA(3) ArrayOfInner. @TA(4) Inner [] oia;<br>
>    @TA(5) Inner i;<br>
>    @TA(6) Inner [] ia;<br>
> }<br>
><br>
><br>
> Compile with javac 8 and according to javap -v field ia has the annotation:<br>
><br>
>    ArrayOfInner$Inner[] ia;<br>
>      descriptor: [LArrayOfInner$Inner;<br>
>      flags: (0x0000)<br>
>      RuntimeVisibleTypeAnnotations:<br>
>        0: #10(#11=I#21): FIELD, location=[ARRAY, INNER_TYPE]<br>
><br>
> Compile with javac 9, 10, or a recent 11 build and ia has the annotation:<br>
><br>
>    ArrayOfInner$Inner[] ia;<br>
>      descriptor: [LArrayOfInner$Inner;<br>
>      flags: (0x0000)<br>
>      RuntimeVisibleTypeAnnotations:<br>
>        0: #10(#11=I#21): FIELD, location=[ARRAY]<br>
><br>
> Note the missing INNER_TYPE location.<br>
><br>
> I would like to argue that the Java 8 behavior was correct.<br>
<br>
Sounds right. Given source code that denotes the array type "Inner[]", <br>
the question is whether the component type of that array type is a <br>
nested type (ArrayOfInner.Inner) or not (just Inner). Logically, yes, <br>
it's a nested type, so the target_path item deserves an INNER_TYPE entry.<br>
<br>
This feels like the kind of detail we've been round and round on in the <br>
past. That said, I don't see any mails that would have led to javac <br>
changing how it emits target_path between 8 and 9. The closest suspect <br>
is a compiler-dev thread from Jan/Feb 2016 -- "Bug in encoding type <br>
annotations for supertype_targets" -- which spoke about the target_path <br>
being omitted entirely for an annotated nested type. (JDK-8148504 was <br>
filed against 8, but it's still open, so it can't have caused any <br>
collateral damage for a field type's annotation.)<br>
<br>
Alex<br>
</blockquote></div>