use of com.google.common.collect.SetMultimap in project auto by google.
the class MoreElements method getAllMethods.
private static ImmutableSet<ExecutableElement> getAllMethods(TypeElement type, Overrides overrides) {
SetMultimap<String, ExecutableElement> methodMap = LinkedHashMultimap.create();
getAllMethods(type, methodMap);
// Find methods that are overridden. We do this using `Elements.overrides`, which means
// that it is inherently a quadratic operation, since we have to compare every method against
// every other method. We reduce the performance impact by (a) grouping methods by name, since
// a method cannot override another method with a different name, and (b) making sure that
// methods in ancestor types precede those in descendant types, which means we only have to
// check a method against the ones that follow it in that order.
Set<ExecutableElement> overridden = new LinkedHashSet<ExecutableElement>();
for (Collection<ExecutableElement> methods : methodMap.asMap().values()) {
List<ExecutableElement> methodList = ImmutableList.copyOf(methods);
for (int i = 0; i < methodList.size(); i++) {
ExecutableElement methodI = methodList.get(i);
for (int j = i + 1; j < methodList.size(); j++) {
ExecutableElement methodJ = methodList.get(j);
if (overrides.overrides(methodJ, methodI, type)) {
overridden.add(methodI);
break;
}
}
}
}
return methodMap.values().stream().filter(m -> !overridden.contains(m)).collect(toImmutableSet());
}
Aggregations