From 4080776fe38e1ee574f619af29fda9138acae1b7 Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Wed, 3 Jan 2024 11:09:20 +0100 Subject: [PATCH] [Fir2IR] Set correct module descriptors for builtins ^KT-64420 --- .../fir/backend/Fir2IrDeclarationStorage.kt | 75 +++++++------ .../FirLightTreeJvmIrTextTestGenerated.java | 6 + .../ir/FirPsiJvmIrTextTestGenerated.java | 6 + .../internalStdlibOverride.fir.ir.txt | 96 ++++++++++++++++ .../internalStdlibOverride.fir.kt.txt | 16 +++ .../internalStdlibOverride.ir.txt | 87 +++++++++++++++ .../declarations/internalStdlibOverride.kt | 14 +++ .../internalStdlibOverride.kt.txt | 16 +++ .../internalStdlibOverride.sig.kt.txt | 103 ++++++++++++++++++ .../ir/ClassicJvmIrTextTestGenerated.java | 6 + .../klib/KlibIrTextTestCaseGenerated.java | 5 + .../FirLightTreeJsIrTextTestGenerated.java | 6 + .../test/fir/FirPsiJsIrTextTestGenerated.java | 6 + .../test/ir/ClassicJsIrTextTestGenerated.java | 6 + .../ClassicNativeIrTextTestGenerated.java | 6 + ...FirLightTreeNativeIrTextTestGenerated.java | 6 + .../FirPsiNativeIrTextTestGenerated.java | 6 + 17 files changed, 428 insertions(+), 38 deletions(-) create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.ir.txt create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.kt.txt create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.ir.txt create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.kt create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.kt.txt create mode 100644 compiler/testData/ir/irText/declarations/internalStdlibOverride.sig.kt.txt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 375eb97435f..b2bbdaaaa95 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -63,14 +63,14 @@ class Fir2IrDeclarationStorage( ) : Fir2IrComponents by components { private val fragmentCache: ConcurrentHashMap = ConcurrentHashMap() + private val moduleDescriptorCache: ConcurrentHashMap = ConcurrentHashMap() private class ExternalPackageFragments( val fragmentsForDependencies: ConcurrentHashMap, + val builtinFragmentsForDependencies: ConcurrentHashMap, val fragmentForPrecompiledBinaries: IrExternalPackageFragment ) - private val builtInsFragmentCache: ConcurrentHashMap = ConcurrentHashMap() - private val fileCache: ConcurrentHashMap = ConcurrentHashMap() private val scriptCache: ConcurrentHashMap = ConcurrentHashMap() @@ -183,40 +183,42 @@ class Fir2IrDeclarationStorage( moduleData: FirModuleData, firOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library ): IrExternalPackageFragment { - val fragments = fragmentCache.getOrPut(fqName) { - val fragmentForPrecompiledBinaries = callablesGenerator.createExternalPackageFragment(fqName, sourceModuleDescriptor) - ExternalPackageFragments(ConcurrentHashMap(), fragmentForPrecompiledBinaries) - } - // Make sure that external package fragments have a different module descriptor. The module descriptors are compared - // to determine if objects need regeneration because they are from different modules. - // But keep original module descriptor for the fragments coming from parts compiled on the previous incremental step - return when (firOrigin) { - FirDeclarationOrigin.Precompiled -> fragments.fragmentForPrecompiledBinaries - else -> fragments.fragmentsForDependencies.getOrPut(moduleData) { - val moduleDescriptor = FirModuleDescriptor.createDependencyModuleDescriptor( - moduleData, - sourceModuleDescriptor.builtIns - ) - callablesGenerator.createExternalPackageFragment(fqName, moduleDescriptor) - } - } + return getIrExternalOrBuiltInsPackageFragment(fqName, moduleData, firOrigin, false) } private fun getIrExternalOrBuiltInsPackageFragment( fqName: FqName, moduleData: FirModuleData, firOrigin: FirDeclarationOrigin, + allowBuiltins: Boolean ): IrExternalPackageFragment { - val isBuiltIn = fqName in BUILT_INS_PACKAGE_FQ_NAMES - return when (isBuiltIn) { - true -> getIrBuiltInsPackageFragment(fqName) - false -> getIrExternalPackageFragment(fqName, moduleData, firOrigin) + val isBuiltIn = allowBuiltins && fqName in BUILT_INS_PACKAGE_FQ_NAMES + val fragments = fragmentCache.getOrPut(fqName) { + val fragmentForPrecompiledBinaries = callablesGenerator.createExternalPackageFragment(fqName, sourceModuleDescriptor) + ExternalPackageFragments(ConcurrentHashMap(), ConcurrentHashMap(), fragmentForPrecompiledBinaries) } - } - - private fun getIrBuiltInsPackageFragment(fqName: FqName): IrExternalPackageFragment { - return builtInsFragmentCache.getOrPut(fqName) { - callablesGenerator.createExternalPackageFragment(FirBuiltInsPackageFragment(fqName, sourceModuleDescriptor)) + // Make sure that external package fragments have a different module descriptor. The module descriptors are compared + // to determine if objects need regeneration because they are from different modules. + // But keep the original module descriptor for the fragments coming from parts compiled on the previous incremental step + return when (firOrigin) { + FirDeclarationOrigin.Precompiled -> fragments.fragmentForPrecompiledBinaries + else -> { + val moduleDescriptor = moduleDescriptorCache.getOrPut(moduleData) { + FirModuleDescriptor.createDependencyModuleDescriptor( + moduleData, + sourceModuleDescriptor.builtIns + ) + } + if (isBuiltIn) { + fragments.builtinFragmentsForDependencies.getOrPut(moduleData) { + callablesGenerator.createExternalPackageFragment(FirBuiltInsPackageFragment(fqName, moduleDescriptor)) + } + } else { + fragments.fragmentsForDependencies.getOrPut(moduleData) { + callablesGenerator.createExternalPackageFragment(fqName, moduleDescriptor) + } + } + } } } @@ -1418,16 +1420,13 @@ class Fir2IrDeclarationStorage( return classifierStorage.findIrClass(parentLookupTag) } - val parentPackage = when (firBasedSymbol) { - is FirCallableSymbol<*> -> { - getIrExternalPackageFragment(packageFqName, firBasedSymbol.moduleData, firOrigin) - } - else -> { - // TODO: All classes from BUILT_INS_PACKAGE_FQ_NAMES are considered built-ins now, - // which is not exact and can lead to some problems - getIrExternalOrBuiltInsPackageFragment(packageFqName, firBasedSymbol.moduleData, firOrigin) - } - } + + // TODO: All classes from BUILT_INS_PACKAGE_FQ_NAMES are considered built-ins now, + // which is not exact and can lead to some problems + val parentPackage = getIrExternalOrBuiltInsPackageFragment( + packageFqName, firBasedSymbol.moduleData, firOrigin, + allowBuiltins = firBasedSymbol !is FirCallableSymbol<*> + ) /** * In `allowNonCachedDeclarations` mode there is a situation possible when we get source declaration diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java index bc8669fb14d..1bde2dc9c11 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirLightTreeJvmIrTextTestGenerated.java @@ -492,6 +492,12 @@ public class FirLightTreeJvmIrTextTestGenerated extends AbstractFirLightTreeJvmI runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java index 833bae01988..38870d28094 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/FirPsiJvmIrTextTestGenerated.java @@ -492,6 +492,12 @@ public class FirPsiJvmIrTextTestGenerated extends AbstractFirPsiJvmIrTextTest { runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.ir.txt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.ir.txt new file mode 100644 index 00000000000..1d73c3cd968 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.ir.txt @@ -0,0 +1,96 @@ +FILE fqName: fileName:/internalStdlibOverride.kt + CLASS CLASS name:MyMap modality:FINAL visibility:public superTypes:[kotlin.collections.AbstractMap] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.MyMap + CONSTRUCTOR visibility:public <> () returnType:.MyMap [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'protected constructor () declared in kotlin.collections.AbstractMap' + : kotlin.Int + : kotlin.Int + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:MyMap modality:FINAL visibility:public superTypes:[kotlin.collections.AbstractMap]' + PROPERTY name:entries visibility:public modality:OPEN [val] + overridden: + public abstract entries: kotlin.collections.Set> + FIELD PROPERTY_BACKING_FIELD name:entries type:kotlin.collections.Set> visibility:private [final] + EXPRESSION_BODY + CALL 'public final fun emptySet (): kotlin.collections.Set declared in kotlin.collections' type=kotlin.collections.Set> origin=null + : kotlin.collections.Map.Entry + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:OPEN <> ($this:.MyMap) returnType:kotlin.collections.Set> + correspondingProperty: PROPERTY name:entries visibility:public modality:OPEN [val] + overridden: + public abstract fun (): kotlin.collections.Set> declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:.MyMap + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun (): kotlin.collections.Set> declared in .MyMap' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:entries type:kotlin.collections.Set> visibility:private [final]' type=kotlin.collections.Set> origin=null + receiver: GET_VAR ': .MyMap declared in .MyMap.' type=.MyMap origin=null + FUN name:containsEntry visibility:internal modality:FINAL <> ($this:.MyMap, entry:kotlin.collections.Map.Entry<*, *>?) returnType:kotlin.Boolean + $this: VALUE_PARAMETER name: type:.MyMap + VALUE_PARAMETER name:entry index:0 type:kotlin.collections.Map.Entry<*, *>? + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal final fun containsEntry (entry: kotlin.collections.Map.Entry<*, *>?): kotlin.Boolean declared in .MyMap' + CONST Boolean type=kotlin.Boolean value=false + FUN FAKE_OVERRIDE name:containsKey visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, key:kotlin.Int) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun containsKey (key: K of kotlin.collections.AbstractMap): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:key index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:containsValue visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, value:kotlin.Int) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun containsValue (value: V of kotlin.collections.AbstractMap): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:value index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, key:kotlin.Int) returnType:kotlin.Int? [fake_override,operator] + overridden: + public open fun get (key: K of kotlin.collections.AbstractMap): V of kotlin.collections.AbstractMap? declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:key index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun isEmpty (): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val] + overridden: + public open keys: kotlin.collections.Set + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.collections.Set [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.collections.Set declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val] + overridden: + public open size: kotlin.Int + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Int [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.Int declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val] + overridden: + public open values: kotlin.collections.Collection + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.collections.Collection [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.collections.Collection declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:getOrDefault visibility:public modality:OPEN <> ($this:kotlin.collections.Map, key:kotlin.Int, defaultValue:kotlin.Int) returnType:kotlin.Int [fake_override] + annotations: + SinceKotlin(version = "1.1") + PlatformDependent + overridden: + public open fun getOrDefault (key: K of kotlin.collections.AbstractMap, defaultValue: V of kotlin.collections.AbstractMap): V of kotlin.collections.AbstractMap declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.Map + VALUE_PARAMETER name:key index:0 type:kotlin.Int + VALUE_PARAMETER name:defaultValue index:1 type:kotlin.Int diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.kt.txt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.kt.txt new file mode 100644 index 00000000000..ee712ca2e14 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.fir.kt.txt @@ -0,0 +1,16 @@ +class MyMap : AbstractMap { + constructor() /* primary */ { + super/*AbstractMap*/() + /* () */ + + } + + override val entries: Set> + field = emptySet>() + override get + + internal fun containsEntry(entry: Entry<*, *>?): Boolean { + return false + } + +} diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.ir.txt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.ir.txt new file mode 100644 index 00000000000..33cb9324adb --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.ir.txt @@ -0,0 +1,87 @@ +FILE fqName: fileName:/internalStdlibOverride.kt + CLASS CLASS name:MyMap modality:FINAL visibility:public superTypes:[kotlin.collections.AbstractMap] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.MyMap + CONSTRUCTOR visibility:public <> () returnType:.MyMap [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'protected constructor () declared in kotlin.collections.AbstractMap' + : kotlin.Int + : kotlin.Int + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:MyMap modality:FINAL visibility:public superTypes:[kotlin.collections.AbstractMap]' + PROPERTY name:entries visibility:public modality:OPEN [val] + overridden: + public abstract entries: kotlin.collections.Set> + FIELD PROPERTY_BACKING_FIELD name:entries type:kotlin.collections.Set> visibility:private [final] + EXPRESSION_BODY + CALL 'public final fun emptySet (): kotlin.collections.Set declared in kotlin.collections' type=kotlin.collections.Set> origin=null + : kotlin.collections.Map.Entry + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:OPEN <> ($this:.MyMap) returnType:kotlin.collections.Set> + correspondingProperty: PROPERTY name:entries visibility:public modality:OPEN [val] + overridden: + public abstract fun (): kotlin.collections.Set> declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:.MyMap + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun (): kotlin.collections.Set> declared in .MyMap' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:entries type:kotlin.collections.Set> visibility:private [final]' type=kotlin.collections.Set> origin=null + receiver: GET_VAR ': .MyMap declared in .MyMap.' type=.MyMap origin=null + FUN name:containsEntry visibility:public modality:FINAL <> ($this:.MyMap, entry:kotlin.collections.Map.Entry<*, *>?) returnType:kotlin.Boolean + $this: VALUE_PARAMETER name: type:.MyMap + VALUE_PARAMETER name:entry index:0 type:kotlin.collections.Map.Entry<*, *>? + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun containsEntry (entry: kotlin.collections.Map.Entry<*, *>?): kotlin.Boolean declared in .MyMap' + CONST Boolean type=kotlin.Boolean value=false + PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val] + overridden: + public open keys: kotlin.collections.Set + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.collections.Set [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.collections.Set declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val] + overridden: + public open size: kotlin.Int + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Int [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.Int declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val] + overridden: + public open values: kotlin.collections.Collection + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.collections.Collection [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): kotlin.collections.Collection declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:containsKey visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, key:kotlin.Int) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun containsKey (key: K of kotlin.collections.AbstractMap): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:key index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:containsValue visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, value:kotlin.Int) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun containsValue (value: V of kotlin.collections.AbstractMap): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:value index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap, key:kotlin.Int) returnType:kotlin.Int? [fake_override,operator] + overridden: + public open fun get (key: K of kotlin.collections.AbstractMap): V of kotlin.collections.AbstractMap? declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + VALUE_PARAMETER name:key index:0 type:kotlin.Int + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.Boolean [fake_override] + overridden: + public open fun isEmpty (): kotlin.Boolean declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.collections.AbstractMap) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.collections.AbstractMap + $this: VALUE_PARAMETER name: type:kotlin.collections.AbstractMap diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt new file mode 100644 index 00000000000..a9f4ac94930 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt @@ -0,0 +1,14 @@ +// WITH_STDLIB +// ENABLE_IR_FAKE_OVERRIDE_GENERATION +// KT-64692 +// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR + +// test data differs - no getOrDefault in AbstractMap for non-jvm. +// IGNORE_BACKEND: NATIVE, JS, JS_IR, JS_IR_ES6, WASM + +class MyMap : AbstractMap() { + override val entries = emptySet>() + + // clash with stdlib internal function + fun containsEntry(entry: Map.Entry<*, *>?) = false +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt.txt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt.txt new file mode 100644 index 00000000000..3d0c55dc414 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.kt.txt @@ -0,0 +1,16 @@ +class MyMap : AbstractMap { + constructor() /* primary */ { + super/*AbstractMap*/() + /* () */ + + } + + override val entries: Set> + field = emptySet>() + override get + + fun containsEntry(entry: Entry<*, *>?): Boolean { + return false + } + +} diff --git a/compiler/testData/ir/irText/declarations/internalStdlibOverride.sig.kt.txt b/compiler/testData/ir/irText/declarations/internalStdlibOverride.sig.kt.txt new file mode 100644 index 00000000000..dd52a160133 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/internalStdlibOverride.sig.kt.txt @@ -0,0 +1,103 @@ +// CHECK: +// Mangled name: MyMap +// Public signature: /MyMap|null[0] +class MyMap : AbstractMap { + // CHECK: + // Mangled name: MyMap{}entries + // Public signature: /MyMap.entries|-586096469347622282[0] + // Public signature debug description: {}entries + override val entries: Set> + // CHECK JVM_IR: + // Mangled name: MyMap#(){}kotlin.collections.Set> + // Public signature: /MyMap.entries.|-4597126143979775364[0] + // Public signature debug description: (){}kotlin.collections.Set> + override get + + // CHECK: + // Mangled name: MyMap#(){} + // Public signature: /MyMap.|-5645683436151566731[0] + // Public signature debug description: (){} + constructor() /* primary */ + + // CHECK JVM_IR: + // Mangled name: MyMap#containsKey(kotlin.Int){}kotlin.Boolean + // Public signature: /MyMap.containsKey|4717472714078263338[0] + // Public signature debug description: containsKey(kotlin.Int){}kotlin.Boolean + /* fake */ override fun containsKey(key: Int): Boolean + + // CHECK JVM_IR: + // Mangled name: MyMap#containsValue(kotlin.Int){}kotlin.Boolean + // Public signature: /MyMap.containsValue|-5922461699477978175[0] + // Public signature debug description: containsValue(kotlin.Int){}kotlin.Boolean + /* fake */ override fun containsValue(value: Int): Boolean + + // CHECK JVM_IR: + // Mangled name: MyMap#equals(kotlin.Any?){}kotlin.Boolean + // Public signature: /MyMap.equals|722809408929142791[0] + // Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean + /* fake */ override operator fun equals(other: Any?): Boolean + + // CHECK JVM_IR: + // Mangled name: MyMap#get(kotlin.Int){}kotlin.Int? + // Public signature: /MyMap.get|3354880903083512916[0] + // Public signature debug description: get(kotlin.Int){}kotlin.Int? + /* fake */ override operator fun get(key: Int): Int? + + // CHECK JVM_IR: + // Mangled name: MyMap#hashCode(){}kotlin.Int + // Public signature: /MyMap.hashCode|-8048879360829830756[0] + // Public signature debug description: hashCode(){}kotlin.Int + /* fake */ override fun hashCode(): Int + + // CHECK JVM_IR: + // Mangled name: MyMap#isEmpty(){}kotlin.Boolean + // Public signature: /MyMap.isEmpty|-626562167393617703[0] + // Public signature debug description: isEmpty(){}kotlin.Boolean + /* fake */ override fun isEmpty(): Boolean + + // CHECK JVM_IR: + // Mangled name: MyMap#toString(){}kotlin.String + // Public signature: /MyMap.toString|6958853723545266802[0] + // Public signature debug description: toString(){}kotlin.String + /* fake */ override fun toString(): String + + // CHECK JVM_IR: + // Mangled name: MyMap#containsEntry(kotlin.collections.Map.Entry<*,*>?){}kotlin.Boolean + // Public signature: /MyMap.containsEntry|1332030881581204061[0] + // Public signature debug description: containsEntry(kotlin.collections.Map.Entry<*,*>?){}kotlin.Boolean + fun containsEntry(entry: Entry<*, *>?): Boolean + + // CHECK: + // Mangled name: MyMap{}keys + // Public signature: /MyMap.keys|-1539062068328255324[0] + // Public signature debug description: {}keys + /* fake */ override val keys: Set + // CHECK JVM_IR: + // Mangled name: MyMap#(){}kotlin.collections.Set + // Public signature: /MyMap.keys.|7233616665140484941[0] + // Public signature debug description: (){}kotlin.collections.Set + /* fake */ override get(): Set + + // CHECK: + // Mangled name: MyMap{}size + // Public signature: /MyMap.size|-6253659984320132064[0] + // Public signature debug description: {}size + /* fake */ override val size: Int + // CHECK JVM_IR: + // Mangled name: MyMap#(){}kotlin.Int + // Public signature: /MyMap.size.|-3941649985161900780[0] + // Public signature debug description: (){}kotlin.Int + /* fake */ override get(): Int + + // CHECK: + // Mangled name: MyMap{}values + // Public signature: /MyMap.values|-764749005844117249[0] + // Public signature debug description: {}values + /* fake */ override val values: Collection + // CHECK JVM_IR: + // Mangled name: MyMap#(){}kotlin.collections.Collection + // Public signature: /MyMap.values.|-4796126854434898814[0] + // Public signature debug description: (){}kotlin.collections.Collection + /* fake */ override get(): Collection + +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java index f8b720e0c26..721944b26c5 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/ClassicJvmIrTextTestGenerated.java @@ -492,6 +492,12 @@ public class ClassicJvmIrTextTestGenerated extends AbstractClassicJvmIrTextTest runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/klib/KlibIrTextTestCaseGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/klib/KlibIrTextTestCaseGenerated.java index 386c0107755..ff2c4006725 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/klib/KlibIrTextTestCaseGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/klib/KlibIrTextTestCaseGenerated.java @@ -388,6 +388,11 @@ public class KlibIrTextTestCaseGenerated extends AbstractKlibIrTextTestCase { runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { runTest("compiler/testData/ir/irText/declarations/kt27005.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirLightTreeJsIrTextTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirLightTreeJsIrTextTestGenerated.java index cf912f91b5c..578d638125d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirLightTreeJsIrTextTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirLightTreeJsIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class FirLightTreeJsIrTextTestGenerated extends AbstractFirLightTreeJsIrT runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsIrTextTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsIrTextTestGenerated.java index dac08bcb0ac..1cf7e67efa2 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsIrTextTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class FirPsiJsIrTextTestGenerated extends AbstractFirPsiJsIrTextTest { runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/ClassicJsIrTextTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/ClassicJsIrTextTestGenerated.java index 42333087cab..25c2b1c6378 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/ClassicJsIrTextTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/ClassicJsIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class ClassicJsIrTextTestGenerated extends AbstractClassicJsIrTextTest { runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/ClassicNativeIrTextTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/ClassicNativeIrTextTestGenerated.java index 0e9401247fc..93f202f8928 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/ClassicNativeIrTextTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/ClassicNativeIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class ClassicNativeIrTextTestGenerated extends AbstractClassicNativeIrTex runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirLightTreeNativeIrTextTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirLightTreeNativeIrTextTestGenerated.java index f9aad8df6ac..a1a4d164cad 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirLightTreeNativeIrTextTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirLightTreeNativeIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class FirLightTreeNativeIrTextTestGenerated extends AbstractFirLightTreeN runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirPsiNativeIrTextTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirPsiNativeIrTextTestGenerated.java index c2c718fb412..dca65ba42ad 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirPsiNativeIrTextTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/irtext/FirPsiNativeIrTextTestGenerated.java @@ -438,6 +438,12 @@ public class FirPsiNativeIrTextTestGenerated extends AbstractFirPsiNativeIrTextT runTest("compiler/testData/ir/irText/declarations/interfaceProperties.kt"); } + @Test + @TestMetadata("internalStdlibOverride.kt") + public void testInternalStdlibOverride() throws Exception { + runTest("compiler/testData/ir/irText/declarations/internalStdlibOverride.kt"); + } + @Test @TestMetadata("kt27005.kt") public void testKt27005() throws Exception {