diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index 221a754e2c5..a599701fe56 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -1181,6 +1181,13 @@ private fun makeKotlinType( ) } } + is IrScriptSymbol -> { + TypeUtils.makeUnsubstitutedType( + classifier.toIrBasedDescriptorIfPossible(), + MemberScope.Empty, + KotlinTypeFactory.EMPTY_REFINED_TYPE_FACTORY + ).makeNullableAsSpecified(hasQuestionMark) + } else -> error("unknown classifier kind $classifier") } @@ -1200,3 +1207,8 @@ private fun IrSimpleFunctionSymbol.toIrBasedDescriptorIfPossible(): FunctionDesc @OptIn(ObsoleteDescriptorBasedAPI::class) private fun IrPropertySymbol.toIrBasedDescriptorIfPossible(): PropertyDescriptor = if (isBound) owner.toIrBasedDescriptor() else descriptor + +// this is a temporary solution for scripts - seems that introducing full-blown emulation of descriptors for the single degenerate case +// doesn't make any sense. +@OptIn(ObsoleteDescriptorBasedAPI::class) +private fun IrScriptSymbol.toIrBasedDescriptorIfPossible(): ScriptDescriptor = descriptor diff --git a/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsTest.kt b/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsTest.kt index f301dcf6a33..2d9aac9953b 100644 --- a/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsTest.kt +++ b/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsTest.kt @@ -223,6 +223,12 @@ class MainKtsTest { assertEquals("success", value) } + @Test + fun testKt48812() { + val res = evalFile(File("$TEST_DATA_ROOT/kt48812.main.kts")) + assertSucceeded(res) + } + private fun assertSucceeded(res: ResultWithDiagnostics) { Assert.assertTrue( "test failed:\n ${res.reports.joinToString("\n ") { it.message + if (it.exception == null) "" else ": ${it.exception}" }}", diff --git a/libraries/tools/kotlin-main-kts-test/testData/kt48812.main.kts b/libraries/tools/kotlin-main-kts-test/testData/kt48812.main.kts new file mode 100644 index 00000000000..1b06b512218 --- /dev/null +++ b/libraries/tools/kotlin-main-kts-test/testData/kt48812.main.kts @@ -0,0 +1,11 @@ +@file:DependsOn("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.runBlocking + +fun printInt(n : Int) = println(n) + +runBlocking { + flowOf(1, 2, 3) + .onEach(::printInt) + .collect() +}