choose the most specific candidate after type inference

This commit is contained in:
Svetlana Isakova
2012-08-06 16:37:48 +04:00
parent b24509577c
commit 679a678e7c
3 changed files with 27 additions and 9 deletions
@@ -325,15 +325,6 @@ public class CallResolver {
}
completeTypeInferenceDependentOnExpectedTypeForCall(resolvedCall, context, tracing, successful, failed);
}
if (resultsWithIncompleteTypeInference.getResultingCalls().size() > 1) {
for (ResolvedCallWithTrace<D> call : successful) {
if (call instanceof ResolvedCallImpl) {
((ResolvedCallImpl)call).addStatus(ResolutionStatus.TYPE_INFERENCE_ERROR);
failed.add(call);
}
}
successful.clear();
}
OverloadResolutionResultsImpl<D> results = computeResultAndReportErrors(context.trace, tracing, successful, failed);
if (!results.isSingleResult()) {
checkTypesWithNoCallee(context);
@@ -0,0 +1,22 @@
package i
//+JDK
import java.util.*
fun <T, R> Collection<T>.map1(<!UNUSED_PARAMETER!>f<!> : (T) -> R) : List<R> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
fun <T, R> java.lang.Iterable<T>.map1(<!UNUSED_PARAMETER!>f<!> : (T) -> R) : List<R> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
fun test(list: List<Int>) {
val res = list.map1 { it }
//check res is not of error type
<!TYPE_MISMATCH!>res<!> : String
}
fun <T> Collection<T>.foo() {}
fun <T> java.lang.Iterable<T>.foo() {}
fun test1(list: List<Int>) {
val res = list.foo()
//check res is not of error type
<!TYPE_MISMATCH!>res<!> : String
}
@@ -1309,6 +1309,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/inference/mapFunction.kt");
}
@TestMetadata("mostSpecificAfterInference.kt")
public void testMostSpecificAfterInference() throws Exception {
doTest("compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.kt");
}
@TestMetadata("NoInferenceFromDeclaredBounds.kt")
public void testNoInferenceFromDeclaredBounds() throws Exception {
doTest("compiler/testData/diagnostics/tests/inference/NoInferenceFromDeclaredBounds.kt");