diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/ClassPostProcessor.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/ClassPostProcessor.kt index 1aedc5c3051..4ad63c1c6af 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/ClassPostProcessor.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/ClassPostProcessor.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.js.backend.ast.JsClass class ClassPostProcessor(val root: JsClass) { val optimizations = listOf( - { EmptyConstructorRemoval(root).apply() } + { TrivialConstructorRemoval(root).apply() } ) fun apply() { diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/EmptyConstructorRemoval.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/EmptyConstructorRemoval.kt deleted file mode 100644 index 820d1d6b10c..00000000000 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/EmptyConstructorRemoval.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.js.inline.clean - -import org.jetbrains.kotlin.js.backend.ast.JsClass - -class EmptyConstructorRemoval(private val klass: JsClass) { - fun apply(): Boolean { - if (klass.constructor?.body?.statements?.isEmpty() != true) return false - klass.constructor = null - return true - } -} \ No newline at end of file diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TrivialConstructorRemoval.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TrivialConstructorRemoval.kt new file mode 100644 index 00000000000..3e4c87bcc03 --- /dev/null +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TrivialConstructorRemoval.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.js.inline.clean + +import org.jetbrains.kotlin.js.backend.ast.JsClass +import org.jetbrains.kotlin.js.backend.ast.JsExpressionStatement +import org.jetbrains.kotlin.js.backend.ast.JsFunction +import org.jetbrains.kotlin.js.backend.ast.JsInvocation +import org.jetbrains.kotlin.js.backend.ast.JsNameRef +import org.jetbrains.kotlin.js.backend.ast.JsSuperRef + +class TrivialConstructorRemoval(private val klass: JsClass) { + fun apply(): Boolean { + if (klass.constructor?.isTrivial() != true) return false + klass.constructor = null + return true + } + + private fun JsFunction.isTrivial(): Boolean { + return body.statements.all { statement -> + val expressionStatement = statement as? JsExpressionStatement + val invocation = expressionStatement?.expression as? JsInvocation + invocation?.qualifier is JsSuperRef && invocation.arguments.size == parameters.size && invocation.arguments.withIndex() + .all { (index, argument) -> argument is JsNameRef && argument.name === parameters[index].name } + } + } +} \ No newline at end of file