[FIR] Extract extension functional type from an annotated functional type during deserialization

^KT-57140 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-03-22 11:27:31 +02:00
committed by Space Team
parent 8ca7b32577
commit 336b6ba9f0
6 changed files with 67 additions and 23 deletions
@@ -7,20 +7,20 @@ FILE: dependencyWithoutFunctionalKindPlugin.kt
}
public final fun test_1(block: R|() -> kotlin/Unit|, composableBlock: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<kotlin/Unit>|, suspendBlock: R|suspend () -> kotlin/Unit|): R|kotlin/Unit| {
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction|(R|<local>/block|)
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction<Inapplicable(INAPPLICABLE): org/jetbrains/kotlin/fir/plugin/consumeComposableFunction>#|(R|<local>/composableBlock|)
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction|(R|<local>/composableBlock|)
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction<Inapplicable(INAPPLICABLE): org/jetbrains/kotlin/fir/plugin/consumeComposableFunction>#|(R|<local>/suspendBlock|)
}
public final fun test_2(): R|kotlin/Unit| {
lval block: R|() -> kotlin/Unit| = R|org/jetbrains/kotlin/fir/plugin/produceComposableFunction|()
R|/consumeRegularFunction|(R|<local>/block|)
R|/consumeSuspendFunction|(R|<local>/block|)
lval block: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<kotlin/Unit>| = R|org/jetbrains/kotlin/fir/plugin/produceComposableFunction|()
R|/consumeRegularFunction<Inapplicable(INAPPLICABLE): /consumeRegularFunction>#|(R|<local>/block|)
R|/consumeSuspendFunction<Inapplicable(INAPPLICABLE): /consumeSuspendFunction>#|(R|<local>/block|)
R|/consumeOurComposableFunction|(R|<local>/block|)
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction|(R|<local>/block|)
}
public final fun test_3(): R|kotlin/Unit| {
lval block: R|() -> kotlin/Unit| = R|org/jetbrains/kotlin/fir/plugin/produceBoxedComposableFunction|().R|SubstitutionOverride<org/jetbrains/kotlin/fir/plugin/Box.value: R|() -> kotlin/Unit|>|
R|/consumeRegularFunction|(R|<local>/block|)
R|/consumeSuspendFunction|(R|<local>/block|)
lval block: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<kotlin/Unit>| = R|org/jetbrains/kotlin/fir/plugin/produceBoxedComposableFunction|().R|SubstitutionOverride<org/jetbrains/kotlin/fir/plugin/Box.value: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<kotlin/Unit>|>|
R|/consumeRegularFunction<Inapplicable(INAPPLICABLE): /consumeRegularFunction>#|(R|<local>/block|)
R|/consumeSuspendFunction<Inapplicable(INAPPLICABLE): /consumeSuspendFunction>#|(R|<local>/block|)
R|/consumeOurComposableFunction|(R|<local>/block|)
R|org/jetbrains/kotlin/fir/plugin/consumeComposableFunction|(R|<local>/block|)
}
@@ -10,22 +10,22 @@ fun test_1(
suspendBlock: suspend () -> Unit,
) {
consumeComposableFunction(block)
consumeComposableFunction(<!ARGUMENT_TYPE_MISMATCH!>composableBlock<!>)
consumeComposableFunction(composableBlock)
consumeComposableFunction(<!ARGUMENT_TYPE_MISMATCH!>suspendBlock<!>) // should be error
}
fun test_2() {
val block = produceComposableFunction()
consumeRegularFunction(block) // should be error
consumeSuspendFunction(block) // should be error
consumeRegularFunction(<!ARGUMENT_TYPE_MISMATCH!>block<!>) // should be error
consumeSuspendFunction(<!ARGUMENT_TYPE_MISMATCH!>block<!>) // should be error
consumeOurComposableFunction(block)
consumeComposableFunction(block)
}
fun test_3() {
val block = produceBoxedComposableFunction().value
consumeRegularFunction(block) // should be error
consumeSuspendFunction(block) // should be error
consumeRegularFunction(<!ARGUMENT_TYPE_MISMATCH!>block<!>) // should be error
consumeSuspendFunction(<!ARGUMENT_TYPE_MISMATCH!>block<!>) // should be error
consumeOurComposableFunction(block)
consumeComposableFunction(block)
}