]> source.dussan.org Git - aspectj.git/commitdiff
annotation value matching in decp
authoraclement <aclement>
Mon, 3 Mar 2008 17:23:34 +0000 (17:23 +0000)
committeraclement <aclement>
Mon, 3 Mar 2008 17:23:34 +0000 (17:23 +0000)
weaver/src/org/aspectj/weaver/AnnotationAJ.java
weaver/src/org/aspectj/weaver/AnnotationX.java

index 58fce499205969468321c5157c125e2281388d84..90acb5a0190bc5f65565e13b9a1a6f6d3f4e3db7 100644 (file)
@@ -15,6 +15,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair;
+
 /**
  * This type represents the weavers abstraction of an annotation - it is
  * not tied to any underlying BCI toolkit.  The weaver actualy handles these
@@ -95,4 +97,27 @@ public class AnnotationAJ {
                sb.append("]");
                return sb.toString();
        }
+
+       public boolean hasNamedValue(String n) {
+               if (nvPairs==null) return false;
+               for (int i=0;i<nvPairs.size();i++) {
+                       AnnotationNameValuePair pair = (AnnotationNameValuePair)nvPairs.get(i);
+                       if (pair.getName().equals(n)) return true;
+               }
+               return false;
+       }
+
+       /**
+     * Return true if the annotation has a value with the specified name (n) and value (v)
+     */
+       public boolean hasNameValuePair(String n, String v) {
+               if (nvPairs==null) return false;
+               for (int i=0;i<nvPairs.size();i++) {
+                       AnnotationNameValuePair pair = (AnnotationNameValuePair)nvPairs.get(i);
+                       if (pair.getName().equals(n)) {
+                               if (pair.getValue().stringify().equals(v)) return true;
+                       }
+               }
+               return false;
+       }
 }
index f673aaa4b66b597b4ce3e1fba065fbacc9d95822..c74e2e545381dec09c29e979b86be1fe19bf85da 100644 (file)
@@ -24,7 +24,7 @@ import org.aspectj.apache.bcel.classfile.Utility;
 
 /**
  * AnnotationX instances are holders for an annotation from either Bcel or
- * ASM.  We have this holder so that types about the bcel weaver package 
+ * eclipse.  We have this holder so that types about the bcel weaver package 
  * can work with something not bytecode toolkit specific.
  */
 public class AnnotationX {
@@ -32,9 +32,9 @@ public class AnnotationX {
   public static final AnnotationX[] NONE = new AnnotationX[0];
   
   private Annotation theRealBcelAnnotation;
-  private AnnotationAJ theRealASMAnnotation;
+  private AnnotationAJ theRealEclipseAnnotation;
   private int mode = -1;
-  private final static int MODE_ASM = 1;
+  private final static int MODE_ECLIPSE = 1;
   private final static int  MODE_BCEL = 2;
   
   private ResolvedType signature = null;
@@ -51,9 +51,9 @@ public class AnnotationX {
   }
   
   public AnnotationX(AnnotationAJ a,World world) {
-               theRealASMAnnotation = a;
-               signature = UnresolvedType.forSignature(theRealASMAnnotation.getTypeSignature()).resolve(world);
-               mode= MODE_ASM;
+               theRealEclipseAnnotation = a;
+               signature = UnresolvedType.forSignature(theRealEclipseAnnotation.getTypeSignature()).resolve(world);
+               mode= MODE_ECLIPSE;
   }
 
   public Annotation getBcelAnnotation() {
@@ -66,18 +66,18 @@ public class AnnotationX {
   
   public String toString() {
          if (mode==MODE_BCEL) return theRealBcelAnnotation.toString();
-         else                             return theRealASMAnnotation.toString();
+         else                             return theRealEclipseAnnotation.toString();
   }
 
 
   public String getTypeName() {
        if (mode==MODE_BCEL) return theRealBcelAnnotation.getTypeName();
-       else                             return Utility.signatureToString(theRealASMAnnotation.getTypeSignature());
+       else                             return Utility.signatureToString(theRealEclipseAnnotation.getTypeSignature());
   }
 
   public String getTypeSignature() {
          if (mode==MODE_BCEL) return theRealBcelAnnotation.getTypeSignature();
-               else                             return theRealASMAnnotation.getTypeSignature();
+               else                             return theRealEclipseAnnotation.getTypeSignature();
   }
 
   
@@ -176,7 +176,7 @@ public class AnnotationX {
                        supportedTargets.add(ev.getEnumValueString());
                }
          } else {
-                 List values = theRealASMAnnotation.getNameValuePairs();
+                 List values = theRealEclipseAnnotation.getNameValuePairs();
                  AnnotationNameValuePair nvp = (AnnotationNameValuePair)values.get(0);
                  ArrayAnnotationValue aav = (ArrayAnnotationValue)nvp.getValue();
                  AnnotationValue[] avs = aav.getValues();
@@ -203,17 +203,17 @@ public class AnnotationX {
 
   public void print(StringBuffer sb) {
          if (mode==MODE_BCEL) sb.append(theRealBcelAnnotation.toString());
-         else                 sb.append(theRealASMAnnotation.stringify());
+         else                 sb.append(theRealEclipseAnnotation.stringify());
   }
 
   public boolean hasNameValuePair(String n, String v) {
          if (mode==MODE_BCEL) return theRealBcelAnnotation.hasNameValuePair(n,v);
-         else                 throw new RuntimeException("Cannot be anything else");
+         else                 return theRealEclipseAnnotation.hasNameValuePair(n,v);
   }
 
   public boolean hasNamedValue(String n) {
          if (mode==MODE_BCEL) return theRealBcelAnnotation.hasNamedValue(n);
-         else                 throw new RuntimeException("Cannot be anything else");
+         else                 return theRealEclipseAnnotation.hasNamedValue(n);
   }
 
 }
\ No newline at end of file