From 2d508582898963e74cdee3204421695e11da56cc Mon Sep 17 00:00:00 2001 From: Erokhin Stanislav Date: Fri, 27 Dec 2013 17:25:13 +0400 Subject: [PATCH] JS backend: Use new CallTranslator for build main and test calls --- .../k2js/translate/general/Translation.java | 9 ++++----- .../translate/reference/ClearCallTranslator.kt | 16 ++++++++++++++++ .../k2js/translate/test/JSTestGenerator.java | 5 +++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java b/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java index cf155167337..a614df594ae 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java @@ -38,7 +38,7 @@ import org.jetbrains.k2js.translate.declaration.PackageDeclarationTranslator; import org.jetbrains.k2js.translate.expression.ExpressionVisitor; import org.jetbrains.k2js.translate.expression.FunctionTranslator; import org.jetbrains.k2js.translate.expression.PatternTranslator; -import org.jetbrains.k2js.translate.reference.CallBuilder; +import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.test.JSTestGenerator; import org.jetbrains.k2js.translate.test.JSTester; import org.jetbrains.k2js.translate.utils.JsAstUtils; @@ -46,6 +46,7 @@ import org.jetbrains.k2js.translate.utils.dangerous.DangerousData; import org.jetbrains.k2js.translate.utils.dangerous.DangerousTranslator; import java.util.Collection; +import java.util.Collections; import java.util.List; import static org.jetbrains.jet.plugin.JetMainDetector.getMainFunction; @@ -174,9 +175,7 @@ public final class Translation { return null; } FunctionDescriptor functionDescriptor = getFunctionDescriptor(context.bindingContext(), mainFunction); - return CallBuilder.build(context) - .args(new JsArrayLiteral(toStringLiteralList(arguments, context.program()))) - .descriptor(functionDescriptor) - .translate().makeStmt(); + JsArrayLiteral argument = new JsArrayLiteral(toStringLiteralList(arguments, context.program())); + return ReferencePackage.buildFakeCall(context, functionDescriptor, Collections.singletonList(argument), null).makeStmt(); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt index 6fc3f57bfbc..f8c10ec0ea4 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt @@ -49,6 +49,22 @@ fun TranslationContext.buildSet(resolvedCall: ResolvedCall, thisObject: JsExpression?): JsExpression { + val fakeCallInfo = object: CallInfo { + override val context: TranslationContext = this@buildFakeCall + override val resolvedCall: ResolvedCall + get() { + throw UnsupportedOperationException("Resolved call for direct call unsupported") + } + override val callableDescriptor: CallableDescriptor = functionDescriptor + override val thisObject: JsExpression? = thisObject + override val receiverObject: JsExpression? = null + override val nullableReceiverForSafeCall: JsExpression? = null + } + val fakeFunctionInfo = FunctionCallInfo(fakeCallInfo, CallArgumentTranslator.ArgumentsInfo(args, false, null)); + return DefaultCallCase(fakeFunctionInfo).translate() +} + private fun TranslationContext.buildCall(resolvedCall: ResolvedCall, receiver1: JsExpression?, receiver2: JsExpression?): JsExpression { if (resolvedCall is VariableAsFunctionResolvedCall) { assert(receiver2 == null, "receiver2 for VariableAsFunctionResolvedCall must be null") // TODO: add debug info diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/test/JSTestGenerator.java b/js/js.translator/src/org/jetbrains/k2js/translate/test/JSTestGenerator.java index 822dfc2cb25..0177b2fb452 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/test/JSTestGenerator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/test/JSTestGenerator.java @@ -25,11 +25,12 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.JetTestFunctionDetector; -import org.jetbrains.k2js.translate.reference.CallBuilder; +import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.reference.ReferenceTranslator; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; import java.util.Collection; +import java.util.Collections; import java.util.List; //TODO: use method object instead of static functions @@ -59,7 +60,7 @@ public final class JSTestGenerator { @NotNull ClassDescriptor classDescriptor, @NotNull JSTester tester) { JsExpression expression = ReferenceTranslator.translateAsFQReference(classDescriptor, context); JsNew testClass = new JsNew(expression); - JsExpression functionToTestCall = CallBuilder.build(context).descriptor(functionDescriptor).receiver(testClass).translate(); + JsExpression functionToTestCall = ReferencePackage.buildFakeCall(context, functionDescriptor, Collections.emptyList(), testClass); JsStringLiteral testName = context.program().getStringLiteral(classDescriptor.getName() + "." + functionDescriptor.getName()); tester.constructTestMethodInvocation(functionToTestCall, testName); }