From 4101d0174481f3568edd6928f7224d048910432d Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Thu, 26 Oct 2023 09:06:19 +0000 Subject: [PATCH] Revert "[K/JS] Fix ES6-classes compilation for objects without constructor generated by plugins" --- ...CollectClassDefaultConstructorsLowering.kt | 6 +-- .../ir/backend/js/lower/ObjectLowering.kt | 42 ++----------------- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectClassDefaultConstructorsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectClassDefaultConstructorsLowering.kt index df4dd231930..c2b37ae2dfc 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectClassDefaultConstructorsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectClassDefaultConstructorsLowering.kt @@ -28,8 +28,8 @@ class CollectClassDefaultConstructorsLowering(private val context: JsIrBackendCo private val IrClass.defaultConstructor: IrConstructor? get() = constructors.singleOrNull { it.visibility == DescriptorVisibilities.PUBLIC && it.isDefaultConstructor() } -} -fun IrFunction.isDefaultConstructor(): Boolean { - return valueParameters.isEmpty() || valueParameters.all { it.defaultValue != null } + private fun IrFunction.isDefaultConstructor(): Boolean { + return valueParameters.isEmpty() || valueParameters.all { it.defaultValue != null } + } } \ No newline at end of file diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt index 1729f61fd15..a0a7f7da60c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt @@ -20,12 +20,11 @@ import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.utils.getVoid import org.jetbrains.kotlin.ir.builders.* -import org.jetbrains.kotlin.ir.builders.declarations.addConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl +import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -60,7 +59,8 @@ class ObjectDeclarationLowering(val context: JsCommonBackendContext) : Declarati declaration.instanceField = instanceField - val primaryConstructor = declaration.findOrGenerateConstructorForObjectInstantiating() + val primaryConstructor = declaration.primaryConstructor ?: declaration.syntheticPrimaryConstructor!! + val initEntryInstancesFun = declaration.parent.safeAs()?.initEntryInstancesFun getInstanceFun.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { @@ -79,42 +79,6 @@ class ObjectDeclarationLowering(val context: JsCommonBackendContext) : Declarati return listOf(declaration, instanceField, getInstanceFun) } - // We need to generate the new synthetic constructor for ES6 classes in case if a plugin didn't create it. - // The constructor defined as SyntheticPrimaryConstructor is used as a constructor with an init block. - // Because it doesn't contain any [IrDelegatingConstructorCallImpl], we can't use it in ES-classes as constructor - private fun IrClass.findOrGenerateConstructorForObjectInstantiating(): IrConstructor { - val oldSyntheticPrimaryConstructor = primaryConstructor ?: syntheticPrimaryConstructor!! - if (!context.es6mode || !oldSyntheticPrimaryConstructor.isSyntheticPrimaryConstructor) return oldSyntheticPrimaryConstructor - - val declaration = addConstructor() - val superCtor = (superClass ?: context.irBuiltIns.anyClass.owner).constructors.first { it.isDefaultConstructor() } - - declaration.body = factory.createBlockBody( - startOffset, - endOffset, - listOf( - IrDelegatingConstructorCallImpl( - startOffset, - endOffset, - defaultType, - superCtor.symbol, - 0, - 0 - ), - IrDelegatingConstructorCallImpl( - startOffset, - endOffset, - defaultType, - oldSyntheticPrimaryConstructor.symbol, - 0, - 0 - ) - ) - ) - - return declaration - } - private fun IrBuilderWithScope.irNullabilityCheck(instanceField: IrField): IrExpression { val context = this@ObjectDeclarationLowering.context return if (context is JsIrBackendContext && context.es6mode) {