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;
|
package org.jetbrains.kotlin.js.translate.context;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import kotlin.Unit;
|
|
||||||
import kotlin.jvm.functions.Function1;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
@@ -629,19 +627,6 @@ public class TranslationContext {
|
|||||||
staticContext.getDeclarationStatements().add(statement);
|
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) {
|
public void addTopLevelStatement(@NotNull JsStatement statement) {
|
||||||
staticContext.getTopLevelStatements().add(statement);
|
staticContext.getTopLevelStatements().add(statement);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -192,9 +192,7 @@ class ClassModelGenerator(val context: StaticContext) {
|
|||||||
val sourceName = context.getNameForDescriptor(key).ident
|
val sourceName = context.getNameForDescriptor(key).ident
|
||||||
val targetName = context.getNameForDescriptor(value).ident
|
val targetName = context.getNameForDescriptor(value).ident
|
||||||
if (sourceName != targetName) {
|
if (sourceName != targetName) {
|
||||||
generateDelegateCall(descriptor, key, value, JsLiteral.THIS, translationContext) {
|
model.postDeclarationBlock.statements += generateDelegateCall(descriptor, key, value, JsLiteral.THIS, translationContext)
|
||||||
model.postDeclarationBlock.statements += it
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,9 +227,8 @@ class ClassModelGenerator(val context: StaticContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val translationContext = TranslationContext.rootContext(context)
|
val translationContext = TranslationContext.rootContext(context)
|
||||||
generateDelegateCall(descriptor, fromDescriptor, toDescriptor, JsLiteral.THIS, translationContext) {
|
model.postDeclarationBlock.statements += generateDelegateCall(descriptor, fromDescriptor, toDescriptor, JsLiteral.THIS,
|
||||||
model.postDeclarationBlock.statements += it
|
translationContext)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyMethod(
|
private fun copyMethod(
|
||||||
|
|||||||
+2
-2
@@ -99,7 +99,7 @@ class DeclarationBodyVisitor(
|
|||||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) {
|
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) {
|
||||||
if (!descriptor.hasOrInheritsParametersWithDefaultValue() || !descriptor.isOverridableOrOverrides) {
|
if (!descriptor.hasOrInheritsParametersWithDefaultValue() || !descriptor.isOverridableOrOverrides) {
|
||||||
if (expression != null) {
|
if (expression != null) {
|
||||||
context.addFunctionToPrototype(containingClass, descriptor, expression, context.declarationStatementConsumer)
|
context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, expression))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -139,7 +139,7 @@ class DeclarationBodyVisitor(
|
|||||||
}
|
}
|
||||||
caller.body.statements += statement
|
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
|
// TODO: same logic as in AbstractDeclarationVisitor
|
||||||
if (descriptor.isExtensionProperty || TranslationUtils.shouldAccessViaFunctions(descriptor)) {
|
if (descriptor.isExtensionProperty || TranslationUtils.shouldAccessViaFunctions(descriptor)) {
|
||||||
val getter = descriptor.getter!!
|
val getter = descriptor.getter!!
|
||||||
context().addFunctionToPrototype(classDescriptor, getter, generateDelegateGetterFunction(getter),
|
context().addDeclarationStatement(context().addFunctionToPrototype(
|
||||||
context().declarationStatementConsumer)
|
classDescriptor, getter, generateDelegateGetterFunction(getter)))
|
||||||
if (descriptor.isVar) {
|
if (descriptor.isVar) {
|
||||||
val setter = descriptor.setter!!
|
val setter = descriptor.setter!!
|
||||||
context().addFunctionToPrototype(classDescriptor, setter, generateDelegateSetterFunction(setter),
|
context().addDeclarationStatement(
|
||||||
context().declarationStatementConsumer)
|
context().addFunctionToPrototype(classDescriptor, setter, generateDelegateSetterFunction(setter)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -196,7 +196,6 @@ class DelegationTranslator(
|
|||||||
delegateName: JsName
|
delegateName: JsName
|
||||||
) {
|
) {
|
||||||
val delegateRef = JsNameRef(delegateName, JsLiteral.THIS)
|
val delegateRef = JsNameRef(delegateName, JsLiteral.THIS)
|
||||||
generateDelegateCall(classDescriptor, descriptor, overriddenDescriptor, delegateRef, context(),
|
context().addDeclarationStatement(generateDelegateCall(classDescriptor, descriptor, overriddenDescriptor, delegateRef, context()))
|
||||||
context().declarationStatementConsumer)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -192,8 +192,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
|||||||
private JsFunction generateJsMethod(@NotNull FunctionDescriptor functionDescriptor) {
|
private JsFunction generateJsMethod(@NotNull FunctionDescriptor functionDescriptor) {
|
||||||
JsFunction functionObject = context.createRootScopedFunction(functionDescriptor);
|
JsFunction functionObject = context.createRootScopedFunction(functionDescriptor);
|
||||||
ClassDescriptor containingClass = (ClassDescriptor) functionDescriptor.getContainingDeclaration();
|
ClassDescriptor containingClass = (ClassDescriptor) functionDescriptor.getContainingDeclaration();
|
||||||
UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject,
|
context.addDeclarationStatement(UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject));
|
||||||
context.getDeclarationStatementConsumer());
|
|
||||||
return functionObject;
|
return functionObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,9 +42,8 @@ fun generateDelegateCall(
|
|||||||
fromDescriptor: FunctionDescriptor,
|
fromDescriptor: FunctionDescriptor,
|
||||||
toDescriptor: FunctionDescriptor,
|
toDescriptor: FunctionDescriptor,
|
||||||
thisObject: JsExpression,
|
thisObject: JsExpression,
|
||||||
context: TranslationContext,
|
context: TranslationContext
|
||||||
consumer: (JsStatement) -> Unit
|
): JsStatement {
|
||||||
) {
|
|
||||||
val overriddenMemberFunctionName = context.getNameForDescriptor(toDescriptor)
|
val overriddenMemberFunctionName = context.getNameForDescriptor(toDescriptor)
|
||||||
val overriddenMemberFunctionRef = JsNameRef(overriddenMemberFunctionName, thisObject)
|
val overriddenMemberFunctionRef = JsNameRef(overriddenMemberFunctionName, thisObject)
|
||||||
|
|
||||||
@@ -75,7 +74,7 @@ fun generateDelegateCall(
|
|||||||
val functionObject = simpleReturnFunction(context.getScopeForDescriptor(fromDescriptor), invocation)
|
val functionObject = simpleReturnFunction(context.getScopeForDescriptor(fromDescriptor), invocation)
|
||||||
functionObject.parameters.addAll(parameters)
|
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>> {
|
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(
|
fun TranslationContext.addFunctionToPrototype(
|
||||||
classDescriptor: ClassDescriptor,
|
classDescriptor: ClassDescriptor,
|
||||||
descriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
function: JsExpression,
|
function: JsExpression
|
||||||
consumer: (JsStatement) -> Unit
|
): JsStatement {
|
||||||
) {
|
|
||||||
val prototypeRef = JsAstUtils.prototypeOf(getInnerReference(classDescriptor))
|
val prototypeRef = JsAstUtils.prototypeOf(getInnerReference(classDescriptor))
|
||||||
val functionRef = JsNameRef(getNameForDescriptor(descriptor), prototypeRef)
|
val functionRef = JsNameRef(getNameForDescriptor(descriptor), prototypeRef)
|
||||||
consumer(JsAstUtils.assignment(functionRef, function).makeStmt())
|
return JsAstUtils.assignment(functionRef, function).makeStmt()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun TranslationContext.addAccessorsToPrototype(
|
fun TranslationContext.addAccessorsToPrototype(
|
||||||
|
|||||||
Reference in New Issue
Block a user