import java.util.List;
import java.util.StringTokenizer;
+import org.aspectj.apache.bcel.classfile.AnnotationDefault;
import org.aspectj.apache.bcel.classfile.Attribute;
import org.aspectj.apache.bcel.classfile.ExceptionTable;
import org.aspectj.apache.bcel.classfile.GenericSignatureParser;
return null;
}
+ public String getAnnotationDefaultValue() {
+ Attribute[] attrs = method.getAttributes();
+ for (int i = 0; i < attrs.length; i++) {
+ Attribute attribute = attrs[i];
+ if (attribute.getName().equals("AnnotationDefault")) {
+ AnnotationDefault def = (AnnotationDefault)attribute;
+ return def.getElementValue().stringifyValue();
+ }
+ }
+ return null;
+ }
+
// for testing - use with the method above
public String[] getAttributeNames(boolean onlyIncludeAjOnes) {
Attribute[] as = method.getAttributes();
}
public boolean hasAnnotation(UnresolvedType ofType) {
- ensureAnnotationTypesRetrieved();
+ ensureAnnotationsRetrieved();
for (Iterator iter = annotationTypes.iterator(); iter.hasNext();) {
ResolvedType aType = (ResolvedType) iter.next();
if (aType.equals(ofType)) return true;
}
public AnnotationX[] getAnnotations() {
- ensureAnnotationTypesRetrieved();
+ ensureAnnotationsRetrieved();
return annotations;
}
public ResolvedType[] getAnnotationTypes() {
- ensureAnnotationTypesRetrieved();
+ ensureAnnotationsRetrieved();
ResolvedType[] ret = new ResolvedType[annotationTypes.size()];
annotationTypes.toArray(ret);
return ret;
}
+
+ public AnnotationX getAnnotationOfType(UnresolvedType ofType) {
+ ensureAnnotationsRetrieved();
+ for (int i=0; i<annotations.length; i++) {
+ if (annotations[i].getTypeName().equals(ofType.getName())) return annotations[i];
+ }
+ return null;
+ }
+
public void addAnnotation(AnnotationX annotation) {
- ensureAnnotationTypesRetrieved();
+ ensureAnnotationsRetrieved();
// Add it to the set of annotations
int len = annotations.length;
AnnotationX[] ret = new AnnotationX[len+1];
method.addAnnotation(annotation.getBcelAnnotation());
}
- private void ensureAnnotationTypesRetrieved() {
+ private void ensureAnnotationsRetrieved() {
if (method == null) return; // must be ok, we have evicted it
if (annotationTypes == null || method.getAnnotations().length!=annotations.length) { // sometimes the list changes underneath us!
Annotation annos[] = method.getAnnotations();
if (method != null) {
unpackGenericSignature();
unpackJavaAttributes();
- ensureAnnotationTypesRetrieved();
+ ensureAnnotationsRetrieved();
ensureParameterAnnotationsRetrieved();
determineParameterNames();
// this.sourceContext = SourceContextImpl.UNKNOWN_SOURCE_CONTEXT;
import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValue;
import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair;
import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
+import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.weaver.AbstractReferenceTypeDelegate;
import org.aspectj.weaver.AjAttribute;
List values = ax.getBcelAnnotation().getValues();
for (Iterator it = values.iterator(); it.hasNext();) {
ElementNameValuePair element = (ElementNameValuePair) it.next();
- ElementValue v = element.getValue();
- retentionPolicy = v.stringifyValue();
+ EnumElementValue v = (EnumElementValue)element.getValue();
+ retentionPolicy = v.getEnumValueString();
return retentionPolicy;
}
}
ElementValue[] evs = arrayValue.getElementValuesArray();
if (evs!=null) {
for (int j = 0; j < evs.length; j++) {
- String targetKind = evs[j].stringifyValue();
+ String targetKind = ((EnumElementValue)evs[j]).getEnumValueString();
if (targetKind.equals("ANNOTATION_TYPE")) { targetKinds.add(AnnotationTargetKind.ANNOTATION_TYPE);
} else if (targetKind.equals("CONSTRUCTOR")) { targetKinds.add(AnnotationTargetKind.CONSTRUCTOR);
} else if (targetKind.equals("FIELD")) { targetKinds.add(AnnotationTargetKind.FIELD);