]> source.dussan.org Git - aspectj.git/commitdiff
initial "parameterizeWith" support for declares
authoracolyer <acolyer>
Thu, 11 Aug 2005 15:30:19 +0000 (15:30 +0000)
committeracolyer <acolyer>
Thu, 11 Aug 2005 15:30:19 +0000 (15:30 +0000)
weaver/src/org/aspectj/weaver/patterns/Declare.java
weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java
weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java
weaver/src/org/aspectj/weaver/patterns/DeclareParents.java
weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java
weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java

index a387c6fc10387482bbc3876b9fb63992776d8fb9..4a23753af583601f80965325db4886f830672fb2 100644 (file)
@@ -14,6 +14,7 @@
 package org.aspectj.weaver.patterns;
 
 import java.io.IOException;
+import java.util.Map;
 
 import org.aspectj.weaver.ISourceContext;
 import org.aspectj.weaver.VersionedDataInputStream;
@@ -48,6 +49,12 @@ public abstract class Declare extends PatternNode {
      */
     public abstract void resolve(IScope scope);
     
+    /**
+     * Returns a version of this declare element in which all references to type variables
+     * are replaced with their bindings given in the map.
+     */
+    public abstract Declare parameterizeWith(Map typeVariableBindingMap);
+    
     /**
      * Indicates if this declare should be treated like advice.  If true, the
      * declare will have no effect in an abstract aspect.  It will be inherited by
index 11fe5579fae9934ee879ff74a97a0c68dfdc3461..45582705e1048ab1f6fe5ac74fbedb4b3e237cc2 100644 (file)
@@ -14,6 +14,8 @@ package org.aspectj.weaver.patterns;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
 
 import org.aspectj.weaver.AnnotationX;
 import org.aspectj.weaver.ISourceContext;
@@ -112,6 +114,11 @@ public class DeclareAnnotation extends Declare {
                }
        }
 
+       public Declare parameterizeWith(Map typeVariableBindingMap) {
+               // TODO Auto-generated method stub
+               return this;
+       }
+       
        public boolean isAdviceLike() {
                return false;
        }
@@ -258,12 +265,11 @@ public class DeclareAnnotation extends Declare {
         */
        private void ensureAnnotationDiscovered() {
                if (annotation!=null) return;
-               ResolvedMember rms[] = containingAspect.getDeclaredMethods();
-               for (int i = 0; i < rms.length; i++) {
-                       ResolvedMember member = rms[i];
+               for (Iterator iter = containingAspect.getMethods(); iter.hasNext();) {
+                       ResolvedMember member = (ResolvedMember) iter.next();
                        if (member.getName().equals(annotationMethod)) {
                                annotation = member.getAnnotations()[0];
-                       }
+                       }                       
                }
        }
 
index a053ae8e1d94000118adf844e82746926068258d..46dc8933975205dc2fe68e211228cac4b4c11487 100644 (file)
@@ -15,6 +15,7 @@ package org.aspectj.weaver.patterns;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Map;
 
 import org.aspectj.weaver.ISourceContext;
 import org.aspectj.weaver.VersionedDataInputStream;
@@ -97,6 +98,12 @@ public class DeclareErrorOrWarning extends Declare {
        pointcut = pointcut.resolve(scope);     
     }
     
+    public Declare parameterizeWith(Map typeVariableBindingMap) {
+       Declare ret = new DeclareErrorOrWarning(isError,pointcut.parameterizeWith(typeVariableBindingMap),message);
+       ret.copyLocationFrom(this);
+       return ret;
+    }
+    
        public boolean isAdviceLike() {
                return true;
        }
index 22492a88cc3a841f3d242246aff6b7a555f8313c..572f821a61154b23ec9423fab2a5212cf738af17 100644 (file)
@@ -19,11 +19,11 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.aspectj.bridge.IMessage;
 import org.aspectj.bridge.ISourceLocation;
 import org.aspectj.bridge.Message;
-import org.aspectj.weaver.AjAttribute;
 import org.aspectj.weaver.ISourceContext;
 import org.aspectj.weaver.ResolvedType;
 import org.aspectj.weaver.UnresolvedType;
@@ -71,6 +71,15 @@ public class DeclareParents extends Declare {
                return visitor.visit(this,data);
        }
        
+       public Declare parameterizeWith(Map typeVariableBindingMap) {
+               DeclareParents ret = 
+                       new DeclareParents(
+                                       child.parameterizeWith(typeVariableBindingMap),
+                                       parents.parameterizeWith(typeVariableBindingMap));
+               ret.copyLocationFrom(this);
+               return ret;
+       }
+       
        public String toString() {
                StringBuffer buf = new StringBuffer();
                buf.append("declare parents: ");
index d82fd5dbe13621e92b8d8f8681185e413eb85383..5aa00a5fb63ff4acc6630c044431a35c76b3b810 100644 (file)
@@ -16,6 +16,7 @@ package org.aspectj.weaver.patterns;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 import org.aspectj.bridge.IMessage;
 import org.aspectj.weaver.ISourceContext;
@@ -39,6 +40,11 @@ public class DeclarePrecedence extends Declare {
                return visitor.visit(this,data);
        }
        
+       public Declare parameterizeWith(Map typeVariableBindingMap) {
+               // TODO Auto-generated method stub
+               return this;
+       }
+       
        public String toString() {
                StringBuffer buf = new StringBuffer();
                buf.append("declare precedence: ");
@@ -63,7 +69,7 @@ public class DeclarePrecedence extends Declare {
                patterns.write(s);
                writeLocation(s);
        }
-
+       
        public static Declare read(VersionedDataInputStream s, ISourceContext context) throws IOException {
                Declare ret = new DeclarePrecedence(TypePatternList.read(s, context));
                ret.readLocation(context, s);
index f5bb96786f978b2ee9868dc73de16543a0936163..6e5da128e60e169eb7d9ccb761861ea269616180 100644 (file)
@@ -15,6 +15,7 @@ package org.aspectj.weaver.patterns;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Map;
 
 import org.aspectj.bridge.IMessage;
 import org.aspectj.weaver.ISourceContext;
@@ -36,6 +37,11 @@ public class DeclareSoft extends Declare {
                return visitor.visit(this,data);
        }
        
+       public Declare parameterizeWith(Map typeVariableBindingMap) {
+               // TODO Auto-generated method stub
+               return this;
+       }
+       
        public String toString() {
                StringBuffer buf = new StringBuffer();
                buf.append("declare soft: ");