interface I { void m(int x); } class InContexts { void m(I s) { } void assignment() { I s1 = (x-> { System.out.println(); }); I s2 = ((x-> { System.out.println(); })); } void method() { m((x-> { System.out.println(); })); m(((x-> { System.out.println(); }))); } I returnContext() { return (x -> {System.out.println();}); } } interface I1<A, B> { B foo(A a); } class ValueLambdaInContext { <Z> void m1(I1<String, Z> i) { } <Z> void m2(I1<String, I1<String, Z>> i) { } void exprMethod() { m1(s1 -> 1); m2(s1 -> s2 -> 1); } void exprAssignment() { I1<String, Integer> in1 = s1 -> 1; I1<String, I1<String, Integer>> in2 = s1 -> s2 -> 1; } void statementMethod() { m1(s1 -> { return 1; }); m2(s1 -> { return s2 -> { return 1; }; }); } void statementAssignment() { I1<String, Integer> in1 = s1 -> { return 1; }; I1<String, I1<String, Integer>> in2 = s1 -> { return s2 -> { return 1; }; }; } }