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);
        }
    }
}
