Consider the following test case:
import java.util.Comparator;
import org.checkerframework.checker.determinism.qual.PolyDet;
public class ComparatorIssue {
public static void test(
@PolyDet Class<?> @PolyDet [] result, @PolyDet MyComparator classComparator) {
sortProxy(result, classComparator);
}
private static class MyComparator implements Comparator<Class<?>> {
@Override
public int compare(Class<?> c1, Class<?> c2) {
return c1.getName().compareTo(c2.getName());
}
}
public static <T> void sortProxy(T @PolyDet [] a, @PolyDet("use") Comparator<? super T> c) {}
}
Running the command javac -processor determinism checker/tests/determinism/ComparatorIssue.java -AusePolyDefault
results in the following unexpected error:
checker/tests/determinism/ComparatorIssue.java:8: error: [argument.type.incompatible] incompatible argument for parameter c of sortProxy.
sortProxy(result, classComparator);
^
found : @PolyDet MyComparator
required: @PolyDet Comparator<? extends @NonDet Object super @PolyDet Class<? extends @NonDet Object>>
checker/tests/determinism/ComparatorIssue.java:8: error: [argument.type.incompatible] incompatible argument for parameter c of sortProxy.
sortProxy(result, classComparator);
^
found : @PolyDet MyComparator
required: @PolyDet Comparator<? extends @NonDet Object super @PolyDet Class<? extends @NonDet Object>>
2 errors
Consider the following test case:
Running the command
javac -processor determinism checker/tests/determinism/ComparatorIssue.java -AusePolyDefaultresults in the following unexpected error: