javassist.bytecode
public class AnnotationsAttribute extends AttributeInfo
RuntimeVisibleAnnotations_attribute
and
RuntimeInvisibleAnnotations_attribute
.
To obtain an AnnotationAttribute object, invoke
getAttribute(AnnotationsAttribute.visibleTag)
in ClassFile
, MethodInfo
,
or FieldInfo
. The obtained attribute is a
runtime visible annotations attribute.
If the parameter is
AnnotationAttribute.invisibleTag
, then the obtained
attribute is a runtime invisible one.
For example,
import javassist.bytecode.annotation.Annotation; : CtMethod m = ... ; MethodInfo minfo = m.getMethodInfo(); AnnotationsAttribute attr = (AnnotationsAttribute) minfo.getAttribute(AnnotationsAttribute.invisibleTag); Annotation an = attr.getAnnotation("Author"); String s = ((StringMemberValue)an.getMemberValue("name")).getValue(); System.out.println("@Author(name=" + s + ")");
This code snippet retrieves an annotation of the type Author
from the MethodInfo
object specified by minfo
.
Then, it prints the value of name
in Author
.
If the annotation type Author
is annotated by a meta annotation:
@Retention(RetentionPolicy.RUNTIME)
Then Author
is visible at runtime. Therefore, the third
statement of the code snippet above must be changed into:
AnnotationsAttribute attr = (AnnotationsAttribute) minfo.getAttribute(AnnotationsAttribute.visibleTag);
The attribute tag must be visibleTag
instead of
invisibleTag
.
If the member value of an annotation is not specified, the default value
is used as that member value. If so, getMemberValue()
in
Annotation
returns null
since the default value is not included in the
AnnotationsAttribute
. It is included in the
AnnotationDefaultAttribute
of the method declared in the
annotation type.
If you want to record a new AnnotationAttribute object, execute the following snippet:
ClassFile cf = ... ; ConstPool cp = cf.getConstPool(); AnnotationsAttribute attr = new AnnotationsAttribute(cp, AnnotationsAttribute.visibleTag); Annotation a = new Annotation("Author", cp); a.addMemberValue("name", new StringMemberValue("Chiba", cp)); attr.setAnnotation(a); cf.addAttribute(attr); cf.setVersionToJava5();
The last statement is necessary if the class file was produced by Javassist or JDK 1.4. Otherwise, it is not necessary.
See Also: AnnotationDefaultAttribute Annotation
Field Summary | |
---|---|
static String | invisibleTag
The name of the RuntimeInvisibleAnnotations attribute. |
static String | visibleTag
The name of the RuntimeVisibleAnnotations attribute. |
Constructor Summary | |
---|---|
AnnotationsAttribute(ConstPool cp, String attrname, byte[] info)
Constructs a Runtime(In)VisisbleAnnotations_attribute .
| |
AnnotationsAttribute(ConstPool cp, String attrname)
Constructs an empty
Runtime(In)VisisbleAnnotations_attribute .
|
Method Summary | |
---|---|
void | addAnnotation(Annotation annotation)
Adds an annotation. |
AttributeInfo | copy(ConstPool newCp, Map classnames)
Copies this attribute and returns a new copy. |
Annotation | getAnnotation(String type)
Parses the annotations and returns a data structure representing
the annotation with the specified type. |
Annotation[] | getAnnotations()
Parses the annotations and returns a data structure representing
that parsed annotations. |
int | numAnnotations()
Returns num_annotations . |
void | setAnnotation(Annotation annotation)
Changes the annotations. |
void | setAnnotations(Annotation[] annotations)
Changes the annotations represented by this object according to
the given array of Annotation objects.
|
String | toString()
Returns a string representation of this object. |
RuntimeInvisibleAnnotations
attribute.RuntimeVisibleAnnotations
attribute.Runtime(In)VisisbleAnnotations_attribute
.
Parameters: cp constant pool attrname attribute name (visibleTag
or
invisibleTag
). info the contents of this attribute. It does not
include attribute_name_index
or
attribute_length
.
Runtime(In)VisisbleAnnotations_attribute
.
A new annotation can be later added to the created attribute
by setAnnotations()
.
Parameters: cp constant pool attrname attribute name (visibleTag
or
invisibleTag
).
See Also: (Annotation[])
Parameters: annotation the added annotation.
getAnnotations()
as to the returned data structure.
Parameters: type the annotation type.
Returns: null if the specified annotation type is not included.
See Also: getAnnotations
setAnnotations()
.
See Also: (Annotation[])
num_annotations
.setAnnotations(new Annotation[] { annotation })
Parameters: annotation the data structure representing the new annotation.
Annotation
objects.
Parameters: annotations the data structure representing the new annotations.