diff options
author | acolyer <acolyer> | 2005-08-11 15:30:19 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-08-11 15:30:19 +0000 |
commit | da1791018ec0ac7abebb809f901b7f06399b6047 (patch) | |
tree | 9e33911e1eb2df52fa8a3528926a1c49300917f0 /weaver | |
parent | f509577970fe3ee7f7b33ba60d0c80f129503fac (diff) | |
download | aspectj-da1791018ec0ac7abebb809f901b7f06399b6047.tar.gz aspectj-da1791018ec0ac7abebb809f901b7f06399b6047.zip |
initial "parameterizeWith" support for declares
Diffstat (limited to 'weaver')
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: "); |