summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/Declare.java7
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java14
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java7
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclareParents.java11
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java6
6 files changed, 47 insertions, 6 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/Declare.java b/weaver/src/org/aspectj/weaver/patterns/Declare.java
index a387c6fc1..4a23753af 100644
--- a/weaver/src/org/aspectj/weaver/patterns/Declare.java
+++ b/weaver/src/org/aspectj/weaver/patterns/Declare.java
@@ -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;
@@ -49,6 +50,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
* any concrete aspects and will have an effect for each concrete aspect it
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java b/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java
index 11fe5579f..45582705e 100644
--- a/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java
+++ b/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java
@@ -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];
- }
+ }
}
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java b/weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java
index a053ae8e1..46dc89339 100644
--- a/weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java
+++ b/weaver/src/org/aspectj/weaver/patterns/DeclareErrorOrWarning.java
@@ -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;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclareParents.java b/weaver/src/org/aspectj/weaver/patterns/DeclareParents.java
index 22492a88c..572f821a6 100644
--- a/weaver/src/org/aspectj/weaver/patterns/DeclareParents.java
+++ b/weaver/src/org/aspectj/weaver/patterns/DeclareParents.java
@@ -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: ");
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java b/weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java
index d82fd5dbe..5aa00a5fb 100644
--- a/weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java
+++ b/weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java
@@ -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);
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java b/weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java
index f5bb96786..6e5da128e 100644
--- a/weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java
+++ b/weaver/src/org/aspectj/weaver/patterns/DeclareSoft.java
@@ -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: ");