From 14bc20652e088426d127cd7d0e3601c0e35b2c35 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Sep 2023 09:09:03 +0200 Subject: [PATCH] K2: process also arguments while calculating postponed atoms #KT-61933 Fixed --- .../inference/CompletionModeCalculator.kt | 2 +- .../inference/ConstraintSystemCompleter.kt | 5 +++++ .../suspendConversion/inGenericArgument.fir.kt | 17 ----------------- .../suspendConversion/inGenericArgument.kt | 1 + 4 files changed, 7 insertions(+), 18 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.fir.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/CompletionModeCalculator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/CompletionModeCalculator.kt index f0fb598a2de..4afc20e0cbe 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/CompletionModeCalculator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/CompletionModeCalculator.kt @@ -57,7 +57,7 @@ private class CalculatorForNestedCall( private val typesToProcess: Queue = ArrayDeque() private val postponedAtoms: List by lazy { - candidate.postponedAtoms.filterNot { it.analyzed } + ConstraintSystemCompleter.getOrderedNotAnalyzedPostponedArguments(candidate) } fun computeCompletionMode(): ConstraintSystemCompletionMode = with(context) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt index 2159c7dbbe8..f3b72ca91ef 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt @@ -407,6 +407,11 @@ class ConstraintSystemCompleter(components: BodyResolveComponents, private val c } companion object { + internal fun getOrderedNotAnalyzedPostponedArguments(candidate: Candidate): List { + val callSite = candidate.callInfo.callSite as? FirStatement ?: return emptyList() + return getOrderedNotAnalyzedPostponedArguments(listOf(callSite)) + } + private fun getOrderedNotAnalyzedPostponedArguments(topLevelAtoms: List): List { val notAnalyzedArguments = arrayListOf() for (primitive in topLevelAtoms) { diff --git a/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.fir.kt b/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.fir.kt deleted file mode 100644 index 6efcc16fcc9..00000000000 --- a/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.fir.kt +++ /dev/null @@ -1,17 +0,0 @@ -// ISSUE: KT-61933 - -data class Bar( - val foo: Foo Unit> -) - -data class Foo( - val state: TCallback?, -) - -fun usage(b: Boolean) { - Bar( - foo = Foo( - state = if (b) { -> } else null, - ) - ) -} diff --git a/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.kt b/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.kt index 01f642c345a..e7751544a6b 100644 --- a/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.kt +++ b/compiler/testData/diagnostics/tests/suspendConversion/inGenericArgument.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-61933 data class Bar(