From 0df3a37303f95e86608aa5249115e11ea754c34f Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 15 Mar 2024 15:08:49 +0100 Subject: [PATCH] K2 Scripting, Fir2Ir: allow out of order supertypes declaration fix script declarations registration logic in Fir2Ir to allow supertypes of a class to be defined later than the class itself. #KT-64534 fixed --- .../kotlin/fir/backend/Fir2IrConverter.kt | 4 +++- .../FirPsiBlackBoxCodegenTestGenerated.java | 6 +++++ .../box/script/outOuOrderDecls.jvm_abi.txt | 24 +++++++++++++++++++ .../codegen/box/script/outOuOrderDecls.kt | 14 +++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 6 +++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ 9 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/script/outOuOrderDecls.jvm_abi.txt create mode 100644 compiler/testData/codegen/box/script/outOuOrderDecls.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index bb9260994fa..d029a708f37 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -528,10 +528,12 @@ class Fir2IrConverter( addDeclarationToParentIfNeeded(irScript) declarationStorage.withScope(irScript.symbol) { irScript.parent = parent + for (scriptDeclaration in declaration.declarations.filterIsInstance()) { + registerClassAndNestedClasses(scriptDeclaration, irScript) + } for (scriptDeclaration in declaration.declarations) { when (scriptDeclaration) { is FirRegularClass -> { - registerClassAndNestedClasses(scriptDeclaration, irScript) processClassAndNestedClassHeaders(scriptDeclaration) } is FirTypeAlias -> classifierStorage.createAndCacheIrTypeAlias(scriptDeclaration, irScript) diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 834bfd3ad9a..8cff03797c5 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -54575,6 +54575,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt"); } + @Test + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @Test @TestMetadata("scripInstance.kt") public void testScripInstance() { diff --git a/compiler/testData/codegen/box/script/outOuOrderDecls.jvm_abi.txt b/compiler/testData/codegen/box/script/outOuOrderDecls.jvm_abi.txt new file mode 100644 index 00000000000..cf00cbc90fc --- /dev/null +++ b/compiler/testData/codegen/box/script/outOuOrderDecls.jvm_abi.txt @@ -0,0 +1,24 @@ +MODULE main + CLASS Script.class + CLASS METADATA + K1 + ([Ljava/lang/String;)V + K2 + --- + Property: class.metadata.superTypes + K1 + [kotlin/script/templates/standard/ScriptTemplateWithArgs] + K2 + [] + Property: class.metadata.contextReceiverTypes + K1 + [] + K2 + [kotlin/script/templates/standard/ScriptTemplateWithArgs] + CLASS Script$A.class + CLASS METADATA + Property: class.metadata.superTypes + K1 + [Script.B, Script.C] + K2 + [B, C] diff --git a/compiler/testData/codegen/box/script/outOuOrderDecls.kt b/compiler/testData/codegen/box/script/outOuOrderDecls.kt new file mode 100644 index 00000000000..dbcf661f463 --- /dev/null +++ b/compiler/testData/codegen/box/script/outOuOrderDecls.kt @@ -0,0 +1,14 @@ +// TARGET_BACKEND: JVM +// IGNORE_LIGHT_ANALYSIS +// JVM_ABI_K1_K2_DIFF: KT-63963, KT-63964, KT-63960 +// FILE: test.kt + +fun box(): String = "OK" + +// FILE: script.kts + +class A : B, C {} + +interface B + +interface C diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index 848bc8d58f3..fccea1bb9b3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -53873,6 +53873,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt"); } + @Test + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @Test @TestMetadata("scripInstance.kt") public void testScripInstance() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 2588cb3f8e9..704c0f28910 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -50687,6 +50687,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt"); } + @Test + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @Test @TestMetadata("scripInstance.kt") public void testScripInstance() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 15b3fadb7dc..872344e4e85 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt"); } + @Test + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @Test @TestMetadata("scripInstance.kt") public void testScripInstance() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index dfa005ac3f1..6ab58f50f0a 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt"); } + @Test + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @Test @TestMetadata("scripInstance.kt") public void testScripInstance() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 118b6f4121a..c14c758d47c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -43545,6 +43545,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/script/localCaptureTests.kt"); } + @TestMetadata("outOuOrderDecls.kt") + public void testOutOuOrderDecls() { + runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt"); + } + @TestMetadata("scripInstance.kt") public void testScripInstance() { runTest("compiler/testData/codegen/box/script/scripInstance.kt");