From 5e56a52f9421626a13594a8ddbd463c1ef471c7b Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sat, 30 May 2020 18:59:32 +0300 Subject: [PATCH] Properly update modality and visibility of property accessors on fake override creation --- .../backend/common/overrides/IrOverridingUtil.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/IrOverridingUtil.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/IrOverridingUtil.kt index a7f3ed93363..88bbc86a8f0 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/IrOverridingUtil.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/IrOverridingUtil.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.common.overrides import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverrideFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl @@ -278,6 +279,18 @@ class IrOverridingUtil( return result } + private fun IrSimpleFunction.updateAccessorModalityAndVisibility(newModality: Modality, newVisibility: Visibility): IrSimpleFunction? { + require(this is IrFakeOverrideFunctionImpl) { + "Unexpected fake override accessor kind: $this" + } + // For descriptors it gets INVISIBLE_FAKE. + if (newVisibility == Visibilities.PRIVATE) return null + + this.visibility = newVisibility + this.modality = newModality + return this + } + private fun createAndBindFakeOverride( overridables: Collection, current: IrClass @@ -297,6 +310,8 @@ class IrOverridingUtil( is IrFakeOverridePropertyImpl -> { this.visibility = visibility this.modality = modality + this.getter = this.getter?.updateAccessorModalityAndVisibility(modality, visibility) + this.setter = this.setter?.updateAccessorModalityAndVisibility(modality, visibility) } is IrFakeOverrideFunctionImpl -> { this.visibility = visibility