Fix compilation exception where overload ambiguity should be
#KT-16246 Fixed
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
* Copyright 2010-2017 JetBrains s.r.o.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -75,7 +75,7 @@ fun <D : CallableDescriptor> ResolvedCall<D>.usesDefaultArguments(): Boolean {
|
|||||||
fun <C: ResolutionContext<C>> Call.hasUnresolvedArguments(context: ResolutionContext<C>): Boolean {
|
fun <C: ResolutionContext<C>> Call.hasUnresolvedArguments(context: ResolutionContext<C>): Boolean {
|
||||||
val arguments = valueArguments.map { it.getArgumentExpression() }
|
val arguments = valueArguments.map { it.getArgumentExpression() }
|
||||||
return arguments.any (fun (argument: KtExpression?): Boolean {
|
return arguments.any (fun (argument: KtExpression?): Boolean {
|
||||||
if (argument == null || ArgumentTypeResolver.isFunctionLiteralArgument(argument, context)) return false
|
if (argument == null || ArgumentTypeResolver.isFunctionLiteralOrCallableReference(argument, context)) return false
|
||||||
|
|
||||||
val resolvedCall = argument.getResolvedCall(context.trace.bindingContext) as MutableResolvedCall<*>?
|
val resolvedCall = argument.getResolvedCall(context.trace.bindingContext) as MutableResolvedCall<*>?
|
||||||
if (resolvedCall != null && !resolvedCall.hasInferredReturnType()) return false
|
if (resolvedCall != null && !resolvedCall.hasInferredReturnType()) return false
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
import kotlin.reflect.KCallable
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
fun <T> installRoute(handler: T) where T : (String) -> Any?, T : KCallable<*> {
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> installRoute(handler: T) where T : () -> Any?, T : KCallable<*> {
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<!OVERLOAD_RESOLUTION_AMBIGUITY!>installRoute<!><Any>(::route)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun route(s: String): Any? = null
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun route(/*0*/ s: kotlin.String): kotlin.Any?
|
||||||
|
|
||||||
|
public final class Foo {
|
||||||
|
public constructor Foo()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public final fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public final fun </*0*/ T : () -> kotlin.Any?> installRoute(/*0*/ handler: T): kotlin.Unit where T : kotlin.reflect.KCallable<*>
|
||||||
|
public final fun </*0*/ T : (kotlin.String) -> kotlin.Any?> installRoute(/*0*/ handler: T): kotlin.Unit where T : kotlin.reflect.KCallable<*>
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
+2
-2
@@ -20,7 +20,7 @@ val x1 = fn1(1, ::foo, ::foo)
|
|||||||
val x2 = fn1(1, ::foo, ::bar)
|
val x2 = fn1(1, ::foo, ::bar)
|
||||||
|
|
||||||
val x3 = fn2(::bar, ::foo)
|
val x3 = fn2(::bar, ::foo)
|
||||||
val x4 = fn2(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>, ::bar)
|
val x4 = <!OVERLOAD_RESOLUTION_AMBIGUITY!>fn2<!>(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>, ::bar)
|
||||||
val x5 = fn2(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>, ::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>)
|
val x5 = <!OVERLOAD_RESOLUTION_AMBIGUITY!>fn2<!>(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>, ::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>)
|
||||||
|
|
||||||
val x6 = fn3(1, ::qux)
|
val x6 = fn3(1, ::qux)
|
||||||
@@ -2580,6 +2580,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("intersectionTypeOverloadWithWrongParameter.kt")
|
||||||
|
public void testIntersectionTypeOverloadWithWrongParameter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/intersectionTypeOverloadWithWrongParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt10036.kt")
|
@TestMetadata("kt10036.kt")
|
||||||
public void testKt10036() throws Exception {
|
public void testKt10036() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/kt10036.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/kt10036.kt");
|
||||||
|
|||||||
+6
@@ -2580,6 +2580,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("intersectionTypeOverloadWithWrongParameter.kt")
|
||||||
|
public void testIntersectionTypeOverloadWithWrongParameter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/intersectionTypeOverloadWithWrongParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt10036.kt")
|
@TestMetadata("kt10036.kt")
|
||||||
public void testKt10036() throws Exception {
|
public void testKt10036() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/kt10036.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/callableReference/resolve/kt10036.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user