diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java index de49dbede47..8342a7c21d8 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java @@ -17,8 +17,6 @@ package org.jetbrains.kotlin.js.translate.context; import com.intellij.psi.PsiElement; -import kotlin.Unit; -import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; @@ -629,19 +627,6 @@ public class TranslationContext { staticContext.getDeclarationStatements().add(statement); } - private final Function1 declarationStatementConsumer = new Function1() { - @Override - public Unit invoke(JsStatement statement) { - addDeclarationStatement(statement); - return Unit.INSTANCE; - } - }; - - @NotNull - public Function1 getDeclarationStatementConsumer() { - return declarationStatementConsumer; - } - public void addTopLevelStatement(@NotNull JsStatement statement) { staticContext.getTopLevelStatements().add(statement); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassModelGenerator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassModelGenerator.kt index 89a2c16e03c..1adcf41b464 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassModelGenerator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassModelGenerator.kt @@ -192,9 +192,7 @@ class ClassModelGenerator(val context: StaticContext) { val sourceName = context.getNameForDescriptor(key).ident val targetName = context.getNameForDescriptor(value).ident if (sourceName != targetName) { - generateDelegateCall(descriptor, key, value, JsLiteral.THIS, translationContext) { - model.postDeclarationBlock.statements += it - } + model.postDeclarationBlock.statements += generateDelegateCall(descriptor, key, value, JsLiteral.THIS, translationContext) } } } @@ -229,9 +227,8 @@ class ClassModelGenerator(val context: StaticContext) { } val translationContext = TranslationContext.rootContext(context) - generateDelegateCall(descriptor, fromDescriptor, toDescriptor, JsLiteral.THIS, translationContext) { - model.postDeclarationBlock.statements += it - } + model.postDeclarationBlock.statements += generateDelegateCall(descriptor, fromDescriptor, toDescriptor, JsLiteral.THIS, + translationContext) } private fun copyMethod( diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DeclarationBodyVisitor.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DeclarationBodyVisitor.kt index 2648d434b7b..c5c25368e9a 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DeclarationBodyVisitor.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DeclarationBodyVisitor.kt @@ -99,7 +99,7 @@ class DeclarationBodyVisitor( override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) { if (!descriptor.hasOrInheritsParametersWithDefaultValue() || !descriptor.isOverridableOrOverrides) { if (expression != null) { - context.addFunctionToPrototype(containingClass, descriptor, expression, context.declarationStatementConsumer) + context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, expression)) } } else { @@ -139,7 +139,7 @@ class DeclarationBodyVisitor( } caller.body.statements += statement - context.addFunctionToPrototype(containingClass, descriptor, caller, context.declarationStatementConsumer) + context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, caller)) } } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt index 89df012a99a..7a277c212a4 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt @@ -174,12 +174,12 @@ class DelegationTranslator( // TODO: same logic as in AbstractDeclarationVisitor if (descriptor.isExtensionProperty || TranslationUtils.shouldAccessViaFunctions(descriptor)) { val getter = descriptor.getter!! - context().addFunctionToPrototype(classDescriptor, getter, generateDelegateGetterFunction(getter), - context().declarationStatementConsumer) + context().addDeclarationStatement(context().addFunctionToPrototype( + classDescriptor, getter, generateDelegateGetterFunction(getter))) if (descriptor.isVar) { val setter = descriptor.setter!! - context().addFunctionToPrototype(classDescriptor, setter, generateDelegateSetterFunction(setter), - context().declarationStatementConsumer) + context().addDeclarationStatement( + context().addFunctionToPrototype(classDescriptor, setter, generateDelegateSetterFunction(setter))) } } else { @@ -196,7 +196,6 @@ class DelegationTranslator( delegateName: JsName ) { val delegateRef = JsNameRef(delegateName, JsLiteral.THIS) - generateDelegateCall(classDescriptor, descriptor, overriddenDescriptor, delegateRef, context(), - context().declarationStatementConsumer) + context().addDeclarationStatement(generateDelegateCall(classDescriptor, descriptor, overriddenDescriptor, delegateRef, context())) } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java index 4c131ab9bc2..fe8b29687fa 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java @@ -192,8 +192,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator { private JsFunction generateJsMethod(@NotNull FunctionDescriptor functionDescriptor) { JsFunction functionObject = context.createRootScopedFunction(functionDescriptor); ClassDescriptor containingClass = (ClassDescriptor) functionDescriptor.getContainingDeclaration(); - UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject, - context.getDeclarationStatementConsumer()); + context.addDeclarationStatement(UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject)); return functionObject; } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/utils.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/utils.kt index 9a228b066ac..b887f70096e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/utils.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/utils.kt @@ -42,9 +42,8 @@ fun generateDelegateCall( fromDescriptor: FunctionDescriptor, toDescriptor: FunctionDescriptor, thisObject: JsExpression, - context: TranslationContext, - consumer: (JsStatement) -> Unit -) { + context: TranslationContext +): JsStatement { val overriddenMemberFunctionName = context.getNameForDescriptor(toDescriptor) val overriddenMemberFunctionRef = JsNameRef(overriddenMemberFunctionName, thisObject) @@ -75,7 +74,7 @@ fun generateDelegateCall( val functionObject = simpleReturnFunction(context.getScopeForDescriptor(fromDescriptor), invocation) functionObject.parameters.addAll(parameters) - context.addFunctionToPrototype(classDescriptor, fromDescriptor, functionObject, consumer) + return context.addFunctionToPrototype(classDescriptor, fromDescriptor, functionObject) } fun List.splitToRanges(classifier: (T) -> S): List, S>> { @@ -123,12 +122,11 @@ fun getReferenceToJsClass(type: KotlinType, context: TranslationContext): JsExpr fun TranslationContext.addFunctionToPrototype( classDescriptor: ClassDescriptor, descriptor: FunctionDescriptor, - function: JsExpression, - consumer: (JsStatement) -> Unit -) { + function: JsExpression +): JsStatement { val prototypeRef = JsAstUtils.prototypeOf(getInnerReference(classDescriptor)) val functionRef = JsNameRef(getNameForDescriptor(descriptor), prototypeRef) - consumer(JsAstUtils.assignment(functionRef, function).makeStmt()) + return JsAstUtils.assignment(functionRef, function).makeStmt() } fun TranslationContext.addAccessorsToPrototype(