From e9b1ae7cb1d9018e7df1f6d9d10bd7943fedfc1b Mon Sep 17 00:00:00 2001 From: Erokhin Stanislav Date: Thu, 30 Jan 2014 22:59:25 +0400 Subject: [PATCH] JS backend: Move CallTranslator to new package & create CallTranslator object --- .../{reference => callTranslator}/CallInfo.kt | 3 +- .../CallInfoExtensions.kt | 3 +- .../CallTranslator.kt | 77 ++++++++++++------- .../FunctionCallCases.kt | 3 +- .../VarialbeCallCases.kt | 2 +- .../declaration/PropertyTranslator.java | 6 +- .../MultiDeclarationTranslator.java | 4 +- .../foreach/IteratorForTranslator.java | 4 +- .../k2js/translate/general/Translation.java | 4 +- .../functions/basic/FunctionIntrinsic.java | 2 +- .../functions/factories/TopLevelFIF.java | 2 +- .../operation/BinaryOperationTranslator.java | 4 +- .../OverloadedAssignmentTranslator.java | 4 +- .../OverloadedIncrementTranslator.java | 4 +- .../operation/UnaryOperationTranslator.java | 4 +- .../reference/ArrayAccessTranslator.java | 3 +- .../reference/CallExpressionTranslator.java | 3 +- .../k2js/translate/reference/CallType.java | 14 ++-- .../InlinedCallExpressionTranslator.java | 4 +- .../reference/VariableAccessTranslator.java | 5 +- .../k2js/translate/test/JSTestGenerator.java | 5 +- 21 files changed, 96 insertions(+), 64 deletions(-) rename js/js.translator/src/org/jetbrains/k2js/translate/{reference => callTranslator}/CallInfo.kt (97%) rename js/js.translator/src/org/jetbrains/k2js/translate/{reference => callTranslator}/CallInfoExtensions.kt (96%) rename js/js.translator/src/org/jetbrains/k2js/translate/{reference => callTranslator}/CallTranslator.kt (57%) rename js/js.translator/src/org/jetbrains/k2js/translate/{reference => callTranslator}/FunctionCallCases.kt (98%) rename js/js.translator/src/org/jetbrains/k2js/translate/{reference => callTranslator}/VarialbeCallCases.kt (98%) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfo.kt b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfo.kt similarity index 97% rename from js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfo.kt rename to js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfo.kt index ab611209576..49706d21df7 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfo.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfo.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.k2js.translate.reference +package org.jetbrains.k2js.translate.callTranslator import com.google.dart.compiler.backend.js.ast.JsExpression import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall @@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils import com.google.dart.compiler.backend.js.ast.JsNameRef import org.jetbrains.k2js.translate.utils.JsAstUtils import org.jetbrains.k2js.translate.context.Namer +import org.jetbrains.k2js.translate.reference.CallArgumentTranslator trait CallInfo { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfoExtensions.kt b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfoExtensions.kt similarity index 96% rename from js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfoExtensions.kt rename to js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfoExtensions.kt index 33249f13b4c..7948372f25e 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallInfoExtensions.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallInfoExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.k2js.translate.reference +package org.jetbrains.k2js.translate.callTranslator import org.jetbrains.jet.lang.descriptors.CallableDescriptor import org.jetbrains.k2js.translate.utils.AnnotationsUtils @@ -26,6 +26,7 @@ import org.jetbrains.k2js.translate.context.Namer import com.google.dart.compiler.backend.js.ast.JsNameRef import org.jetbrains.k2js.translate.utils.JsAstUtils import org.jetbrains.jet.lang.resolve.calls.tasks.ExplicitReceiverKind.* +import org.jetbrains.k2js.translate.reference.CallType val CallInfo.callableDescriptor: CallableDescriptor diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.kt b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallTranslator.kt similarity index 57% rename from js/js.translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.kt rename to js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallTranslator.kt index 005abfbc7ab..fa3ba848878 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/CallTranslator.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.k2js.translate.reference +package org.jetbrains.k2js.translate.callTranslator import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall import org.jetbrains.jet.lang.descriptors.FunctionDescriptor @@ -32,31 +32,47 @@ import org.jetbrains.k2js.translate.context.Namer import org.jetbrains.k2js.translate.utils.ErrorReportingUtils import org.jetbrains.k2js.translate.utils.AnnotationsUtils import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils +import org.jetbrains.k2js.translate.reference.CallArgumentTranslator +object CallTranslator { + fun translate(context: TranslationContext, + resolvedCall: ResolvedCall, + receiverOrThisObject: JsExpression? = null + ): JsExpression { + return translateCall(context, resolvedCall, ExplicitReceivers(receiverOrThisObject)) + } -fun TranslationContext.buildCall(resolvedCall: ResolvedCall, receiverOrThisObject: JsExpression? = null): JsExpression { - return buildCall(resolvedCall, ExplicitReceivers(receiverOrThisObject)) -} + fun translateGet(context: TranslationContext, + resolvedCall: ResolvedCall, + receiverOrThisObject: JsExpression? = null + ): JsExpression { + val variableAccessInfo = VariableAccessInfo(context.getCallInfo(resolvedCall, receiverOrThisObject), null); + return variableAccessInfo.translateVariableAccess() + } -fun TranslationContext.buildGet(resolvedCall: ResolvedCall, receiverOrThisObject: JsExpression? = null): JsExpression { - val variableAccessInfo = VariableAccessInfo(getCallInfo(resolvedCall, receiverOrThisObject), null); - return variableAccessInfo.translateVariableAccess() -} + fun translateSet(context: TranslationContext, + resolvedCall: ResolvedCall, + value: JsExpression, + receiverOrThisObject: JsExpression? = null + ): JsExpression { + val variableAccessInfo = VariableAccessInfo(context.getCallInfo(resolvedCall, receiverOrThisObject), value); + return variableAccessInfo.translateVariableAccess() + } -fun TranslationContext.buildSet(resolvedCall: ResolvedCall, value: JsExpression, receiverOrThisObject: JsExpression? = null): JsExpression { - val variableAccessInfo = VariableAccessInfo(getCallInfo(resolvedCall, receiverOrThisObject), value); - return variableAccessInfo.translateVariableAccess() -} - -fun TranslationContext.buildFakeCall(functionDescriptor: FunctionDescriptor, args: List, thisObject: JsExpression?): JsExpression { - val argumentsInfo = CallArgumentTranslator.ArgumentsInfo(args, false, null); - val functionName = getNameForDescriptor(functionDescriptor) - val isNative = AnnotationsUtils.isNativeObject(functionDescriptor) - val hasSpreadOperator = false - if (thisObject != null) { - return DefaultFunctionCallCase.buildDefaultCallWithThisObject(argumentsInfo, thisObject, functionName, isNative, hasSpreadOperator) - } else { - return DefaultFunctionCallCase.buildDefaultCallWithoutReceiver(this, argumentsInfo, functionDescriptor, functionName, isNative, hasSpreadOperator) + fun buildCall(context: TranslationContext, + functionDescriptor: FunctionDescriptor, + args: List, + thisObject: JsExpression? + ): JsExpression { + val argumentsInfo = CallArgumentTranslator.ArgumentsInfo(args, false, null); + val functionName = context.getNameForDescriptor(functionDescriptor) + val isNative = AnnotationsUtils.isNativeObject(functionDescriptor) + val hasSpreadOperator = false + if (thisObject != null) { + return DefaultFunctionCallCase.buildDefaultCallWithThisObject(argumentsInfo, thisObject, functionName, isNative, hasSpreadOperator) + } else { + return DefaultFunctionCallCase.buildDefaultCallWithoutReceiver(context, argumentsInfo, functionDescriptor, functionName, isNative, hasSpreadOperator) + } } } @@ -64,23 +80,26 @@ private fun ResolvedCall.expectedReceivers(): Boolean { return this.getExplicitReceiverKind() != NO_EXPLICIT_RECEIVER } -private fun TranslationContext.buildCall(resolvedCall: ResolvedCall, explicitReceivers: ExplicitReceivers): JsExpression { +private fun translateCall(context: TranslationContext, + resolvedCall: ResolvedCall, + explicitReceivers: ExplicitReceivers +): JsExpression { if (resolvedCall is VariableAsFunctionResolvedCall) { assert(explicitReceivers.receiverObject == null, "VariableAsFunctionResolvedCall must have one receiver") val variableCall = resolvedCall.getVariableCall() if (variableCall.expectedReceivers()) { - val newReceiver = buildGet(variableCall, explicitReceivers.receiverOrThisObject) - return buildCall(resolvedCall.getFunctionCall(), ExplicitReceivers(newReceiver)) + val newReceiver = CallTranslator.translateGet(context, variableCall, explicitReceivers.receiverOrThisObject) + return translateCall(context, resolvedCall.getFunctionCall(), ExplicitReceivers(newReceiver)) } else { - val thisObject = buildGet(variableCall, null) + val thisObject = CallTranslator.translateGet(context, variableCall, null) if (explicitReceivers.receiverOrThisObject == null) - return buildCall(resolvedCall.getFunctionCall(), ExplicitReceivers(thisObject)) + return translateCall(context, resolvedCall.getFunctionCall(), ExplicitReceivers(thisObject)) else - return buildCall(resolvedCall.getFunctionCall(), ExplicitReceivers(thisObject, explicitReceivers.receiverOrThisObject)) + return translateCall(context, resolvedCall.getFunctionCall(), ExplicitReceivers(thisObject, explicitReceivers.receiverOrThisObject)) } } - val functionCallInfo = getCallInfo(resolvedCall, explicitReceivers) + val functionCallInfo = context.getCallInfo(resolvedCall, explicitReceivers) return functionCallInfo.translateFunctionCall() } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/FunctionCallCases.kt similarity index 98% rename from js/js.translator/src/org/jetbrains/k2js/translate/reference/FunctionCallCases.kt rename to js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/FunctionCallCases.kt index bebf2b5903e..f2d1d15b227 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/FunctionCallCases.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.k2js.translate.reference +package org.jetbrains.k2js.translate.callTranslator import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.JsNameRef @@ -35,6 +35,7 @@ import org.jetbrains.k2js.translate.utils.PsiUtils import com.google.dart.compiler.backend.js.ast.JsLiteral import com.google.dart.compiler.backend.js.ast.JsName import org.jetbrains.k2js.translate.context.TranslationContext +import org.jetbrains.k2js.translate.reference.CallArgumentTranslator public fun addReceiverToArgs(receiver: JsExpression, arguments: List) : List { if (arguments.isEmpty()) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/VarialbeCallCases.kt b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/VarialbeCallCases.kt similarity index 98% rename from js/js.translator/src/org/jetbrains/k2js/translate/reference/VarialbeCallCases.kt rename to js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/VarialbeCallCases.kt index 8c7ea1c32f1..a9c5924c706 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/VarialbeCallCases.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/callTranslator/VarialbeCallCases.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.k2js.translate.reference +package org.jetbrains.k2js.translate.callTranslator import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.JsNameRef diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java index 1028481afa2..bd82b66919c 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java @@ -25,11 +25,11 @@ import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.JetPropertyAccessor; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.expression.FunctionTranslator; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; import org.jetbrains.k2js.translate.utils.TranslationUtils; @@ -141,7 +141,7 @@ public final class PropertyTranslator extends AbstractTranslator { JsExpression value; ResolvedCall delegatedCall = bindingContext().get(BindingContext.DELEGATED_PROPERTY_RESOLVED_CALL, getterDescriptor); if (delegatedCall != null) { - value = ReferencePackage.buildCall(context(), delegatedCall, getDelegateNameRef(getPropertyName())); + value = CallTranslator.instance$.translate(context(), delegatedCall, getDelegateNameRef(getPropertyName())); } else { value = backingFieldReference(context(), this.descriptor); } @@ -171,7 +171,7 @@ public final class PropertyTranslator extends AbstractTranslator { ResolvedCall delegatedCall = bindingContext().get(BindingContext.DELEGATED_PROPERTY_RESOLVED_CALL, setterDescriptor); if (delegatedCall != null) { - setExpression = ReferencePackage.buildCall(contextWithAliased, delegatedCall, getDelegateNameRef(getPropertyName())); + setExpression = CallTranslator.instance$.translate(contextWithAliased, delegatedCall, getDelegateNameRef(getPropertyName())); } else { setExpression = assignmentToBackingField(contextWithAliased, descriptor, defaultParameterRef); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/MultiDeclarationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/MultiDeclarationTranslator.java index d4e3d4096e7..4d06cd6f4a9 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/MultiDeclarationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/MultiDeclarationTranslator.java @@ -29,9 +29,9 @@ import org.jetbrains.jet.lang.psi.JetMultiDeclarationEntry; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import java.util.ArrayList; import java.util.List; @@ -78,7 +78,7 @@ public class MultiDeclarationTranslator extends AbstractTranslator { for (JetMultiDeclarationEntry entry : multiDeclaration.getEntries()) { ResolvedCall entryInitCall = context().bindingContext().get(BindingContext.COMPONENT_RESOLVED_CALL, entry); assert entryInitCall != null : "Entry init call must be not null"; - JsExpression entryInitializer = ReferencePackage.buildCall(context(), entryInitCall, multiObjNameRef); + JsExpression entryInitializer = CallTranslator.instance$.translate(context(), entryInitCall, multiObjNameRef); VariableDescriptor descriptor = BindingContextUtils.getNotNull( context().bindingContext(), BindingContext.VARIABLE, entry); JsName name = context().getNameForDescriptor(descriptor); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/IteratorForTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/IteratorForTranslator.java index 2486cf41cbc..e3b78041f20 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/IteratorForTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/IteratorForTranslator.java @@ -24,9 +24,9 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetForExpression; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.Translation; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import static org.jetbrains.k2js.translate.utils.BindingUtils.*; import static org.jetbrains.k2js.translate.utils.PsiUtils.getLoopRange; @@ -73,6 +73,6 @@ public final class IteratorForTranslator extends ForTranslator { @NotNull private JsExpression translateMethodInvocation(@Nullable JsExpression receiver, @NotNull ResolvedCall resolvedCall) { - return ReferencePackage.buildCall(context(), resolvedCall, receiver); + return CallTranslator.instance$.translate(context(), resolvedCall, receiver); } } 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 9bf954c0df1..3a52ee288be 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 @@ -31,6 +31,7 @@ import org.jetbrains.k2js.facade.exceptions.MainFunctionNotFoundException; import org.jetbrains.k2js.facade.exceptions.TranslationException; import org.jetbrains.k2js.facade.exceptions.TranslationInternalException; import org.jetbrains.k2js.facade.exceptions.UnsupportedFeatureException; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.StaticContext; import org.jetbrains.k2js.translate.context.TranslationContext; @@ -38,7 +39,6 @@ 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.ReferencePackage; import org.jetbrains.k2js.translate.test.JSTestGenerator; import org.jetbrains.k2js.translate.test.JSTester; import org.jetbrains.k2js.translate.utils.JsAstUtils; @@ -176,6 +176,6 @@ public final class Translation { } FunctionDescriptor functionDescriptor = getFunctionDescriptor(context.bindingContext(), mainFunction); JsArrayLiteral argument = new JsArrayLiteral(toStringLiteralList(arguments, context.program())); - return ReferencePackage.buildFakeCall(context, functionDescriptor, Collections.singletonList(argument), null).makeStmt(); + return CallTranslator.instance$.buildCall(context, functionDescriptor, Collections.singletonList(argument), null).makeStmt(); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/basic/FunctionIntrinsic.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/basic/FunctionIntrinsic.java index b969d92df88..541ecdb62a1 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/basic/FunctionIntrinsic.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/basic/FunctionIntrinsic.java @@ -19,8 +19,8 @@ package org.jetbrains.k2js.translate.intrinsic.functions.basic; import com.google.dart.compiler.backend.js.ast.JsExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.k2js.translate.callTranslator.CallInfo; import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.reference.CallInfo; import java.util.List; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java index 2c3fb6fd72b..00f63a17a50 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java @@ -30,11 +30,11 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.PrimitiveType; +import org.jetbrains.k2js.translate.callTranslator.CallInfo; import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; -import org.jetbrains.k2js.translate.reference.CallInfo; import org.jetbrains.k2js.translate.utils.AnnotationsUtils; import org.jetbrains.k2js.translate.utils.BindingUtils; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java index 4f8d903e4aa..d4aee805967 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java @@ -27,10 +27,10 @@ import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.jet.lexer.JetTokens; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.intrinsic.operation.BinaryOperationIntrinsic; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.utils.TranslationUtils; import static org.jetbrains.k2js.translate.operation.AssignmentTranslator.isAssignmentOperator; @@ -128,7 +128,7 @@ public final class BinaryOperationTranslator extends AbstractTranslator { @NotNull private JsExpression translateAsOverloadedBinaryOperation() { ResolvedCall resolvedCall = getFunctionResolvedCall(bindingContext(), expression.getOperationReference()); - JsExpression result = ReferencePackage.buildCall(context(), resolvedCall, getReceiver()); + JsExpression result = CallTranslator.instance$.translate(context(), resolvedCall, getReceiver()); return mayBeWrapWithNegation(result); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java index c98dedb456e..d7c76c6eeeb 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java @@ -21,8 +21,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetBinaryExpression; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.utils.BindingUtils; public final class OverloadedAssignmentTranslator extends AssignmentTranslator { @@ -57,6 +57,6 @@ public final class OverloadedAssignmentTranslator extends AssignmentTranslator { @NotNull private JsExpression overloadedMethodInvocation() { - return ReferencePackage.buildCall(context(), resolvedCall, accessTranslator.translateAsGet()); + return CallTranslator.instance$.translate(context(), resolvedCall, accessTranslator.translateAsGet()); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java index 1275b9476be..3ec8f811c09 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java @@ -21,8 +21,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetUnaryExpression; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.utils.BindingUtils; public final class OverloadedIncrementTranslator extends IncrementTranslator { @@ -40,7 +40,7 @@ public final class OverloadedIncrementTranslator extends IncrementTranslator { @Override @NotNull protected JsExpression operationExpression(@NotNull JsExpression receiver) { - return ReferencePackage.buildCall(context(), resolvedCall, receiver); + return CallTranslator.instance$.translate(context(), resolvedCall, receiver); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java index 6bafa45ef5f..649c30d199f 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java @@ -24,8 +24,8 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetUnaryExpression; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lexer.JetTokens; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.utils.TranslationUtils; import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression; @@ -57,7 +57,7 @@ public final class UnaryOperationTranslator { } ResolvedCall resolvedCall = getFunctionResolvedCall(context.bindingContext(), expression.getOperationReference()); - return ReferencePackage.buildCall(context, resolvedCall, baseExpression); + return CallTranslator.instance$.translate(context, resolvedCall, baseExpression); } private static boolean isExclForBinaryEqualLikeExpr(@NotNull JetUnaryExpression expression, @NotNull JsExpression baseExpression) { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java index fa4d79fff67..c56bda55737 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.psi.ValueArgument; import org.jetbrains.jet.lang.resolve.calls.model.ExpressionValueArgument; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; @@ -81,7 +82,7 @@ public class ArrayAccessTranslator extends AbstractTranslator implements AccessT if (!isGetter) { context = contextWithValueParameterAliasInArrayGetAccess(toSetTo); } - return ReferencePackage.buildCall(context, resolvedCall, arrayExpression); + return CallTranslator.instance$.translate(context, resolvedCall, arrayExpression); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallExpressionTranslator.java index ec505d28a4c..703993e6a33 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallExpressionTranslator.java @@ -20,6 +20,7 @@ import com.google.dart.compiler.backend.js.ast.JsExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetCallExpression; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; public final class CallExpressionTranslator extends AbstractCallExpressionTranslator { @@ -43,6 +44,6 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl @NotNull private JsExpression translate() { - return ReferencePackage.buildCall(context(), resolvedCall, receiver); + return CallTranslator.instance$.translate(context(), resolvedCall, receiver); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallType.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallType.java index dc74b50d81b..fdf5118e963 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallType.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallType.java @@ -32,8 +32,10 @@ public enum CallType { SAFE { @NotNull @Override - JsExpression constructCall(@Nullable JsExpression receiver, @NotNull CallConstructor constructor, - @NotNull TranslationContext context) { + public JsExpression constructCall( + @Nullable JsExpression receiver, @NotNull CallConstructor constructor, + @NotNull TranslationContext context + ) { assert receiver != null; JsConditional expression = notNullConditional(receiver, JsLiteral.NULL, context); expression.setThenExpression(constructor.construct(expression.getThenExpression())); @@ -45,14 +47,16 @@ public enum CallType { NORMAL { @NotNull @Override - JsExpression constructCall(@Nullable JsExpression receiver, @NotNull CallConstructor constructor, - @NotNull TranslationContext context) { + public JsExpression constructCall( + @Nullable JsExpression receiver, @NotNull CallConstructor constructor, + @NotNull TranslationContext context + ) { return constructor.construct(receiver); } }; @NotNull - abstract JsExpression constructCall(@Nullable JsExpression receiver, @NotNull CallConstructor constructor, + public abstract JsExpression constructCall(@Nullable JsExpression receiver, @NotNull CallConstructor constructor, @NotNull TranslationContext context); @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java index cb4f7c5e63d..df25c84fa12 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java @@ -31,6 +31,8 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.psi.JetCallExpression; import org.jetbrains.jet.lang.psi.JetFunction; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument; +import org.jetbrains.k2js.translate.callTranslator.CallInfo; +import org.jetbrains.k2js.translate.callTranslator.CallTranslatorPackage; import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.utils.JsAstUtils; @@ -116,7 +118,7 @@ public final class InlinedCallExpressionTranslator extends AbstractCallExpressio private TranslationContext createContextWithAliasForThisExpression(@NotNull TranslationContext contextForInlining) { TranslationContext contextWithAliasForThisExpression = contextForInlining; SimpleFunctionDescriptor functionDescriptor = getFunctionDescriptor(); - CallInfo callInfo = ReferencePackage.getCallInfo(contextForInlining, resolvedCall, receiver); + CallInfo callInfo = CallTranslatorPackage.getCallInfo(contextForInlining, resolvedCall, receiver); JsExpression receiver = callInfo.getReceiverObject(); if (receiver != null) { contextWithAliasForThisExpression = diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/VariableAccessTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/VariableAccessTranslator.java index a68ecda7cee..da137357849 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/VariableAccessTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/VariableAccessTranslator.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; @@ -58,13 +59,13 @@ public class VariableAccessTranslator extends AbstractTranslator implements Acce @NotNull @Override public JsExpression translateAsGet() { - return ReferencePackage.buildGet(context(), resolvedCall, receiver); + return CallTranslator.instance$.translateGet(context(), resolvedCall, receiver); } @NotNull @Override public JsExpression translateAsSet(@NotNull JsExpression setTo) { - return ReferencePackage.buildSet(context(), resolvedCall, setTo, receiver); + return CallTranslator.instance$.translateSet(context(), resolvedCall, setTo, receiver); } @NotNull 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 0177b2fb452..d2c359f9e98 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 @@ -23,9 +23,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.k2js.translate.callTranslator.CallTranslator; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.JetTestFunctionDetector; -import org.jetbrains.k2js.translate.reference.ReferencePackage; import org.jetbrains.k2js.translate.reference.ReferenceTranslator; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; @@ -60,7 +60,8 @@ public final class JSTestGenerator { @NotNull ClassDescriptor classDescriptor, @NotNull JSTester tester) { JsExpression expression = ReferenceTranslator.translateAsFQReference(classDescriptor, context); JsNew testClass = new JsNew(expression); - JsExpression functionToTestCall = ReferencePackage.buildFakeCall(context, functionDescriptor, Collections.emptyList(), testClass); + JsExpression functionToTestCall = CallTranslator.instance$.buildCall(context, functionDescriptor, + Collections.emptyList(), testClass); JsStringLiteral testName = context.program().getStringLiteral(classDescriptor.getName() + "." + functionDescriptor.getName()); tester.constructTestMethodInvocation(functionToTestCall, testName); }