8334466: Ambiguous method call with generics may cause FunctionDescriptorLookupError
Reviewed-by: jlahoda
This commit is contained in:
parent
89a15f1414
commit
61d1dc5953
@ -1219,9 +1219,17 @@ public class Resolve {
|
||||
|
||||
/** Parameters {@code t} and {@code s} are unrelated functional interface types. */
|
||||
private boolean functionalInterfaceMostSpecific(Type t, Type s, JCTree tree) {
|
||||
Type tDesc = types.findDescriptorType(types.capture(t));
|
||||
Type tDescNoCapture = types.findDescriptorType(t);
|
||||
Type sDesc = types.findDescriptorType(s);
|
||||
Type tDesc;
|
||||
Type tDescNoCapture;
|
||||
Type sDesc;
|
||||
try {
|
||||
tDesc = types.findDescriptorType(types.capture(t));
|
||||
tDescNoCapture = types.findDescriptorType(t);
|
||||
sDesc = types.findDescriptorType(s);
|
||||
} catch (Types.FunctionDescriptorLookupError ex) {
|
||||
// don't report, a more meaningful error should be reported upstream
|
||||
return false;
|
||||
}
|
||||
final List<Type> tTypeParams = tDesc.getTypeArguments();
|
||||
final List<Type> tTypeParamsNoCapture = tDescNoCapture.getTypeArguments();
|
||||
final List<Type> sTypeParams = sDesc.getTypeArguments();
|
||||
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8334466
|
||||
* @summary Ambiguous method call with generics may cause FunctionDescriptorLookupError
|
||||
* @compile/fail/ref=CrashWithFunctionDescriptorLookupErrorTest.out -XDrawDiagnostics CrashWithFunctionDescriptorLookupErrorTest.java
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
|
||||
class CrashWithFunctionDescriptorLookupErrorTest {
|
||||
void m() {
|
||||
List<X> list = List.of(new X());
|
||||
test(list.get(0));
|
||||
}
|
||||
|
||||
void test(A<?> a) { }
|
||||
void test(B<?> b) { }
|
||||
|
||||
interface A<T extends A<T>> { T a(); }
|
||||
interface B<T extends B<T>> { T b(); }
|
||||
class X implements A<X>, B<X> {
|
||||
public X a() { return null; }
|
||||
public X b() { return null; }
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
CrashWithFunctionDescriptorLookupErrorTest.java:13:9: compiler.err.ref.ambiguous: test, kindname.method, test(CrashWithFunctionDescriptorLookupErrorTest.A<?>), CrashWithFunctionDescriptorLookupErrorTest, kindname.method, test(CrashWithFunctionDescriptorLookupErrorTest.B<?>), CrashWithFunctionDescriptorLookupErrorTest
|
||||
1 error
|
Loading…
x
Reference in New Issue
Block a user