From da1791018ec0ac7abebb809f901b7f06399b6047 Mon Sep 17 00:00:00 2001 From: acolyer Date: Thu, 11 Aug 2005 15:30:19 +0000 Subject: [PATCH] initial "parameterizeWith" support for declares --- .../src/org/aspectj/weaver/patterns/Declare.java | 7 +++++++ .../aspectj/weaver/patterns/DeclareAnnotation.java | 14 ++++++++++---- .../weaver/patterns/DeclareErrorOrWarning.java | 7 +++++++ .../aspectj/weaver/patterns/DeclareParents.java | 11 ++++++++++- .../aspectj/weaver/patterns/DeclarePrecedence.java | 8 +++++++- .../org/aspectj/weaver/patterns/DeclareSoft.java | 6 ++++++ 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; @@ -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 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: "); -- 2.39.5