aboutsummaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-08-18 09:34:43 +0000
committeracolyer <acolyer>2005-08-18 09:34:43 +0000
commit4a5c56c32b142fe6decf40ee32d942bc50a5a7ac (patch)
tree2a60ce51c69a28f3ef4ffc6776b591c6bea4e7f0 /weaver
parentdde3a9141c63bd2911896735855625cd50803040 (diff)
downloadaspectj-4a5c56c32b142fe6decf40ee32d942bc50a5a7ac.tar.gz
aspectj-4a5c56c32b142fe6decf40ee32d942bc50a5a7ac.zip
support for parameterizeWith
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/AndAnnotationTypePattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/AnnotationTypePattern.java11
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java20
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/NotAnnotationTypePattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java8
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/OrAnnotationTypePattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java9
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java8
10 files changed, 101 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/AndAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/AndAnnotationTypePattern.java
index 4635051b2..1b1fe151c 100644
--- a/weaver/src/org/aspectj/weaver/patterns/AndAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/AndAnnotationTypePattern.java
@@ -11,6 +11,7 @@ package org.aspectj.weaver.patterns;
import java.io.DataOutputStream;
import java.io.IOException;
+import java.util.Map;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.AnnotatedElement;
@@ -54,6 +55,14 @@ public class AndAnnotationTypePattern extends AnnotationTypePattern {
return this;
}
+ public AnnotationTypePattern parameterizeWith(Map typeVariableMap) {
+ AnnotationTypePattern newLeft = left.parameterizeWith(typeVariableMap);
+ AnnotationTypePattern newRight = right.parameterizeWith(typeVariableMap);
+ AndAnnotationTypePattern ret = new AndAnnotationTypePattern(newLeft,newRight);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public static AnnotationTypePattern read(VersionedDataInputStream s, ISourceContext context) throws IOException {
AnnotationTypePattern p = new AndAnnotationTypePattern(
AnnotationTypePattern.read(s,context),
diff --git a/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java
index 4ea4852a8..e3d4d3d86 100644
--- a/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/AndTypePattern.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.util.FuzzyBoolean;
import org.aspectj.weaver.ISourceContext;
@@ -120,6 +121,14 @@ public class AndTypePattern extends TypePattern {
return this;
}
+ public TypePattern parameterizeWith(Map typeVariableMap) {
+ TypePattern newLeft = left.parameterizeWith(typeVariableMap);
+ TypePattern newRight = right.parameterizeWith(typeVariableMap);
+ AndTypePattern ret = new AndTypePattern(newLeft,newRight);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public TypePattern resolveBindingsFromRTTI(boolean allowBinding, boolean requireExactType) {
if (requireExactType) return TypePattern.NO;
left = left.resolveBindingsFromRTTI(allowBinding,requireExactType);
diff --git a/weaver/src/org/aspectj/weaver/patterns/AnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/AnnotationTypePattern.java
index 822a22ac9..16e5f4cf7 100644
--- a/weaver/src/org/aspectj/weaver/patterns/AnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/AnnotationTypePattern.java
@@ -11,6 +11,7 @@ package org.aspectj.weaver.patterns;
import java.io.DataOutputStream;
import java.io.IOException;
+import java.util.Map;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.AnnotatedElement;
@@ -45,6 +46,8 @@ public abstract class AnnotationTypePattern extends PatternNode {
public abstract void resolve(World world);
+ public abstract AnnotationTypePattern parameterizeWith(Map/*name -> ResolvedType*/ typeVariableMap);
+
public boolean isAny() { return false; }
/**
@@ -107,6 +110,10 @@ class AnyAnnotationTypePattern extends AnnotationTypePattern {
}
public boolean isAny() { return true; }
+
+ public AnnotationTypePattern parameterizeWith(Map arg0) {
+ return this;
+ }
}
class EllipsisAnnotationTypePattern extends AnnotationTypePattern {
@@ -128,4 +135,8 @@ class EllipsisAnnotationTypePattern extends AnnotationTypePattern {
return visitor.visit(this, data);
}
+ public AnnotationTypePattern parameterizeWith(Map arg0) {
+ return this;
+ }
+
} \ No newline at end of file
diff --git a/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
index 97db59fb9..976158de5 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java
@@ -11,6 +11,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.bridge.MessageUtil;
@@ -19,6 +20,7 @@ import org.aspectj.weaver.AnnotatedElement;
import org.aspectj.weaver.BCException;
import org.aspectj.weaver.ISourceContext;
import org.aspectj.weaver.ResolvedType;
+import org.aspectj.weaver.TypeVariableReference;
import org.aspectj.weaver.UnresolvedType;
import org.aspectj.weaver.VersionedDataInputStream;
import org.aspectj.weaver.WeaverMessages;
@@ -157,6 +159,24 @@ public class ExactAnnotationTypePattern extends AnnotationTypePattern {
return this;
}
+ public AnnotationTypePattern parameterizeWith(Map typeVariableMap) {
+ UnresolvedType newAnnotationType = annotationType;
+ if (annotationType.isTypeVariableReference()) {
+ TypeVariableReference t = (TypeVariableReference) annotationType;
+ String key = t.getTypeVariable().getName();
+ if (typeVariableMap.containsKey(key)) {
+ newAnnotationType = (UnresolvedType) typeVariableMap.get(key);
+ }
+ } else if (annotationType.isParameterizedType()) {
+ newAnnotationType = annotationType.parameterize(typeVariableMap);
+ }
+ ExactAnnotationTypePattern ret = new ExactAnnotationTypePattern(newAnnotationType);
+ ret.formalName = formalName;
+ ret.bindingPattern = bindingPattern;
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
private String maybeGetSimpleName() {
if (formalName != null) return formalName;
String ret = annotationType.getName();
diff --git a/weaver/src/org/aspectj/weaver/patterns/NotAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/NotAnnotationTypePattern.java
index 5e0293158..fbbdf3a54 100644
--- a/weaver/src/org/aspectj/weaver/patterns/NotAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/NotAnnotationTypePattern.java
@@ -11,6 +11,7 @@ package org.aspectj.weaver.patterns;
import java.io.DataOutputStream;
import java.io.IOException;
+import java.util.Map;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.AnnotatedElement;
@@ -50,6 +51,14 @@ public class NotAnnotationTypePattern extends AnnotationTypePattern {
return this;
}
+
+ public AnnotationTypePattern parameterizeWith(Map typeVariableMap) {
+ AnnotationTypePattern newNegatedPattern = negatedPattern.parameterizeWith(typeVariableMap);
+ NotAnnotationTypePattern ret = new NotAnnotationTypePattern(newNegatedPattern);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
/* (non-Javadoc)
* @see org.aspectj.weaver.patterns.PatternNode#write(java.io.DataOutputStream)
*/
diff --git a/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java
index 620ac473d..cc611cb88 100644
--- a/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/NotTypePattern.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.util.FuzzyBoolean;
import org.aspectj.weaver.AjAttribute;
@@ -114,6 +115,13 @@ public class NotTypePattern extends TypePattern {
return this;
}
+ public TypePattern parameterizeWith(Map typeVariableMap) {
+ TypePattern newNegatedPattern = negatedPattern.parameterizeWith(typeVariableMap);
+ NotTypePattern ret = new NotTypePattern(newNegatedPattern);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public TypePattern resolveBindingsFromRTTI(boolean allowBinding, boolean requireExactType) {
if (requireExactType) return TypePattern.NO;
negatedPattern = negatedPattern.resolveBindingsFromRTTI(allowBinding,requireExactType);
diff --git a/weaver/src/org/aspectj/weaver/patterns/OrAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/OrAnnotationTypePattern.java
index 562fafe00..4f3192422 100644
--- a/weaver/src/org/aspectj/weaver/patterns/OrAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/OrAnnotationTypePattern.java
@@ -11,6 +11,7 @@ package org.aspectj.weaver.patterns;
import java.io.DataOutputStream;
import java.io.IOException;
+import java.util.Map;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.AnnotatedElement;
@@ -48,6 +49,14 @@ public class OrAnnotationTypePattern extends AnnotationTypePattern {
return this;
}
+ public AnnotationTypePattern parameterizeWith(Map typeVariableMap) {
+ AnnotationTypePattern newLeft = left.parameterizeWith(typeVariableMap);
+ AnnotationTypePattern newRight = right.parameterizeWith(typeVariableMap);
+ OrAnnotationTypePattern ret = new OrAnnotationTypePattern(newLeft,newRight);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public Object accept(PatternNodeVisitor visitor, Object data) {
return visitor.visit(this,data);
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java
index 007f982dd..8dd01b9f0 100644
--- a/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/OrTypePattern.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.util.FuzzyBoolean;
import org.aspectj.weaver.ISourceContext;
@@ -132,6 +133,14 @@ public class OrTypePattern extends TypePattern {
return this;
}
+ public TypePattern parameterizeWith(Map typeVariableMap) {
+ TypePattern newLeft = left.parameterizeWith(typeVariableMap);
+ TypePattern newRight = right.parameterizeWith(typeVariableMap);
+ OrTypePattern ret = new OrTypePattern(newLeft,newRight);
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public TypePattern resolveBindingsFromRTTI(boolean allowBinding, boolean requireExactType) {
if (requireExactType) return TypePattern.NO;
left = left.resolveBindingsFromRTTI(allowBinding,requireExactType);
diff --git a/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java b/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java
index 9a006ac47..c678dcdb3 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ThrowsPattern.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.ResolvedType;
@@ -81,6 +82,14 @@ public class ThrowsPattern extends PatternNode {
return this;
}
+ public ThrowsPattern parameterizeWith(Map/*name -> resolved type*/ typeVariableMap) {
+ ThrowsPattern ret = new ThrowsPattern(
+ required.parameterizeWith(typeVariableMap),
+ forbidden.parameterizeWith(typeVariableMap));
+ ret.copyLocationFrom(this);
+ return ret;
+ }
+
public boolean matches(UnresolvedType[] tys, World world) {
if (this == ANY) return true;
diff --git a/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
index 81e397033..f1a8f2899 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WildAnnotationTypePattern.java
@@ -11,6 +11,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.bridge.MessageUtil;
@@ -96,6 +97,13 @@ public class WildAnnotationTypePattern extends AnnotationTypePattern {
return this;
}
}
+
+ public AnnotationTypePattern parameterizeWith(Map typeVariableMap) {
+ WildAnnotationTypePattern ret = new WildAnnotationTypePattern(typePattern.parameterizeWith(typeVariableMap));
+ ret.copyLocationFrom(this);
+ ret.resolved = resolved;
+ return ret;
+ }
private static final byte VERSION = 1; // rev if ser. form changes
/* (non-Javadoc)