package p;

class TestInlineMethodReference0 {
	
	private FI fun1() {
		final FI fi = this::m;
		
		FI fi1 = fi;	// [1]
		FI fi2;
		fi2 = fi;		// [2]	
		
		FI[] a = new FI[] {fi, fi}; // [3]
		FI[][] b = new FI[][] {{fi, fi}, {fi}}; // [4]
		FI[] c = {fi, fi}; // [5]
		FI[][] d = {{fi}, {fi}}; // [6]
	
		int x1 = fun2(fi);	// [7]
		TestInlineMethodReference0 c1 = new TestInlineMethodReference0(fi);	// [8]
		F f1 = (fi_p) -> fi;	// [9]
		F f2 = (fi_p) -> {
			return fi;		// [10]
		};
		f1.bar(fi); // [11]
		FI fi4 = true ? fi : fi; // [12]
		return fi;		// [13]
	}
	
	private int fun2(FI fi) {return 0;}
	public TestInlineMethodReference0(FI fi) { }
	
	int m(int x) {
		return x++;
	}
}

@FunctionalInterface
interface FI {
	int foo(int x);
}

@FunctionalInterface
interface F {
	FI bar(FI fi);
}