From a5347089003acf43f35aecb59c23925d8b9f2f1d Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Wed, 24 May 2023 07:34:11 +0000 Subject: [PATCH] [K2/N] Use FqName to mangle invisible class-like symbol in fake override ^KT-57484 Merge-request: KT-MR-10263 Merged-by: Vladimir Sukharev --- .../kotlin/fir/backend/FirMangleComputer.kt | 2 +- ...amWithReceiverMavenProjectImportHandler.kt | 5 +- ...ceiverMavenProjectImportHandler.sig.kt.txt | 80 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++ .../handlers/IrPrettyKotlinDumpHandler.kt | 4 +- .../codegen/BaseCodegenConfiguration.kt | 2 +- .../LightAnalysisModeTestGenerated.java | 5 ++ .../ir/AbstractJsBlackBoxCodegenTestBase.kt | 5 +- .../js/test/JsCodegenBoxTestGenerated.java | 6 ++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 ++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++ .../NativeCodegenBoxTestGenerated.java | 6 ++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 ++ .../test/IrCodegenBoxWasmTestGenerated.java | 5 ++ 17 files changed, 156 insertions(+), 6 deletions(-) create mode 100644 compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.sig.kt.txt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt index 728588d4957..49aed95b48c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt @@ -171,7 +171,7 @@ open class FirMangleComputer( is FirTypeParameterSymbol -> tBuilder.mangleTypeParameterReference(symbol.toLookupTag()) // This is performed for a case with invisible class-like symbol in fake override null -> (type.lookupTag as? ConeClassLikeLookupTag)?.let { - tBuilder.append(it.classId) + tBuilder.append(it.classId.asFqNameString()) } } diff --git a/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt b/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt index 1bbe1978bd3..bf7633bf458 100644 --- a/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt +++ b/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt @@ -1,13 +1,16 @@ -// TARGET_BACKEND: JVM_IR // WITH_STDLIB +// LINK_VIA_SIGNATURES +// DUMP_SIGNATURES // MODULE: maven // FILE: MavenProject.kt +package maven interface MavenProject // MODULE: lib(maven) // FILE: lib.kt +import maven.MavenProject abstract class AbstractMavenImportHandler { abstract fun getOptions(enabledCompilerPlugins: List, compilerPluginOptions: List): List? diff --git a/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.sig.kt.txt b/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.sig.kt.txt new file mode 100644 index 00000000000..168d0fa6f84 --- /dev/null +++ b/compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.sig.kt.txt @@ -0,0 +1,80 @@ +// MODULE: maven +// FILE: MavenProject.kt +package maven + +// CHECK: +// Mangled name: maven.MavenProject +// Public signature: maven/MavenProject|null[0] +interface MavenProject { + +} + +// MODULE: lib +// FILE: lib.kt + +// CHECK: +// Mangled name: AbstractMavenImportHandler +// Public signature: /AbstractMavenImportHandler|null[0] +abstract class AbstractMavenImportHandler { + // CHECK: + // Mangled name: AbstractMavenImportHandler#(){} + // Public signature: /AbstractMavenImportHandler.|-5645683436151566731[0] + constructor() /* primary */ + + // CHECK JVM_IR: + // Mangled name: AbstractMavenImportHandler#getOptions(maven.MavenProject;kotlin.collections.List;kotlin.collections.List){}kotlin.collections.List? + // Public signature: /AbstractMavenImportHandler.getOptions|-4460773764155808974[0] + // CHECK JS_IR JS_IR_ES6 NATIVE: + // Mangled name: AbstractMavenImportHandler#getOptions(maven.MavenProject;kotlin.collections.List;kotlin.collections.List){} + // Public signature: /AbstractMavenImportHandler.getOptions|5665422840163221243[0] + protected open fun getOptions(mavenProject: MavenProject, enabledCompilerPlugins: List, compilerPluginOptions: List): List? + + // CHECK JVM_IR: + // Mangled name: AbstractMavenImportHandler#getOptions(kotlin.collections.List;kotlin.collections.List){}kotlin.collections.List? + // Public signature: /AbstractMavenImportHandler.getOptions|6958005737432622530[0] + // CHECK JS_IR JS_IR_ES6 NATIVE: + // Mangled name: AbstractMavenImportHandler#getOptions(kotlin.collections.List;kotlin.collections.List){} + // Public signature: /AbstractMavenImportHandler.getOptions|227676264994967555[0] + abstract fun getOptions(enabledCompilerPlugins: List, compilerPluginOptions: List): List? + +} + +// MODULE: main +// FILE: sam.kt + +// CHECK: +// Mangled name: SamWithReceiverMavenProjectImportHandler +// Public signature: /SamWithReceiverMavenProjectImportHandler|null[0] +class SamWithReceiverMavenProjectImportHandler : AbstractMavenImportHandler { + // CHECK: + // Mangled name: SamWithReceiverMavenProjectImportHandler#(){} + // Public signature: /SamWithReceiverMavenProjectImportHandler.|-5645683436151566731[0] + constructor() /* primary */ + + // CHECK JVM_IR: + // Mangled name: SamWithReceiverMavenProjectImportHandler#getOptions(maven.MavenProject;kotlin.collections.List;kotlin.collections.List){}kotlin.collections.List? + // Public signature: /SamWithReceiverMavenProjectImportHandler.getOptions|-4460773764155808974[0] + // CHECK JS_IR JS_IR_ES6 NATIVE: + // Mangled name: SamWithReceiverMavenProjectImportHandler#getOptions(maven.MavenProject;kotlin.collections.List;kotlin.collections.List){} + // Public signature: /SamWithReceiverMavenProjectImportHandler.getOptions|5665422840163221243[0] + protected /* fake */ override fun getOptions(mavenProject: MavenProject, enabledCompilerPlugins: List, compilerPluginOptions: List): List? + + // CHECK JVM_IR: + // Mangled name: SamWithReceiverMavenProjectImportHandler#getOptions(kotlin.collections.List;kotlin.collections.List){}kotlin.collections.List? + // Public signature: /SamWithReceiverMavenProjectImportHandler.getOptions|6958005737432622530[0] + // CHECK JS_IR JS_IR_ES6 NATIVE: + // Mangled name: SamWithReceiverMavenProjectImportHandler#getOptions(kotlin.collections.List;kotlin.collections.List){} + // Public signature: /SamWithReceiverMavenProjectImportHandler.getOptions|227676264994967555[0] + override fun getOptions(enabledCompilerPlugins: List, compilerPluginOptions: List): List? + +} + +// FILE: main.kt + +// CHECK JVM_IR: +// Mangled name: #box(){}kotlin.String +// Public signature: /box|-9347091776561469[0] +// CHECK JS_IR JS_IR_ES6 NATIVE: +// Mangled name: #box(){} +// Public signature: /box|2173511048851971368[0] +fun box(): String 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 d764dd0723f..d4019576c92 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 @@ -17673,6 +17673,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fir/notFoundClasses.kt"); } + @Test + @TestMetadata("SamWithReceiverMavenProjectImportHandler.kt") + public void testSamWithReceiverMavenProjectImportHandler() throws Exception { + runTest("compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt"); + } + @Test @TestMetadata("SuspendExtension.kt") public void testSuspendExtension() throws Exception { diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrPrettyKotlinDumpHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrPrettyKotlinDumpHandler.kt index 13cc46b2d88..d709fae772b 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrPrettyKotlinDumpHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrPrettyKotlinDumpHandler.kt @@ -70,8 +70,8 @@ internal fun dumpModuleKotlinLike( info.processAllIrModuleFragments(module) { irModuleFragment, moduleName -> val irFiles = irModuleFragment.files val builder = multiModuleInfoDumper.builderForModule(moduleName) - val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { - it.first?.directives?.contains(EXTERNAL_FILE) == true + val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot { (testFile, _) -> + testFile?.let { EXTERNAL_FILE in it.directives || it.isAdditional } ?: false }.map { it.second } val printFileName = filteredIrFiles.size > 1 || allModules.size > 1 val modifiedOptions = options.copy(printFileName = printFileName) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/BaseCodegenConfiguration.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/BaseCodegenConfiguration.kt index 805078aef2f..efdfa107b7a 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/BaseCodegenConfiguration.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/BaseCodegenConfiguration.kt @@ -149,7 +149,7 @@ fun TestConfigurationBuilder.commonHandlersForCodegenTest() { } fun HandlersStepBuilder.dumpHandlersForConverterStep() { - useHandlers(::IrTreeVerifierHandler, ::IrTextDumpHandler) + useHandlers(::IrTreeVerifierHandler, ::IrTextDumpHandler, ::IrMangledNameAndSignatureDumpHandler) } fun HandlersStepBuilder.dumpHandlersForBackendStep() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 8cf7b230ab2..d510e60b0cf 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14668,6 +14668,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fir/notFoundClasses.kt"); } + @TestMetadata("SamWithReceiverMavenProjectImportHandler.kt") + public void testSamWithReceiverMavenProjectImportHandler() throws Exception { + runTest("compiler/testData/codegen/box/fir/SamWithReceiverMavenProjectImportHandler.kt"); + } + @TestMetadata("SuspendFunctionReference.kt") public void testSuspendFunctionReference() throws Exception { runTest("compiler/testData/codegen/box/fir/SuspendFunctionReference.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsBlackBoxCodegenTestBase.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsBlackBoxCodegenTestBase.kt index 76940bb75af..05e0b2e09ed 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsBlackBoxCodegenTestBase.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsBlackBoxCodegenTestBase.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor +import org.jetbrains.kotlin.test.backend.handlers.IrMangledNameAndSignatureDumpHandler import org.jetbrains.kotlin.test.backend.handlers.JsIrInterpreterDumpHandler import org.jetbrains.kotlin.test.backend.handlers.KlibInterpreterDumpHandler import org.jetbrains.kotlin.test.builders.* @@ -112,7 +113,9 @@ abstract class AbstractJsBlackBoxCodegenTestBase