diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/performByIrFile.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/performByIrFile.kt index 1d803aea687..9c270533b62 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/performByIrFile.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/performByIrFile.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper +import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapperPreservingSignatures import org.jetbrains.kotlin.ir.util.copyTypeAndValueArgumentsFrom import org.jetbrains.kotlin.ir.util.deepCopySavingMetadata import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -149,7 +149,7 @@ fun IrFile.copySavingMappings( return newIrFile } -private class DeepCopySymbolRemapperSavingFunctions : DeepCopySymbolRemapper() { +private class DeepCopySymbolRemapperSavingFunctions : DeepCopySymbolRemapperPreservingSignatures() { val declaredFunctions = mutableSetOf() val declaredClasses = mutableSetOf() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt index 2bca5a2e8fa..1abe0783069 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt @@ -32,21 +32,21 @@ open class DeepCopySymbolRemapper( private val descriptorsRemapper: DescriptorsRemapper = NullDescriptorsRemapper ) : IrElementVisitorVoid, SymbolRemapper { - private val classes = hashMapOf() - private val scripts = hashMapOf() - private val constructors = hashMapOf() - private val enumEntries = hashMapOf() - private val externalPackageFragments = hashMapOf() - private val fields = hashMapOf() - private val files = hashMapOf() - private val functions = hashMapOf() - private val properties = hashMapOf() - private val returnableBlocks = hashMapOf() - private val typeParameters = hashMapOf() - private val valueParameters = hashMapOf() - private val variables = hashMapOf() - private val localDelegatedProperties = hashMapOf() - private val typeAliases = hashMapOf() + protected val classes = hashMapOf() + protected val scripts = hashMapOf() + protected val constructors = hashMapOf() + protected val enumEntries = hashMapOf() + protected val externalPackageFragments = hashMapOf() + protected val fields = hashMapOf() + protected val files = hashMapOf() + protected val functions = hashMapOf() + protected val properties = hashMapOf() + protected val returnableBlocks = hashMapOf() + protected val typeParameters = hashMapOf() + protected val valueParameters = hashMapOf() + protected val variables = hashMapOf() + protected val localDelegatedProperties = hashMapOf() + protected val typeAliases = hashMapOf() override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapperPreservingSignatures.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapperPreservingSignatures.kt new file mode 100644 index 00000000000..ba8aa38f0b2 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapperPreservingSignatures.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.util + +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.symbols.impl.* +import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid + +open class DeepCopySymbolRemapperPreservingSignatures : DeepCopySymbolRemapper() { + override fun visitClass(declaration: IrClass) { + remapSymbol(classes, declaration) { symbol -> + symbol.signature?.let { sig -> IrClassPublicSymbolImpl(sig) } ?: IrClassSymbolImpl() + } + declaration.acceptChildrenVoid(this) + } + + override fun visitConstructor(declaration: IrConstructor) { + remapSymbol(constructors, declaration) { symbol -> + symbol.signature?.let { sig -> IrConstructorPublicSymbolImpl(sig) } ?: IrConstructorSymbolImpl() + } + declaration.acceptChildrenVoid(this) + } + + override fun visitEnumEntry(declaration: IrEnumEntry) { + remapSymbol(enumEntries, declaration) { symbol -> + symbol.signature?.let { sig -> IrEnumEntryPublicSymbolImpl(sig) } ?: IrEnumEntrySymbolImpl() + } + declaration.acceptChildrenVoid(this) + } + + override fun visitSimpleFunction(declaration: IrSimpleFunction) { + remapSymbol(functions, declaration) { symbol -> + symbol.signature?.let { sig -> IrSimpleFunctionPublicSymbolImpl(sig) } ?: IrSimpleFunctionSymbolImpl() + } + declaration.acceptChildrenVoid(this) + } + + override fun visitProperty(declaration: IrProperty) { + remapSymbol(properties, declaration) { symbol -> + symbol.signature?.let { sig -> IrPropertyPublicSymbolImpl(sig) } ?: IrPropertySymbolImpl() + } + declaration.acceptChildrenVoid(this) + } + + override fun visitTypeAlias(declaration: IrTypeAlias) { + remapSymbol(typeAliases, declaration) { symbol -> + symbol.signature?.let { sig -> IrTypeAliasPublicSymbolImpl(sig) } ?: IrTypeAliasSymbolImpl() + } + declaration.acceptChildrenVoid(this) + } +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt index 02e4499893c..4e60955a217 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt @@ -58,9 +58,9 @@ fun Collection.collectAndFilterRealOverrides( val realOverrides = mutableMapOf() /* - Due to IR copying in performByIrFile, overrides should only be distinguished up to their fqNames. + Due to IR copying in performByIrFile, overrides should only be distinguished up to their signatures. */ - fun IrOverridableMember.toKey(): Any = fqNameWhenAvailable ?: this + fun IrOverridableMember.toKey(): Any = symbol.signature ?: this fun overriddenSymbols(declaration: IrOverridableMember) = when (declaration) { is IrSimpleFunction -> declaration.overriddenSymbols