[JSR308] target_type and reference_info

Mahmood Ali mahmood at MIT.EDU
Mon Sep 22 17:09:33 EDT 2008


Hi Eugene,

Please consulate com.sun.tools.javac.jvm.writeTypeAnnotation() method  
in the langtools source code.  Each case expression corresponds almost  
identically to target_type value and the comment for each block of  
case statements signifies the category of reference_info.

The compiler differs from the specification in some minor ways:
__ Use of 'method return type' target_type
This is a compiler bug that I did not come around to fix.  Only in the  
case of annotations written on method return type after type parameter  
declarations in generic method declaration, like in the case of @B  
(and not @A):
   @A <T> @B T methodName(T t) { return t; }

In this case, @B is parsed as a type annotation to T rather than a  
regular annotation to method element, like @A.

Also, the current JSR 308 specifications omits specifying some  
reference_info.  Here is the format supported by the compiler:

::method parameter generic type - 0x0D:
{
   // not specified:
   u1 parameter_index;

   // specified through generic type arguments or arrays
   u2 location_length;
   u1 location[location_length];
} reference_info;

::method type arguments raw and generic type
{
   // not specified:
   u2 offset;
   u1 type_index;

   // And for generic or array targets:
   u2 location_length;
   u1 location[location_length];
} reference_info;

The specification has some limitations too:  It does not specify how  
to specify @A and @B uniquely: OuterClass<@A String>.InnerClass<@B  
String>.

The specification should be updated to reflect these limitations.

Unfortunately, we do not have a test suite for this functionality.

Please email us if you need more guidance or have any comments.

Regards,
Mahmood





More information about the JSR308 mailing list