diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt index 86f1dc7a466..a4ba51c3dc6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt @@ -28,16 +28,20 @@ class CopyIrTreeWithSymbolsForFakeOverrides( private val parent: IrClass, unimplementedOverridesStrategy: IrUnimplementedOverridesStrategy ) { + private val symbolRemapper = FakeOverrideSymbolRemapperImpl(typeArguments, NullDescriptorsRemapper) + + private val copier = FakeOverrideCopier( + symbolRemapper, + FakeOverrideTypeRemapper(symbolRemapper, typeArguments), + SymbolRenamer.DEFAULT, + parent, + unimplementedOverridesStrategy + ) + fun copy(): IrOverridableMember { - // Create new symbols. overridableMember.acceptVoid(symbolRemapper) - // Make symbol remapper aware of the callsite's type arguments. - // Copy IR. - val result = overridableMember.transform( - if (parent.isEffectivelyExternal()) copierMakingExternal else copier, - data = null - ) as IrOverridableMember + val result = overridableMember.transform(copier, null) as IrOverridableMember result.patchDeclarationParents(parent) @@ -93,9 +97,7 @@ class CopyIrTreeWithSymbolsForFakeOverrides( private class FakeOverrideSymbolRemapperImpl( private val typeArguments: Map, descriptorsRemapper: DescriptorsRemapper - ) : - DeepCopySymbolRemapper(descriptorsRemapper) { - + ) : DeepCopySymbolRemapper(descriptorsRemapper) { override fun getReferencedClassifier(symbol: IrClassifierSymbol): IrClassifierSymbol { val result = super.getReferencedClassifier(symbol) if (result !is IrTypeParameterSymbol) @@ -104,30 +106,6 @@ class CopyIrTreeWithSymbolsForFakeOverrides( } } - private val symbolRemapper = - FakeOverrideSymbolRemapperImpl( - typeArguments, - NullDescriptorsRemapper - ) - - private val copier = FakeOverrideCopier( - symbolRemapper, - FakeOverrideTypeRemapper(symbolRemapper, typeArguments), - SymbolRenamer.DEFAULT, - makeExternal = false, - parent, - unimplementedOverridesStrategy - ) - - private val copierMakingExternal = FakeOverrideCopier( - symbolRemapper, - FakeOverrideTypeRemapper(symbolRemapper, typeArguments), - SymbolRenamer.DEFAULT, - makeExternal = true, - parent, - unimplementedOverridesStrategy - ) - private companion object { // TODO: RawTypeAnnotation, FlexibleMutability, EnhancedNullability? val TYPE_ANNOTATIONS_TO_MERGE = listOf( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt index b057c01c88a..bb628aac301 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt @@ -103,8 +103,22 @@ fun buildFakeOverrideMember( return CopyIrTreeWithSymbolsForFakeOverrides(member, substitutionMap, clazz, unimplementedOverridesStrategy) .copy() .apply { + makeExternal(clazz.isExternal) + val isInvisible = isPrivateToThisModule(clazz, classifier.owner, friendModules) if (isInvisible && !member.annotations.hasAnnotation(StandardNames.FqNames.publishedApi)) visibility = DescriptorVisibilities.INVISIBLE_FAKE } } + +// TODO: this is JS-specific functionality which should be moved out of the common ir.tree. +private fun IrOverridableMember.makeExternal(value: Boolean) { + when (this) { + is IrSimpleFunction -> isExternal = value + is IrProperty -> { + isExternal = value + getter?.isExternal = value + setter?.isExternal = value + } + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt index 0e6b93c4df2..064f905e762 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt @@ -13,7 +13,6 @@ class FakeOverrideCopier( private val symbolRemapper: SymbolRemapper, private val typeRemapper: TypeRemapper, private val symbolRenamer: SymbolRenamer, - private val makeExternal: Boolean, private val parent: IrClass, private val unimplementedOverridesStrategy: IrUnimplementedOverridesStrategy ) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) { @@ -35,7 +34,7 @@ class FakeOverrideCopier( isSuspend = declaration.isSuspend, isOperator = declaration.isOperator, isInfix = declaration.isInfix, - isExternal = makeExternal, + isExternal = declaration.isExternal, ).apply { transformAnnotations(declaration) copyTypeParametersFrom(declaration) @@ -82,7 +81,7 @@ class FakeOverrideCopier( isLateinit = declaration.isLateinit, isDelegated = declaration.isDelegated, isExpect = declaration.isExpect, - isExternal = makeExternal + isExternal = declaration.isExternal, ).apply { transformAnnotations(declaration) this.getter = declaration.getter?.transform()