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.
This commit is contained in:
-15
@@ -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<JsStatement, Unit> declarationStatementConsumer = new Function1<JsStatement, Unit>() {
|
||||
@Override
|
||||
public Unit invoke(JsStatement statement) {
|
||||
addDeclarationStatement(statement);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
};
|
||||
|
||||
@NotNull
|
||||
public Function1<JsStatement, Unit> getDeclarationStatementConsumer() {
|
||||
return declarationStatementConsumer;
|
||||
}
|
||||
|
||||
public void addTopLevelStatement(@NotNull JsStatement statement) {
|
||||
staticContext.getTopLevelStatements().add(statement);
|
||||
}
|
||||
|
||||
+3
-6
@@ -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(
|
||||
|
||||
+2
-2
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-6
@@ -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()))
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <T, S> List<T>.splitToRanges(classifier: (T) -> S): List<Pair<List<T>, 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(
|
||||
|
||||
Reference in New Issue
Block a user