import java.util.Comparator; class MyGen<K0> {} abstract class Ordering<T> implements Comparator<T> { // Natural order public static <C extends Comparable> Ordering<C> natural() { return new Ordering<C>() { @Override public int compare(C o1, C o2) { return 0; } }; } } class PolyCollectorTypeVars { // Both of these come from the extends Comparable on line 9 @SuppressWarnings({"rawtypes", "type.argument.type.incompatible"}) public static MyGen<Comparable> treeKeys2() { // See Limitation in DefaultTypeArgumentInference on interdependent methods return treeKeys(Ordering.natural()); } public static <K0> MyGen<K0> treeKeys(final Comparator<K0> comparator) { return new MyGen<K0>(); } }