}
if (p == parameterTypes.length - 1 && parameterTypes[p].getType().isArray() && varArgs) {
if (arguments.length == p) { matched++; continue; }
IBytecodeResolvable ct = parameterTypes[p];
for (int a=p; a<arguments.length; a++) {
if (arguments[a] == null && ct.getType().isPrimitive()) return ArgumentMatch.NONE;
if (arguments[a] == null) continue;
IBytecodeResolvable abr = pool.resolve(arguments[a].getClassName());
if (abr.isInstanceof(pool, ct)) continue;
if (arguments[a].isArray() && arguments[a].getComponentType().compareTo( ct.getType() ) == 0) continue;
return ArgumentMatch.NONE;
}
} else if (parameterTypes[p].getType().isPrimitive()) {
TypeDescriptor ptype = parameterTypes[p].getType();
if (ptype == arguments[p]) { matched++; continue; }
if (ptype.isPrimitive() && arguments[p].getClassName().equals(ptype.getBoxedType())) {
matched++; continue;
} else return ArgumentMatch.NONE;
} else if (arguments.length > p) {
if (parameterTypes[p].getType().compareTo( arguments[p] ) == 0) { matched++; continue; }
else {
IBytecodeResolvable abr = pool.resolve(arguments[p].getClassName());
if (abr.isInstanceof( pool, parameterTypes[p] )) continue;
}
return ArgumentMatch.NONE;
}
}