[NI] Properly detecting suitability of candidate for builder inference
#KT-41430 Fixed
This commit is contained in:
+5
@@ -1737,6 +1737,11 @@ public class FirOldFrontendDiagnosticsTestWithStdlibGenerated extends AbstractFi
|
|||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt41430.kt")
|
||||||
|
public void testKt41430() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt41430.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaExpectedType.kt")
|
@TestMetadata("lambdaExpectedType.kt")
|
||||||
public void testLambdaExpectedType() throws Exception {
|
public void testLambdaExpectedType() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
||||||
|
|||||||
+3
-9
@@ -90,15 +90,9 @@ class CoroutineInferenceSession(
|
|||||||
val dispatchReceiver = resolvedCall.dispatchReceiverArgument
|
val dispatchReceiver = resolvedCall.dispatchReceiverArgument
|
||||||
return when {
|
return when {
|
||||||
extensionReceiver == null && dispatchReceiver == null -> false
|
extensionReceiver == null && dispatchReceiver == null -> false
|
||||||
extensionReceiver == null -> true
|
dispatchReceiver?.receiver?.stableType?.containsStubType() == true -> true
|
||||||
extensionReceiver.receiver.stableType.containsStubType() -> resolvedCall.candidateDescriptor.hasBuilderInferenceAnnotation()
|
extensionReceiver?.receiver?.stableType?.containsStubType() == true -> resolvedCall.candidateDescriptor.hasBuilderInferenceAnnotation()
|
||||||
else -> true
|
else -> false
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun KotlinType.containsNotFixedTypeVariable(storage: ConstraintStorage): Boolean {
|
|
||||||
return this.contains {
|
|
||||||
it.constructor in storage.notFixedTypeVariables
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// ISSUE: KT-41430
|
||||||
|
|
||||||
|
class A
|
||||||
|
|
||||||
|
fun test_1(list: List<Set<A>>) {
|
||||||
|
list.<!AMBIGUITY!>flatMapTo<!>(mutableSetOf()) { <!UNRESOLVED_REFERENCE!>it<!> }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_2(list: List<Set<A>>) {
|
||||||
|
sequence<A> {
|
||||||
|
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Ambiguity: flatMapTo, [kotlin/collections/flatMapTo, kotlin/collections/flatMapTo]")!>list.<!AMBIGUITY!>flatMapTo<!>(mutableSetOf()) { <!UNRESOLVED_REFERENCE!>it<!> }<!>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_3(list: List<Set<A>>) {
|
||||||
|
sequence {
|
||||||
|
list.<!AMBIGUITY!>flatMapTo<!>(mutableSetOf()) { <!UNRESOLVED_REFERENCE!>it<!> }
|
||||||
|
yield(A())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_4(list: List<Set<A>>) {
|
||||||
|
sequence {
|
||||||
|
yield(A())
|
||||||
|
list.<!AMBIGUITY!>flatMapTo<!>(mutableSetOf()) { <!UNRESOLVED_REFERENCE!>it<!> }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// ISSUE: KT-41430
|
||||||
|
|
||||||
|
class A
|
||||||
|
|
||||||
|
fun test_1(list: List<Set<A>>) {
|
||||||
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.MutableSet<A>")!>list.flatMapTo(mutableSetOf()) { it }<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_2(list: List<Set<A>>) {
|
||||||
|
sequence<A> {
|
||||||
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.MutableSet<A>")!>list.flatMapTo(mutableSetOf()) { it }<!>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_3(list: List<Set<A>>) {
|
||||||
|
sequence {
|
||||||
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.MutableSet<A>")!>list.flatMapTo(mutableSetOf()) { it }<!>
|
||||||
|
yield(A())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_4(list: List<Set<A>>) {
|
||||||
|
sequence {
|
||||||
|
yield(A())
|
||||||
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.MutableSet<A>")!>list.flatMapTo(mutableSetOf()) { it }<!>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun test_1(/*0*/ list: kotlin.collections.List<kotlin.collections.Set<A>>): kotlin.Unit
|
||||||
|
public fun test_2(/*0*/ list: kotlin.collections.List<kotlin.collections.Set<A>>): kotlin.Unit
|
||||||
|
public fun test_3(/*0*/ list: kotlin.collections.List<kotlin.collections.Set<A>>): kotlin.Unit
|
||||||
|
public fun test_4(/*0*/ list: kotlin.collections.List<kotlin.collections.Set<A>>): kotlin.Unit
|
||||||
|
|
||||||
|
public final class A {
|
||||||
|
public constructor A()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
+5
@@ -1737,6 +1737,11 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW
|
|||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt41430.kt")
|
||||||
|
public void testKt41430() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt41430.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaExpectedType.kt")
|
@TestMetadata("lambdaExpectedType.kt")
|
||||||
public void testLambdaExpectedType() throws Exception {
|
public void testLambdaExpectedType() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
||||||
|
|||||||
compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java
Generated
+5
@@ -1737,6 +1737,11 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno
|
|||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt38179.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt41430.kt")
|
||||||
|
public void testKt41430() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/kt41430.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaExpectedType.kt")
|
@TestMetadata("lambdaExpectedType.kt")
|
||||||
public void testLambdaExpectedType() throws Exception {
|
public void testLambdaExpectedType() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/coroutines/lambdaExpectedType.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user