tests for "strange behavior"

Werner Dietl wdietl at gmail.com
Wed Apr 24 21:10:54 PDT 2013


Steve,

thanks for these test cases! I'm waiting on a reply from Jon on my
question about this issue in:

http://mail.openjdk.java.net/pipermail/type-annotations-dev/2013-April/000777.html

Jon acknowledge the issue in his message:

http://mail.openjdk.java.net/pipermail/type-annotations-dev/2013-April/000823.html

but there was no progress since then.

Regarding T8013065.java: the copyright year is wrong.
The comment:

  33 /*
  34  * A type-annotations on a field in an inner class not in a
lambda expression
  35  * results in RuntimeTypeAnnotations_attibute and
RuntimeAnnotations_attribute.
  36  * On a field in an innner class in a lambda expression, it leaves off the
  37  * RuntimeAnnotations_attribute.
  38  */

The test seems to be about anonymous inner classes, not lambda expressions.
The error is that it leaves off a RuntimeTYPEAnnotations_Attribute.

Regarding TestAnonInnerClasses.java: I think the comma behind the
copyright is missing.
I only quickly browsed through the remainder of that test code.

Thanks,
cu, WMD.

On Tue, Apr 23, 2013 at 3:08 PM, Steve Sides <steve.sides at oracle.com> wrote:
> Hi Werner,
>  A little while ago you mention some strange behavior where type annotations
> were not being written to the classfile.
> I have a test for that, a smaller specific one and a larger one covering
> more test cases, http://cr.openjdk.java.net/~ssides/8013065/
>
> The regression test covers the basic issue that when the inner class (in
> anonymous class) is instanciated the type-annotations are written as
> annotations rather than as type annotations.
>
>     class Test<T> {
>          Object mtest( Test<T> t){ return null;  }
>         public void test() {
>             mtest( new Test<T>() {
>                     class InnerAnon<U> {
>                         @A @B String ia_m1(){ return null; };
>                     }
>                     //comment below and they're written correctly.
>                     InnerAnon<String> IA = new InnerAnon< String>();
>                });
>        }
>     }
>     @Retention(CLASS) @Target(TYPE_USE)  @interface A { }
>     @Retention(RUNTIME) @Target(TYPE_USE)  @interface B { }
>
> It's even a little stranger in that @A and @B aren't those "silly
> annotations" with type and decl targets, only TYPE_USE.
>
> The larger case coverage more test cases but the issue seems the same, too
> few type annotations and too many  annotations.
> For now, the larger case as is does not run the repeated annotation
> scenarios:
>
>   59     Boolean [][] bRepeat = new Boolean[][]{
>   60                  /* no repeats    */ {false, false, false, false,
> false, false}
>   61                  /* repeat A,C,TA */ //{true,  false, true,  false,
> true,  false}
>   62                  /* repeat B,D,TB  {false, true,  false, true,  false,
> true}, */
>   63                  /* repeat all     {true,  true,  true,  true,  true,
> true}*/
>
> only the non-repeated ones.  However, as is, it might be helpful in testing
> the fix for this.
>
> -steve



--
http://www.google.com/profiles/wdietl


More information about the type-annotations-dev mailing list