Class AnnotationsAttribute
- java.lang.Object
-
- javassist.bytecode.AttributeInfo
-
- javassist.bytecode.AnnotationsAttribute
-
public class AnnotationsAttribute extends AttributeInfo
A class representingRuntimeVisibleAnnotations_attributeandRuntimeInvisibleAnnotations_attribute.To obtain an AnnotationAttribute object, invoke
getAttribute(AnnotationsAttribute.visibleTag)inClassFile,MethodInfo, orFieldInfo. The obtained attribute is a runtime visible annotations attribute. If the parameter isAnnotationAttribute.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
Authorfrom theMethodInfoobject specified byminfo. Then, it prints the value ofnameinAuthor.If the annotation type
Authoris annotated by a meta annotation:@Retention(RetentionPolicy.RUNTIME)
Then
Authoris 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
visibleTaginstead ofinvisibleTag.If the member value of an annotation is not specified, the default value is used as that member value. If so,
getMemberValue()inAnnotationreturnsnullsince the default value is not included in theAnnotationsAttribute. It is included in theAnnotationDefaultAttributeof 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
javacof JDK 1.4 or earlier. Otherwise, it is not necessary.- See Also:
AnnotationDefaultAttribute,Annotation
-
-
Field Summary
Fields Modifier and Type Field Description static StringinvisibleTagThe name of theRuntimeInvisibleAnnotationsattribute.static StringvisibleTagThe name of theRuntimeVisibleAnnotationsattribute.
-
Constructor Summary
Constructors Constructor Description AnnotationsAttribute(ConstPool cp, String attrname)Constructs an emptyRuntime(In)VisibleAnnotations_attribute.AnnotationsAttribute(ConstPool cp, String attrname, byte[] info)Constructs aRuntime(In)VisibleAnnotations_attribute.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddAnnotation(Annotation annotation)Adds an annotation.AttributeInfocopy(ConstPool newCp, Map<String,String> classnames)Copies this attribute and returns a new copy.AnnotationgetAnnotation(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.intnumAnnotations()Returnsnum_annotations.booleanremoveAnnotation(String type)Removes an annotation by type.voidsetAnnotation(Annotation annotation)Changes the annotations.voidsetAnnotations(Annotation[] annotations)Changes the annotations represented by this object according to the given array ofAnnotationobjects.StringtoString()Returns a string representation of this object.-
Methods inherited from class javassist.bytecode.AttributeInfo
get, getConstPool, getName, length, set
-
-
-
-
Field Detail
-
visibleTag
public static final String visibleTag
The name of theRuntimeVisibleAnnotationsattribute.- See Also:
- Constant Field Values
-
invisibleTag
public static final String invisibleTag
The name of theRuntimeInvisibleAnnotationsattribute.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AnnotationsAttribute
public AnnotationsAttribute(ConstPool cp, String attrname, byte[] info)
Constructs aRuntime(In)VisibleAnnotations_attribute.- Parameters:
cp- constant poolattrname- attribute name (visibleTagorinvisibleTag).info- the contents of this attribute. It does not includeattribute_name_indexorattribute_length.
-
AnnotationsAttribute
public AnnotationsAttribute(ConstPool cp, String attrname)
Constructs an emptyRuntime(In)VisibleAnnotations_attribute. A new annotation can be later added to the created attribute bysetAnnotations().- Parameters:
cp- constant poolattrname- attribute name (visibleTagorinvisibleTag).- See Also:
setAnnotations(Annotation[])
-
-
Method Detail
-
numAnnotations
public int numAnnotations()
Returnsnum_annotations.
-
copy
public AttributeInfo copy(ConstPool newCp, Map<String,String> classnames)
Copies this attribute and returns a new copy.- Overrides:
copyin classAttributeInfo- Parameters:
newCp- the constant pool table used by the new copy.classnames- pairs of replaced and substituted class names.
-
getAnnotation
public Annotation getAnnotation(String type)
Parses the annotations and returns a data structure representing the annotation with the specified type. See alsogetAnnotations()as to the returned data structure.- Parameters:
type- the annotation type.- Returns:
- null if the specified annotation type is not included.
- See Also:
getAnnotations()
-
addAnnotation
public void addAnnotation(Annotation annotation)
Adds an annotation. If there is an annotation with the same type, it is removed before the new annotation is added.- Parameters:
annotation- the added annotation.
-
removeAnnotation
public boolean removeAnnotation(String type)
Removes an annotation by type. After removing an annotation, ifnumAnnotations()returns 0, this annotations attribute has to be removed.- Parameters:
type- of annotation to remove- Returns:
- whether an annotation with the given type has been removed
- Since:
- 3.21
-
getAnnotations
public Annotation[] getAnnotations()
Parses the annotations and returns a data structure representing that parsed annotations. Note that changes of the node values of the returned tree are not reflected on the annotations represented by this object unless the tree is copied back to this object bysetAnnotations().- See Also:
setAnnotations(Annotation[])
-
setAnnotations
public void setAnnotations(Annotation[] annotations)
Changes the annotations represented by this object according to the given array ofAnnotationobjects.- Parameters:
annotations- the data structure representing the new annotations.
-
setAnnotation
public void setAnnotation(Annotation annotation)
Changes the annotations. A call to this method is equivalent to:setAnnotations(new Annotation[] { annotation })- Parameters:
annotation- the data structure representing the new annotation.
-
-