public int compare(MethodDesc o1, MethodDesc o2) { return PolymorphicDispatcher.this.compare(o1, o2); } });
public List<MethodDesc> apply(List<Class<?>> paramTypes) { List<MethodDesc> result = new ArrayList<MethodDesc>(); Iterator<MethodDesc> iterator = declaredMethodsOrderedBySpecificParameterType.iterator(); while (iterator.hasNext()) { MethodDesc methodDesc = iterator.next(); if (methodDesc.isInvokeable(paramTypes)) { if (result.isEmpty()) { result.add(methodDesc); } else { int compare = compare(result.get(0), methodDesc); if (compare < 0) { result.clear(); result.add(methodDesc); } else if (compare == 0) { result.add(methodDesc); } } } } return result; } }
@Override public List<MethodDesc> apply(List<Class<?>> paramTypes) { // 'result' contains all best-matched MethodDesc for which // pairwise compare(m1, m2) == 0, meaning they're equal or unrelated. List<MethodDesc> result = new ArrayList<MethodDesc>(); Iterator<MethodDesc> iterator = methods.iterator(); NEXT: while (iterator.hasNext()) { MethodDesc methodDesc = iterator.next(); if (methodDesc.isInvokeable(paramTypes)) { if (result.isEmpty()) { result.add(methodDesc); } else { Iterator<MethodDesc> it = result.iterator(); while(it.hasNext()) { MethodDesc next = it.next(); int compare = compare(next, methodDesc); if (compare < 0) { it.remove(); } else if (compare > 0) { continue NEXT; } } result.add(methodDesc); } } } return result; } }