new overload resolution: most specific check on invalid class exceptions fixed

This commit is contained in:
Anna Kozlova
2014-04-17 12:25:58 +02:00
parent 552dfe92a9
commit 98ab76f060
3 changed files with 18 additions and 2 deletions

View File

@@ -1070,7 +1070,7 @@ public class InferenceSession {
session.addConstraint(new StrictSubtypingConstraint(tReturnType, sReturnType));
return true;
} else {
return TypeConversionUtil.isAssignable(sReturnType, tReturnType);
return sReturnType != null && tReturnType != null && TypeConversionUtil.isAssignable(sReturnType, tReturnType);
}
}
}
@@ -1115,7 +1115,7 @@ public class InferenceSession {
session.addConstraint(new StrictSubtypingConstraint(tReturnType, sReturnType));
return true;
} else {
return TypeConversionUtil.isAssignable(sReturnType, tReturnType);
return sReturnType != null && tReturnType != null && TypeConversionUtil.isAssignable(sReturnType, tReturnType);
}
}

View File

@@ -0,0 +1,12 @@
class Test {
interface I { Object in<EOLError descr="';' expected"></EOLError>
<error descr="Invalid method declaration; return type required">voke</error>(); }
interface IStr { String foo(); }
public static void call(IStr str) {}
public static void call(I i) { }
public static void main(String[] args) {
call<error descr="Ambiguous method call: both 'Test.call(IStr)' and 'Test.call(I)' match">(()-> null)</error>;
}
}

View File

@@ -75,6 +75,10 @@ public class MostSpecificResolutionTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testIncompleteMethodInInterface() throws Exception {
doTest(false);
}
private void doTest() {
doTest(true);
}