Browse Source

faster parametercount checking

tags/V1_6_7
aclement 14 years ago
parent
commit
db70f92aa1

+ 15
- 12
org.aspectj.matcher/src/org/aspectj/weaver/patterns/SignaturePattern.java View File

@@ -436,22 +436,25 @@ public class SignaturePattern extends PatternNode {
// just give up early (for now)
return false;
}

int patternParameterCount = parameterTypes.size();
int joinpointParameterCount = methodJoinpoint.getParameterTypes().length;
boolean isVarargs = methodJoinpoint.isVarargsMethod();

// Quick rule: pattern specifies zero parameters, and joinpoint has parameters *OR*
if (patternParameterCount == 0 && joinpointParameterCount > 0) { // varargs may allow this
return true;
}
if (patternParameterCount == 0 || parameterTypes.ellipsisCount == 0) {
boolean equalCount = patternParameterCount == methodJoinpoint.getParameterTypes().length;

// Quick rule: pattern doesn't specify ellipsis and there are a different number of parameters on the
// method join point as compared with the pattern
if (parameterTypes.ellipsisCount == 0 && patternParameterCount != joinpointParameterCount) {
if (patternParameterCount > 0 && parameterTypes.get(patternParameterCount - 1).isVarArgs()) {
return false;
// Quick rule: pattern specifies zero parameters, and joinpoint has parameters *OR*
if (patternParameterCount == 0 && !equalCount) {
return true;
}

// Quick rule: pattern doesn't specify ellipsis and there are a different number of parameters on the
// method join point as compared with the pattern
if (parameterTypes.ellipsisCount == 0 && !equalCount) {
if (patternParameterCount > 0 && parameterTypes.get(patternParameterCount - 1).isVarArgs()) {
return false;
}
return true;
}
return true;
}

return false;

Loading…
Cancel
Save