org.objectweb.asm.attrs
Class AnnotationMemberValue

java.lang.Object
  extended byorg.objectweb.asm.attrs.AnnotationMemberValue

public class AnnotationMemberValue
extends Object

TODO update from adding generics 2.5ea The member_value structure is a discriminated union representing the value of a member-value pair. It is used to represent values in all class file attributes that describe annotations ( RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations, RuntimeVisibleParameterAnnotations, and RuntimeInvisibleParameterAnnotations).

The member_value structure has the following format:

   member_value {
     u1 tag;
     union {
       u2   const_value_index;
       {
         u2   type_name_index;
         u2   const_name_index;
       } enum_const_value;
       u2   class_info_index;
       annotation annotation_value;
       {
         u2    num_values;
         member_value values[num_values];
       } array_value;
     } value;
   }
 
The items of the member_value structure are as follows:
tag
The tag item indicates the member type of this member-value pair. The letters 'B', 'C', 'D', 'F', 'I', 'J', 'S', and 'Z' indicate a primitive type. These letters are interpreted as BaseType characters (Table 4.2). The other legal values for tag are listed with their interpretations in this table:
     tag  value Member Type
     's'  String
     'e'  enum constant
     'c'  class
     '@'  annotation type
     '['  array
   
value
The value item represents the value of this annotation element. This item is a union. The tag item, above, determines which item of the union is to be used:
const_value_index
The const_value_index item is used if the tag item is one of 'B', 'C', 'D', 'F', 'I', 'J', 'S', 'Z', or 's'. The value of the const_value_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be of the correct entry type for the field type designated by the tag item, as specified in table 4.6, with one exception: if the tag is 's', the the value of the const_value_index item must be the index of a CONSTANT_Utf8 structure, rather than a CONSTANT_String.
enum_const_value
The enum_const_value item is used if the tag item is 'e'. The enum_const_value item consists of the following two items:
type_name_index
The value of the type_name_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info structure representing the binary name (JLS 13.1) of the type of the enum constant represented by this member_value structure.
const_name_index
The value of the const_name_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info structure representing the simple name of the enum constant represented by this member_value structure.
class_info_index
The class_info_index item is used if the tag item is 'c'. The class_info_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Class_info structure representing the class represented by this member_value structure.
annotation_value
The annotation_value item is used if the tag item is '@'. The member_value structure represents a "nested" annotation.
array_value
The array_value item is used if the tag item is '['. The array_value item consists of the following two items:
num_values
The value of the num_values item gives the number of elements in the array-typed value represented by this member_value structure. Note that a maximum of 65535 elements are permitted in an array-typed member value.
values
Each element of the values table gives the value of an element of the array-typed value represented by this member_value structure.

Author:
Eugene Kuleshov
See Also:
JSR 175 : A Metadata Facility for the Java Programming Language

Nested Class Summary
static class AnnotationMemberValue.EnumConstValue
          Container class used to store enum_const_value structure.
 
Constructor Summary
AnnotationMemberValue()
           
AnnotationMemberValue(Object value)
           
 
Method Summary
 int getTag()
           
 Object getValue()
           
 int read(ClassReader cr, int off, char[] buf)
          Reads member_value data structures.
 String toString()
          Returns value in the format described in JSR-175 for Java source code.
 ByteVector write(ByteVector bv, ClassWriter cw)
          Writes member_value data structures.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AnnotationMemberValue

public AnnotationMemberValue()

AnnotationMemberValue

public AnnotationMemberValue(Object value)
Method Detail

getTag

public int getTag()

getValue

public Object getValue()

read

public int read(ClassReader cr,
                int off,
                char[] buf)
Reads member_value data structures.

Parameters:
cr - the class that contains the attribute to be read.
off - index of the first byte of the data structure.
buf - buffer to be used to call readUTF8, readClass or readConst.
Returns:
offset position in bytecode after reading annotation

write

public ByteVector write(ByteVector bv,
                        ClassWriter cw)
Writes member_value data structures.

Parameters:
bv - the byte array form to store data structures.
cw - the class to which this attribute must be added. This parameter can be used to add to the constant pool of this class the items that corresponds to this attribute.
Returns:
bv.

toString

public String toString()
Returns value in the format described in JSR-175 for Java source code.