<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    yep.<br>
    <br>
    &nbsp;I had entered an earlier one,<br>
    <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8008182">8008182</a>
    - Repeated type-annotation on type arg in method reference not
    written to class file<br>
    and I'm wondering is that last one is related.<br>
    <br>
    -steve<br>
    <br>
    On 2/22/2013 6:09 PM, Werner Dietl wrote:
    <blockquote
cite="mid:CAJYRO=4OCHBWbeLR=gPVRCtHJNg9OfoK20pGAK6es5NHYWpYyQ@mail.gmail.com"
      type="cite">
      <pre wrap="">Thanks for these tests!
I'll work on fixing them in the type-annotations repository ASAP.

cu, WMD.

On Fri, Feb 22, 2013 at 6:07 PM, Steve Sides <a class="moz-txt-link-rfc2396E" href="mailto:steve.sides@oracle.com">&lt;steve.sides@oracle.com&gt;</a> wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">Hi Werner,
I have been looking at type-annotations in anonymous and inner classes.
I have a few new bugs. They are showing yet in bugs.sun.com, but they should
by tomorrow(?).
Only the first one is a jtreg test. The other 2 are part of a larger test
with some classfile checking, but I
put the sample code here so you can javac,javap it.

-steve

8008751 - Type Annotation on array level in nested class of anonymous class
results in NPE at
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.resolveFrame(TypeAnnotations.java:792)
8&lt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
/*
 * @test
 * @summary type-annotation on array level in nested class results in NPE
 * @bug 8008751
 */
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.*;
import static java.lang.annotation.ElementType.*;
import java.util.List;

class T8008751 {
    Object mtest( T8008751 t){ return null;  }
    Object mmtest( T8008751 t){ return null;  }
    public void test() {
       mtest( new T8008751() {
                class InnerAnon {
                    @A("ok") String s = (@A("ok") String)( new @A("ok")
Object());
                    @A("ok") Object @A("NPE")[] [] ia_sa1 = null;
                }
                // If not instanciated, no crash.
                InnerAnon IA = new InnerAnon();
           });
   }
}
@Retention(RUNTIME) @Target(TYPE_USE)  @interface A { String value(); }


8008762 - Type annotation on inner class in anonymous class show up as
regular type annotations
8&lt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.*;
import static java.lang.annotation.ElementType.*;

class Test1 { // Test1.class
    @A @B String data = "test";
    @A @B String m(){ return null; };
    Object mtest( Test1 t){ return null; }
    public void test() {
        mtest( new Test1() { // Test1$1.class
                @A @B String a_data = "test";
                @A @B String a_m(){ return null; };
                class InnerAnon { // Test1$1$InnerAnon.class
                     @A @B String ai_data = "test";
                     @A @B String ai_m(){ return null; };
                }
                 InnerAnon IA = new InnerAnon();
           });
   }
}

@Retention(RUNTIME) @Target(TYPE_USE) @interface A { }
@Retention(CLASS) @Target(TYPE_USE) @interface B { }


8008769 - Repeated type-annotations on type parameter of local variable are
not written to classfile.
8&lt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.*;
import static java.lang.annotation.ElementType.*;

class Test&lt;T&gt; {
    Test&lt;@A @A @A String&gt; t = new Test&lt;&gt;(); //ok

    public void test() {
        Test&lt;@B String&gt; t1 = new Test&lt;&gt;(); //ok
        Test&lt;@A @A @A String&gt; t2 = new Test&lt;&gt;(); //not ok
   }
}

@Target(TYPE_USE) @Repeatable( AC.class ) @interface A { }
@Target(TYPE_USE) @interface AC { A[] value(); }
@Target(TYPE_USE) @Repeatable( BC.class ) @interface B { }
@Target(TYPE_USE) @interface BC { B[] value(); }


</pre>
      </blockquote>
      <pre wrap="">


</pre>
    </blockquote>
    <br>
  </body>
</html>