[JS IR] No generate exportness for overridden properties

[JS IR] Add check on existence of overridden property in tests

^KT-49326 fixed

[JS IR] Add details to comment with exporting properties

^KT-49326 fixed

[JS IR] No generate exportness for overridden properties,

if only no override val -> var

^KT-49326 fixed

Merge-request: KT-MR-4810
This commit is contained in:
Ilya Goncharov
2021-10-21 10:52:48 +00:00
committed by Space
parent 8868738ac8
commit f6ba2a958a
2 changed files with 125 additions and 13 deletions
@@ -133,8 +133,19 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
// Don't generate `defineProperty` if the property overrides a property from an exported class,
// because we've already generated `defineProperty` for the base class property.
// In other words, we only want to generate `defineProperty` once for each property.
// The exception is case when we override val with var,
// so we need regenerate `defineProperty` with setter.
val noOverriddenGetter = property.getter?.overriddenSymbols?.isEmpty() == true
val overriddenExportedGetter = property.getter?.overriddenSymbols?.isNotEmpty() == true &&
property.getter?.isOverriddenExported(context.staticContext.backendContext) == true
val noOverriddenExportedSetter = property.setter?.isOverriddenExported(context.staticContext.backendContext) == false
val needOverrideBySetter = overriddenExportedGetter && noOverriddenExportedSetter
if (irClass.isExported(context.staticContext.backendContext) &&
property.getter?.isOverriddenExported(context.staticContext.backendContext) == false ||
(noOverriddenGetter || needOverrideBySetter) ||
property.getter?.overridesExternal() == true ||
property.getJsName() != null
) {