fix: fake override on interfaces.

This commit is contained in:
Artem Kobzar
2021-12-17 14:22:46 +00:00
committed by Space
parent 8423374343
commit ab7615adaf
2 changed files with 27 additions and 4 deletions
@@ -141,7 +141,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
// so we need regenerate `defineProperty` with setter.
// P.S. If the overridden property is owned by an interface - we should generate defineProperty
// for overridden property in the first class which override those properties
val hasOverriddenExportedInterfaceProperties = overriddenSymbols.any { it.owner.parentClassOrNull.isExportedInterface() }
val hasOverriddenExportedInterfaceProperties = overriddenSymbols.any { it.owner.isDefinedInsideExportedInterface() }
&& !overriddenSymbols.any { it.owner.parentClassOrNull.isExportedClass() }
val getterOverridesExternal = property.getter?.overridesExternal() == true
@@ -212,6 +212,11 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
return if (modality == Modality.FINAL) accessorRef() else generateFunc()
}
private fun IrSimpleFunction.isDefinedInsideExportedInterface(): Boolean {
return (!isFakeOverride && parentClassOrNull.isExportedInterface()) ||
overriddenSymbols.any { it.owner.isDefinedInsideExportedInterface() }
}
private fun IrSimpleFunction?.shouldExportAccessor(): Boolean {
if (this == null) return false