aboutsummaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2006-01-23 15:21:18 +0000
committeraclement <aclement>2006-01-23 15:21:18 +0000
commit28f8c695ccc8513e9dcbe0c4fb6ebdc71cf84313 (patch)
tree7ed9332096b0febfd74288f1fd16d25d2623793e /weaver
parent01a8b2eb36e1a34c80697c2034f9657b74dc281a (diff)
downloadaspectj-28f8c695ccc8513e9dcbe0c4fb6ebdc71cf84313.tar.gz
aspectj-28f8c695ccc8513e9dcbe0c4fb6ebdc71cf84313.zip
test and fix for 124654: generic annotation matching..
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
index ae7b841cc..bb2c6ba61 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
@@ -30,6 +30,7 @@ import org.aspectj.weaver.ResolvedType;
import org.aspectj.weaver.Shadow;
import org.aspectj.weaver.ShadowMunger;
import org.aspectj.weaver.TypeVariable;
+import org.aspectj.weaver.TypeVariableReference;
import org.aspectj.weaver.UnresolvedType;
import org.aspectj.weaver.VersionedDataInputStream;
import org.aspectj.weaver.WeaverMessages;
@@ -223,9 +224,17 @@ public class ReferencePointcut extends Pointcut {
"bad parameter to pointcut reference");
return;
}
- if (!p.matchesSubtypes(parameterTypes[i]) &&
- !p.getExactType().equals(UnresolvedType.OBJECT))
- {
+
+ boolean reportProblem = false;
+ if (parameterTypes[i].isTypeVariableReference() && p.getExactType().isTypeVariableReference()) {
+ UnresolvedType One = ((TypeVariableReference)parameterTypes[i]).getTypeVariable().getFirstBound();
+ UnresolvedType Two = ((TypeVariableReference)p.getExactType()).getTypeVariable().getFirstBound();
+ reportProblem = !One.resolve(scope.getWorld()).isAssignableFrom(Two.resolve(scope.getWorld()));
+ } else {
+ reportProblem = !p.matchesSubtypes(parameterTypes[i]) &&
+ !p.getExactType().equals(UnresolvedType.OBJECT);
+ }
+ if (reportProblem) {
scope.message(IMessage.ERROR, p, "incompatible type, expected " +
parameterTypes[i].getName() + " found " + p +". Check the type specified in your pointcut");
return;