[K/JS] Fix importing behavior for external interfaces in case of implementing them

This commit is contained in:
Artem Kobzar
2023-08-03 13:10:03 +00:00
committed by Space Team
parent 020ad64b3c
commit 2c4569568b
2 changed files with 17 additions and 1 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.butIf
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.memoryOptimizedMap
import org.jetbrains.kotlin.utils.memoryOptimizedMapNotNull
import org.jetbrains.kotlin.utils.toSmartList
class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationContext) {
@@ -537,8 +538,14 @@ private fun IrOverridableDeclaration<*>.overridesExternal(): Boolean {
private val IrClassifierSymbol.isInterface get() = (owner as? IrClass)?.isInterface == true
private fun IrClassSymbol.existsInRuntime(): Boolean {
return !owner.isEffectivelyExternal() || !owner.isInterface
}
class JsIrClassModel(val klass: IrClass) {
val superClasses = klass.superTypes.memoryOptimizedMap { it.classifierOrNull as IrClassSymbol }
val superClasses = klass.superTypes.memoryOptimizedMapNotNull {
(it.classifierOrNull as IrClassSymbol).takeIf(IrClassSymbol::existsInRuntime)
}
val preDeclarationBlock = JsCompositeBlock()
val postDeclarationBlock = JsCompositeBlock()