import org.checkerframework.checker.nullness.qual.*; public class MethodTypeVars2 { class GeoSegment {} interface Path<N1, P1 extends Path<N1, P1>> {} private static <N2 extends GeoSegment, P2 extends Path<N2, P2>> @Nullable Object pathToRoute( Path<N2, P2> path) { return null; } class StreetSegment extends GeoSegment {} class StreetSegmentPath implements Path<StreetSegment, StreetSegmentPath> {} void call(StreetSegmentPath p) { Object r = pathToRoute(p); } static class WorkingWithOne { interface GPath<P extends GPath<P>> {} class GStreetSegmentPath implements GPath<GStreetSegmentPath> {} private static <P extends GPath<P>> @Nullable Object pathToRoute(GPath<P> path) { return null; } void call(GStreetSegmentPath p) { Object r = pathToRoute(p); } } }