summaryrefslogtreecommitdiffstats
path: root/org.aspectj.matcher
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2018-04-18 08:29:35 -0700
committerAndy Clement <aclement@pivotal.io>2018-04-18 08:29:35 -0700
commitce81592441c82ba3552e6ec9394fbc88ea717cd1 (patch)
tree01ab5794028631bc356e5b5b84fa0f1c2e83b052 /org.aspectj.matcher
parentb2cb18ef127097ad2c258b9d061cc70b5fb19432 (diff)
downloadaspectj-param_anno_matching_change.tar.gz
aspectj-param_anno_matching_change.zip
Diffstat (limited to 'org.aspectj.matcher')
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java
index 365b5b7a7..3fcc2eb0b 100644
--- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java
+++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java
@@ -532,18 +532,27 @@ public class SignaturePattern extends PatternNode implements ISignaturePattern {
ResolvableTypeList rtl = new ResolvableTypeList(world, aMethod.getParameterTypes());
// Only fetch the parameter annotations if the pointcut is going to be matching on them
ResolvedType[][] parameterAnnotationTypes = null;
- if (isMatchingParameterAnnotations()) {
+ boolean paramAnnoMatching = false;
+ // if there are parameterAnnotationTypes then only be concerned if a subjectMatch
+ if (subjectMatch && isMatchingParameterAnnotations()) {
parameterAnnotationTypes = aMethod.getParameterAnnotationTypes();
if (parameterAnnotationTypes != null && parameterAnnotationTypes.length == 0) {
parameterAnnotationTypes = null;
}
+ paramAnnoMatching = true;
}
if (!parameterTypes.matches(rtl, TypePattern.STATIC, parameterAnnotationTypes).alwaysTrue()) {
// It could still be a match based on the generic sig parameter types of a parameterized type
- if (!parameterTypes.matches(new ResolvableTypeList(world, aMethod.getGenericParameterTypes()), TypePattern.STATIC,
- parameterAnnotationTypes).alwaysTrue()) {
+ FuzzyBoolean matches = parameterTypes.matches(new ResolvableTypeList(world, aMethod.getGenericParameterTypes()), TypePattern.STATIC,
+ parameterAnnotationTypes);
+ if (!matches.alwaysTrue()) {
+ if (paramAnnoMatching && matches.alwaysFalse()) {
+ return FuzzyBoolean.NO;
+ }
return FuzzyBoolean.MAYBE;
+// return FuzzyBoolean.NO;//
+// return matches.alwaysFalse()?FuzzyBoolean.NO:FuzzyBoolean.MAYBE;
// It could STILL be a match based on the erasure of the parameter types??
// to be determined via test cases...
}