Record resolution results for ambiguous callable references
#KT-34282 Fixed
This commit is contained in:
+5
@@ -10779,6 +10779,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt34282.kt")
|
||||||
|
public void testKt34282() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt34282.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt3496.kt")
|
@TestMetadata("kt3496.kt")
|
||||||
public void testKt3496() throws Exception {
|
public void testKt3496() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
||||||
|
|||||||
+1
@@ -145,6 +145,7 @@ class DiagnosticReporterByTrackingStrategy(
|
|||||||
val candidates = ambiguityDiagnostic.candidates.map { it.candidate }
|
val candidates = ambiguityDiagnostic.candidates.map { it.candidate }
|
||||||
reportIfNonNull(expression) {
|
reportIfNonNull(expression) {
|
||||||
trace.report(CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY.on(it.callableReference, candidates))
|
trace.report(CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY.on(it.callableReference, candidates))
|
||||||
|
trace.record(BindingContext.AMBIGUOUS_REFERENCE_TARGET, it.callableReference, candidates)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ fun test2() {
|
|||||||
fun foo() {}
|
fun foo() {}
|
||||||
|
|
||||||
<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>
|
<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>
|
||||||
foo(<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)
|
foo(<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)
|
||||||
foo(<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!NI;UNRESOLVED_REFERENCE, OI;DEBUG_INFO_MISSING_UNRESOLVED!>unresolved<!>)
|
foo(<!UNRESOLVED_REFERENCE!>Unresolved<!>::<!NI;UNRESOLVED_REFERENCE, OI;DEBUG_INFO_MISSING_UNRESOLVED!>unresolved<!>)
|
||||||
::<!UNRESOLVED_REFERENCE!>unresolved<!>
|
::<!UNRESOLVED_REFERENCE!>unresolved<!>
|
||||||
}
|
}
|
||||||
+1
-1
@@ -11,7 +11,7 @@ fun test() {
|
|||||||
val x2: (Int) -> Unit = baz(id(::foo), ::foo)
|
val x2: (Int) -> Unit = baz(id(::foo), ::foo)
|
||||||
val x3: (Int) -> Unit = baz(id(::foo), id(id(::foo)))
|
val x3: (Int) -> Unit = baz(id(::foo), id(id(::foo)))
|
||||||
val x4: (String) -> Unit = baz(id(::foo), id(id(::foo)))
|
val x4: (String) -> Unit = baz(id(::foo), id(id(::foo)))
|
||||||
val x5: (Double) -> Unit = baz(id(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>), id(id(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>)))
|
val x5: (Double) -> Unit = baz(id(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>), id(id(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>)))
|
||||||
|
|
||||||
|
|
||||||
id<(Int) -> Unit>(id(id(::foo)))
|
id<(Int) -> Unit>(id(id(::foo)))
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ fun test1() {
|
|||||||
baz<String>(::foo).checkType { _<String?>() }
|
baz<String>(::foo).checkType { _<String?>() }
|
||||||
baz<Boolean>(::foo).checkType { _<Boolean?>() }
|
baz<Boolean>(::foo).checkType { _<Boolean?>() }
|
||||||
|
|
||||||
val b1: Int = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)<!>
|
val b1: Int = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>)<!>
|
||||||
val b2: String = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)<!>
|
val b2: String = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>)<!>
|
||||||
val b3: Boolean = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)<!>
|
val b3: Boolean = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>baz(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>)<!>
|
||||||
}
|
}
|
||||||
Vendored
+4
-4
@@ -5,9 +5,9 @@ fun test() {
|
|||||||
val a1: Array<Double.(Double) -> Double> = arrayOf(Double::plus, Double::minus)
|
val a1: Array<Double.(Double) -> Double> = arrayOf(Double::plus, Double::minus)
|
||||||
val a2: Array<Double.(Int) -> Double> = arrayOf(Double::plus, Double::minus)
|
val a2: Array<Double.(Int) -> Double> = arrayOf(Double::plus, Double::minus)
|
||||||
|
|
||||||
val a3: Array<Int.(Int) -> Double> = arrayOf(Double::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>plus<!>, Double::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>minus<!>)
|
val a3: Array<Int.(Int) -> Double> = arrayOf(Double::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>plus<!>, Double::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>minus<!>)
|
||||||
val a4: Array<Int.(Double) -> Double> = arrayOf(Int::plus, Double::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>minus<!>)
|
val a4: Array<Int.(Double) -> Double> = arrayOf(Int::plus, Double::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>minus<!>)
|
||||||
val a5: Array<Double.(Double) -> Double> = arrayOf(Double::plus, Int::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>minus<!>)
|
val a5: Array<Double.(Double) -> Double> = arrayOf(Double::plus, Int::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>minus<!>)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun foo(x: Int) {}
|
fun foo(x: Int) {}
|
||||||
@@ -18,5 +18,5 @@ fun <T> bar(x: T, f: (T) -> Unit) {}
|
|||||||
fun test2() {
|
fun test2() {
|
||||||
bar(1, ::foo)
|
bar(1, ::foo)
|
||||||
bar("", ::foo)
|
bar("", ::foo)
|
||||||
bar(1.0, ::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>)
|
bar(1.0, ::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -7,5 +7,5 @@ fun foo(y: String) {}
|
|||||||
fun <T> bar(f: (T) -> Unit) {}
|
fun <T> bar(f: (T) -> Unit) {}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>)
|
||||||
}
|
}
|
||||||
+1
-1
@@ -8,4 +8,4 @@ fun foo(s: String) {}
|
|||||||
|
|
||||||
val x1 = ofType<() -> Unit>(::foo)
|
val x1 = ofType<() -> Unit>(::foo)
|
||||||
val x2 = ofType<(String) -> Unit>(::foo)
|
val x2 = ofType<(String) -> Unit>(::foo)
|
||||||
val x3 = ofType<(Int) -> Unit>(::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>)
|
val x3 = ofType<(Int) -> Unit>(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>)
|
||||||
+1
-1
@@ -31,7 +31,7 @@ fun test() {
|
|||||||
val t3 = bar(::baz)
|
val t3 = bar(::baz)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("B")!>t3<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("B")!>t3<!>
|
||||||
|
|
||||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>)
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
compiler/testData/diagnostics/tests/callableReference/resolve/eagerAndPostponedCallableReferences.kt
Vendored
+1
-1
@@ -31,5 +31,5 @@ fun test() {
|
|||||||
val a6 = foo(::singleA, ::singleB)
|
val a6 = foo(::singleA, ::singleB)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("{A & B}")!>a6<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("{A & B}")!>a6<!>
|
||||||
|
|
||||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>multiple<!>, ::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>multiple<!>)
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>multiple<!>, ::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>multiple<!>)
|
||||||
}
|
}
|
||||||
+1
-1
@@ -9,4 +9,4 @@ fun foo(s: String) {}
|
|||||||
|
|
||||||
val x1 = apply(1, ::foo)
|
val x1 = apply(1, ::foo)
|
||||||
val x2 = apply("hello", ::foo)
|
val x2 = apply("hello", ::foo)
|
||||||
val x3 = <!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>apply<!>(true, ::<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>)
|
val x3 = <!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>apply<!>(true, ::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>)
|
||||||
@@ -12,5 +12,5 @@ fun <V, T : V?> G<T>.foo(vararg values: V2<V?>) = build()
|
|||||||
fun forReference(ref: Any?) {}
|
fun forReference(ref: Any?) {}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
forReference(G<Int?>::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;CANNOT_COMPLETE_RESOLVE!>foo<!>)
|
forReference(G<Int?>::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;CANNOT_COMPLETE_RESOLVE!>foo<!>)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
// !LANGUAGE: +NewInference
|
|
||||||
// !WITH_NEW_INFERENCE
|
// !WITH_NEW_INFERENCE
|
||||||
|
|
||||||
fun foo(s: String) {}
|
fun foo(s: String) {}
|
||||||
@@ -8,5 +7,5 @@ fun foo(i: Long) {}
|
|||||||
fun bar(f: (Boolean) -> Unit) {}
|
fun bar(f: (Boolean) -> Unit) {}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
bar(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;NONE_APPLICABLE!>foo<!>)
|
bar(::<!NI;CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, OI;NONE_APPLICABLE!>foo<!>)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// !LANGUAGE: +NewInference
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
fun bar(y: (Int) -> Int) = 1
|
||||||
|
fun foo(x: Float) = 10f
|
||||||
|
fun foo(x: String) = ""
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
bar(::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>foo<!>) // no report about unresolved callable reference for `foo`
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun bar(/*0*/ y: (kotlin.Int) -> kotlin.Int): kotlin.Int
|
||||||
|
public fun foo(/*0*/ x: kotlin.Float): kotlin.Float
|
||||||
|
public fun foo(/*0*/ x: kotlin.String): kotlin.String
|
||||||
|
public fun main(): kotlin.Unit
|
||||||
+2
-2
@@ -6,8 +6,8 @@ class Impl : Inv
|
|||||||
class Scope<InterfaceT, ImplementationT : InterfaceT>(private val implClass: <!UNRESOLVED_REFERENCE!>j<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>Class<!><ImplementationT>) {
|
class Scope<InterfaceT, ImplementationT : InterfaceT>(private val implClass: <!UNRESOLVED_REFERENCE!>j<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>Class<!><ImplementationT>) {
|
||||||
fun foo(c: Collection<InterfaceT>) {
|
fun foo(c: Collection<InterfaceT>) {
|
||||||
val <!UNUSED_VARIABLE!>hm<!> = c.asSequence()
|
val <!UNUSED_VARIABLE!>hm<!> = c.asSequence()
|
||||||
.filter(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>implClass<!>::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>isInstance<!>)
|
.filter(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>implClass<!>::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>isInstance<!>)
|
||||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>map<!>(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>implClass<!>::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY, DEBUG_INFO_MISSING_UNRESOLVED!>cast<!>)
|
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>map<!>(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>implClass<!>::<!CALLABLE_REFERENCE_RESOLUTION_AMBIGUITY!>cast<!>)
|
||||||
.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>toSet<!>()
|
.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>toSet<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10786,6 +10786,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt34282.kt")
|
||||||
|
public void testKt34282() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt34282.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt3496.kt")
|
@TestMetadata("kt3496.kt")
|
||||||
public void testKt3496() throws Exception {
|
public void testKt3496() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
||||||
|
|||||||
Generated
+5
@@ -10781,6 +10781,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3344.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt34282.kt")
|
||||||
|
public void testKt34282() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt34282.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt3496.kt")
|
@TestMetadata("kt3496.kt")
|
||||||
public void testKt3496() throws Exception {
|
public void testKt3496() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3496.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user