diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index 83ca0e6bdde..9335d3d8a61 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -56,7 +56,7 @@ class BridgesConstruction(val context: JsIrBackendContext) : ClassLoweringPass { irClass.declarations .asSequence() .filterIsInstance() - .filter { !it.isStatic } + .filter { !it.isStaticMethodOfClass } .toList() .forEach { generateBridges(it, irClass) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EnumIntrinsicsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EnumIntrinsicsTransformer.kt index eef0aca67e5..56f6e45154e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EnumIntrinsicsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EnumIntrinsicsTransformer.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.ir.isStatic import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.irCall import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.isStaticMethodOfClass import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.types.getClass @@ -26,7 +27,7 @@ class EnumIntrinsicsTransformer(private val context: JsIrBackendContext) : Calls val enum = call.getTypeArgument(0)?.getClass() ?: return call if (!enum.isEnumClass) return call val staticMethod = enum.findDeclaration(staticMethodPredicate) - if (staticMethod == null || !staticMethod.isStatic) + if (staticMethod == null || !staticMethod.isStaticMethodOfClass) throw IllegalStateException("Enum class should have static method for ${call.symbol.owner.name}") return irCall(call, staticMethod.symbol) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt index db985d66647..2de98e4f300 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt @@ -7,10 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.calls import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.irCall -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.types.* @@ -102,7 +99,7 @@ class EqualityAndComparisonCallsTransformer(context: JsIrBackendContext) : Calls fun IrSimpleFunction.isFakeOverriddenFromComparable(): Boolean = when { origin != IrDeclarationOrigin.FAKE_OVERRIDE -> - parentAsClass.thisReceiver!!.type.isComparable() + !isStaticMethodOfClass && parentAsClass.thisReceiver!!.type.isComparable() else -> overriddenSymbols.all { it.owner.isFakeOverriddenFromComparable() } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt index 772e85bb9d5..874022f3c85 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt @@ -101,7 +101,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo private fun generateMemberFunction(declaration: IrSimpleFunction): JsStatement? { val translatedFunction = declaration.run { if (isReal) accept(IrFunctionToJsTransformer(), context) else null } - if (declaration.isStatic) { + if (declaration.isStaticMethodOfClass) { return translatedFunction!!.makeStmt() } @@ -236,4 +236,4 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo } private val IrClassifierSymbol.isInterface get() = (owner as? IrClass)?.isInterface == true -private val IrClassifierSymbol.isEffectivelyExternal get() = (owner as? IrDeclaration)?.isEffectivelyExternal() == true \ No newline at end of file +private val IrClassifierSymbol.isEffectivelyExternal get() = (owner as? IrDeclaration)?.isEffectivelyExternal() == true diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt index 2b851132443..8c7bff148ae 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt @@ -86,4 +86,4 @@ fun JsName.objectInstanceName() = "${ident}_instance" fun defineProperty(receiver: JsExpression, name: String, value: () -> JsExpression): JsInvocation { val objectDefineProperty = JsNameRef("defineProperty", Namer.JS_OBJECT) return JsInvocation(objectDefineProperty, receiver, JsStringLiteral(name), value()) -} \ No newline at end of file +} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/SimpleNameGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/SimpleNameGenerator.kt index 3678fc5090b..f7603e327be 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/SimpleNameGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/SimpleNameGenerator.kt @@ -181,7 +181,7 @@ class SimpleNameGenerator : NameGenerator { } is IrSimpleFunction -> { - if (declaration.isStatic) { + if (declaration.isStaticMethodOfClass) { nameBuilder.append(getNameForDeclaration(declaration.parent as IrDeclaration, context)) nameBuilder.append('.') } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index 90fd43d2646..d4d69e31695 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -18,12 +18,11 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.name.Name interface IrFunction : IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget { override val descriptor: FunctionDescriptor @@ -57,3 +56,6 @@ fun IrFunction.getDefault(parameter: ValueParameterDescriptor): IrExpressionBody fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) { getIrValueParameter(parameter).defaultValue = expressionBody } + +val IrFunction.isStaticMethodOfClass: Boolean + get() = this is IrSimpleFunction && parent is IrClass && dispatchReceiverParameter == null