diff options
author | aclement <aclement> | 2006-01-23 15:21:18 +0000 |
---|---|---|
committer | aclement <aclement> | 2006-01-23 15:21:18 +0000 |
commit | 28f8c695ccc8513e9dcbe0c4fb6ebdc71cf84313 (patch) | |
tree | 7ed9332096b0febfd74288f1fd16d25d2623793e /weaver | |
parent | 01a8b2eb36e1a34c80697c2034f9657b74dc281a (diff) | |
download | aspectj-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.java | 15 |
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; |