17ceef97c3
Reviewed-by: mcimadamore
82 lines
2.0 KiB
Java
82 lines
2.0 KiB
Java
/*
|
|
* @test /nodynamiccopyright/
|
|
* @bug 8029718 8065800
|
|
* @summary Should always use lambda body structure to disambiguate overload resolution
|
|
* @compile/fail/ref=MostSpecific09.out -XDrawDiagnostics --should-stop=ifError=ATTR --should-stop=ifNoError=ATTR --debug=verboseResolution=applicable,success MostSpecific09.java
|
|
*/
|
|
|
|
class MostSpecific09 {
|
|
|
|
interface I {
|
|
String xoo(String x);
|
|
}
|
|
|
|
interface J {
|
|
void xoo(int x);
|
|
}
|
|
|
|
static void foo(I i) {}
|
|
static void foo(J j) {}
|
|
|
|
static void moo(I i) {}
|
|
static void moo(J j) {}
|
|
|
|
void m() {
|
|
foo((x) -> { return x += 1; });
|
|
foo((x) -> { return ""; });
|
|
foo((x) -> { System.out.println(""); });
|
|
foo((x) -> { return ""; System.out.println(""); });
|
|
foo((x) -> { throw new RuntimeException(); });
|
|
foo((x) -> { while (true); });
|
|
|
|
foo((x) -> x += 1);
|
|
foo((x) -> "");
|
|
}
|
|
|
|
/* any return statement that is not in the body of the lambda but in an
|
|
* inner class or another lambda should be ignored for value void compatibility
|
|
* determination.
|
|
*/
|
|
void m1() {
|
|
boolean cond = true;
|
|
foo((x) -> {
|
|
if (cond) {
|
|
return "";
|
|
}
|
|
System.out.println("");
|
|
});
|
|
|
|
foo((x)->{
|
|
class Bar {
|
|
String m() {
|
|
return "from Bar.m()";
|
|
}
|
|
}
|
|
class Boo {
|
|
Bar b = new Bar (){
|
|
String m() {
|
|
return "from Bar$1.m()";
|
|
}
|
|
};
|
|
}
|
|
moo((y) -> { return ""; });
|
|
return;
|
|
});
|
|
|
|
foo((x)->{
|
|
class Bar {
|
|
void m() {}
|
|
}
|
|
class Boo {
|
|
Bar b = new Bar (){
|
|
void m() {
|
|
return;
|
|
}
|
|
};
|
|
}
|
|
moo((y) -> { System.out.println(""); });
|
|
return "";
|
|
});
|
|
}
|
|
}
|