class M<X, Y> { interface Map<X,Y> { Y get(X x); } Map<X, Y> m; Y <flown11111>y; public M(Map<X, Y> m, Y <flown1111111>y) { this.m = m; this.y = <flown111111>y; } public static <MX, MY> M<MX, MY> makeM(MY <flown111111111>y) { return new M<MX, MY>(null, <flown11111111>y); } Y get(X x) { Y res = <flown11121>m.get(x); return <flown111>res == null ? <flown1111>y : <flown1112>res; } public static void g() { String <caret>a = <flown1>f(M.<String, String>makeM(<flown1111111111>"a"), "k"); } public static <A> A f(M<A, A> a, A ka) { return <flown11>a.get(ka); } }