diff options
author | aclement <aclement> | 2008-02-25 21:41:57 +0000 |
---|---|---|
committer | aclement <aclement> | 2008-02-25 21:41:57 +0000 |
commit | 90fef29a3e2966715fe449bbc7ad579bd3516420 (patch) | |
tree | 9bcbeae0fbe954aae99a09e1ee9f204e0a897238 /weaver | |
parent | 09050423f273b3015ebe88a329b66da363a68213 (diff) | |
download | aspectj-90fef29a3e2966715fe449bbc7ad579bd3516420.tar.gz aspectj-90fef29a3e2966715fe449bbc7ad579bd3516420.zip |
annoValMatch: implementation
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelMethod.java | 34 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java | 7 |
2 files changed, 32 insertions, 9 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java b/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java index 7aa623b20..771245cef 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java @@ -20,6 +20,7 @@ import java.util.Iterator; 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; @@ -221,6 +222,18 @@ public final class BcelMethod extends ResolvedMemberImpl { 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(); @@ -287,7 +300,7 @@ public final class BcelMethod extends ResolvedMemberImpl { } 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; @@ -296,19 +309,28 @@ public final class BcelMethod extends ResolvedMemberImpl { } 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]; @@ -323,7 +345,7 @@ public final class BcelMethod extends ResolvedMemberImpl { 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(); @@ -474,7 +496,7 @@ public final class BcelMethod extends ResolvedMemberImpl { if (method != null) { unpackGenericSignature(); unpackJavaAttributes(); - ensureAnnotationTypesRetrieved(); + ensureAnnotationsRetrieved(); ensureParameterAnnotationsRetrieved(); determineParameterNames(); // this.sourceContext = SourceContextImpl.UNKNOWN_SOURCE_CONTEXT; diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java index 694333967..8c710422d 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java @@ -30,6 +30,7 @@ import org.aspectj.apache.bcel.classfile.annotation.Annotation; 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; @@ -567,8 +568,8 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate { 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; } } @@ -603,7 +604,7 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate { 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); |