From f916d839782312fea9c4bb415e41152a28d081ee Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 29 Mar 2017 16:40:07 +0300 Subject: [PATCH] JS: replace consumer in with returning value Refactor some utility functions that take consumer of JsStatement to return actual statements, so that caller now responsible for putting these statements to corresponding lists. --- .../js/translate/context/TranslationContext.java | 15 --------------- .../translate/declaration/ClassModelGenerator.kt | 9 +++------ .../declaration/DeclarationBodyVisitor.kt | 4 ++-- .../translate/declaration/DelegationTranslator.kt | 11 +++++------ .../declaration/JsDataClassGenerator.java | 3 +-- .../jetbrains/kotlin/js/translate/utils/utils.kt | 14 ++++++-------- 6 files changed, 17 insertions(+), 39 deletions(-) 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(