From 3dc94f3d315b8d4a4fb814983fddf85182caedb6 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Thu, 20 Jul 2023 18:06:57 +0200 Subject: [PATCH] Scripting: fix descriptor extraction, restore main-kts testing Temporary solution for K1 - see comments in the code it seems that a scenario reproduced in the MainKtsTest.testKt48812 wasn't covered with analogous changes before. And it wasn't detected while main-kts tests weren't a part of the K1 scripting tests. The test is fixed now, and testing of main-kts is restored. --- build.gradle.kts | 1 + .../kotlin/ir/descriptors/IrBasedDescriptors.kt | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e8beb0206d6..3fdbb3d8983 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -708,6 +708,7 @@ tasks { dependsOn(":kotlin-scripting-jsr223-test:embeddableTest") dependsOn(":kotlin-scripting-ide-services-test:test") dependsOn(":kotlin-scripting-ide-services-test:embeddableTest") + dependsOn(":kotlin-main-kts-test:test") } register("scriptingK2Test") { 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 6adc86f9dca..563c5ae7346 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 @@ -132,6 +132,7 @@ fun IrDeclaration.toIrBasedDescriptor(): DeclarationDescriptor = when (this) { is IrField -> toIrBasedDescriptor() is IrTypeAlias -> toIrBasedDescriptor() is IrErrorDeclaration -> toIrBasedDescriptor() + is IrScript -> toIrBasedDescriptor() else -> error("Unknown declaration kind") } @@ -1260,7 +1261,11 @@ private fun IrSimpleFunctionSymbol.toIrBasedDescriptorIfPossible(): FunctionDesc 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. +// this is a temporary solution for scripts +// TODO: implement IR-based descriptors for scripts, see KT-60631 @OptIn(ObsoleteDescriptorBasedAPI::class) private fun IrScriptSymbol.toIrBasedDescriptorIfPossible(): ScriptDescriptor = descriptor + +// see comment above to IrScriptSymbol.toIrBasedDescriptorIfPossible() +@OptIn(ObsoleteDescriptorBasedAPI::class) +private fun IrScript.toIrBasedDescriptor() = descriptor