Problem with type annotations on a type parameter

Jonathan Gibbons jonathan.gibbons at
Thu Apr 25 11:27:23 PDT 2013


Is this is a simple answer to the problem?

I'm looking at TypeAnnotations.TypeAnnotationPositions.visitNewClass, 
round about 1155.

         public void visitNewClass(JCNewClass tree) {
             if (tree.def != null &&
                     !tree.def.mods.annotations.isEmpty()) {
                 JCClassDecl classdecl = tree.def;
                 TypeAnnotationPosition pos = new TypeAnnotationPosit

You are checking tree.def.mods.annotations but what about annos embedded 
within tree.def?

-- Jon

On 04/04/2013 06:02 PM, Werner Dietl wrote:
> Jon, Steve, all,
> I'm debugging some strange behavior and I would appreciate a quick 
> look by somebody else. I'm probably missing something very obvious.
> Take the attached class that contains a class nested within an 
> anonymous class.
> Compile with the type-annotations javac and you'll get this output:
> ClassWriter: Position UNKNOWN in type annotation: @TA
> ClassWriter: Position UNKNOWN in type annotation: @TA
> That's bad, as it means that the type annotation is not written. We 
> confirm this by running javap:
> javap -v NestedTest\$1\$Inner.class
> Nothing on the type parameter.
> The strange thing is that this works if we remove the declaration of 
> field i1.
> It also works if instead of a method type parameter we declare a 
> method parameter, or a class type parameter, or if the class is 
> outside of the anonymous class.
> Does anybody understand the dependency between field i1 and the type 
> parameter X?
> Steve: could you expand the tests in 
> tools/javac/annotations/typeAnnotations/referenceinfos/ to ensure that 
> annotations in anonymous classes and lambdas work as expected?
> Please also add a failing test for this.
> Thanks,
> cu, WMD.
> -- 

More information about the type-annotations-dev mailing list