JS: minor code style and formatting fixes

This commit is contained in:
Alexey Andreev
2016-05-23 14:09:28 +03:00
parent 9fcad45edb
commit 9cb6b22d62
8 changed files with 62 additions and 42 deletions
@@ -53,7 +53,10 @@ abstract class AbstractCallInfo : CallInfo {
// if value == null, it is get access
class VariableAccessInfo(callInfo: CallInfo, val value: JsExpression? = null) : AbstractCallInfo(), CallInfo by callInfo
class FunctionCallInfo(callInfo: CallInfo, val argumentsInfo: CallArgumentTranslator.ArgumentsInfo) : AbstractCallInfo(), CallInfo by callInfo
class FunctionCallInfo(
callInfo: CallInfo,
val argumentsInfo: CallArgumentTranslator.ArgumentsInfo
) : AbstractCallInfo(), CallInfo by callInfo
/**
@@ -64,12 +67,18 @@ class FunctionCallInfo(callInfo: CallInfo, val argumentsInfo: CallArgumentTransl
*/
class ExplicitReceivers(val extensionOrDispatchReceiver: JsExpression?, val extensionReceiver: JsExpression? = null)
fun TranslationContext.getCallInfo(resolvedCall: ResolvedCall<out CallableDescriptor>, extensionOrDispatchReceiver: JsExpression?): CallInfo {
fun TranslationContext.getCallInfo(
resolvedCall: ResolvedCall<out CallableDescriptor>,
extensionOrDispatchReceiver: JsExpression?
): CallInfo {
return createCallInfo(resolvedCall, ExplicitReceivers(extensionOrDispatchReceiver))
}
// two receiver need only for FunctionCall in VariableAsFunctionResolvedCall
fun TranslationContext.getCallInfo(resolvedCall: ResolvedCall<out FunctionDescriptor>, explicitReceivers: ExplicitReceivers): FunctionCallInfo {
fun TranslationContext.getCallInfo(
resolvedCall: ResolvedCall<out FunctionDescriptor>,
explicitReceivers: ExplicitReceivers
): FunctionCallInfo {
val argsBlock = JsBlock()
val argumentsInfo = CallArgumentTranslator.translate(resolvedCall, explicitReceivers.extensionOrDispatchReceiver, this, argsBlock)
val explicitReceiversCorrected =
@@ -99,7 +108,10 @@ private fun TranslationContext.getDispatchReceiver(receiverValue: ReceiverValue)
return getDispatchReceiver(getReceiverParameterForReceiver(receiverValue))
}
private fun TranslationContext.createCallInfo(resolvedCall: ResolvedCall<out CallableDescriptor>, explicitReceivers: ExplicitReceivers): CallInfo {
private fun TranslationContext.createCallInfo(
resolvedCall: ResolvedCall<out CallableDescriptor>,
explicitReceivers: ExplicitReceivers
): CallInfo {
val receiverKind = resolvedCall.explicitReceiverKind
// I'm not sure if it's a proper code, and why it should work. Just copied similar logic from ExpressionCodegen.generateConstructorCall.
@@ -48,7 +48,10 @@ fun CallArgumentTranslator.ArgumentsInfo.argsWithReceiver(receiver: JsExpression
// call may be native and|or with spreadOperator
object DefaultFunctionCallCase : FunctionCallCase() {
// TODO: refactor after fix ArgumentsInfo - duplicate code
private fun nativeSpreadFunWithDispatchOrExtensionReceiver(argumentsInfo: CallArgumentTranslator.ArgumentsInfo, functionName: JsName): JsExpression {
private fun nativeSpreadFunWithDispatchOrExtensionReceiver(
argumentsInfo: CallArgumentTranslator.ArgumentsInfo,
functionName: JsName
): JsExpression {
val cachedReceiver = argumentsInfo.cachedReceiver!!
val functionCallRef = Namer.getFunctionApplyRef(JsNameRef(functionName, cachedReceiver.assignmentExpression()))
return JsInvocation(functionCallRef, argumentsInfo.translateArguments)
@@ -58,7 +58,8 @@ fun createWhile(doWhile: Boolean, expression: KtWhileExpressionBase, context: Tr
jsCondition = JsLiteral.TRUE
if (doWhile) {
// translate to: tmpSecondRun = false; do { if(tmpSecondRun) { <expr> if(!tmpExprVar) break; } else tmpSecondRun=true; <body> } while(true)
// translate to: tmpSecondRun = false;
// do { if(tmpSecondRun) { <expr> if(!tmpExprVar) break; } else tmpSecondRun=true; <body> } while(true)
val secondRun = context.defineTemporary(JsLiteral.FALSE)
conditionBlock.statements.add(breakIfConditionIsFalseStatement)
val ifStatement = JsIf(secondRun, conditionBlock, assignment(secondRun, JsLiteral.TRUE).makeStmt())
@@ -100,16 +101,14 @@ fun translateForExpression(expression: KtForExpression, context: TranslationCont
val destructuringParameter: KtDestructuringDeclaration? = expression.destructuringParameter
fun declareParameter(): Pair<JsName, Boolean> {
val loopParameter = getLoopParameter(expression)
if (loopParameter != null) {
return Pair(context.getNameForElement(loopParameter), false)
}
assert(destructuringParameter != null) { "If loopParameter is null, multi parameter must be not null ${expression.text}" }
return Pair(context.scope().declareTemporary(), true)
val loopParameter = getLoopParameter(expression)
val (parameterName, parameterIsTemporary) = if (loopParameter != null) {
Pair(context.getNameForElement(loopParameter), false)
}
else {
assert(destructuringParameter != null) { "If loopParameter is null, multi parameter must be not null ${expression.text}" }
Pair(context.scope().declareTemporary(), true)
}
val (parameterName, parameterIsTemporary) = declareParameter()
fun translateBody(itemValue: JsExpression?): JsStatement? {
val realBody = expression.body?.let { Translation.translateAsStatementAndMergeInBlockIfNeeded(it, context) }
@@ -53,12 +53,7 @@ public final class WhenTranslator extends AbstractTranslator {
whenExpression = expression;
KtExpression subject = expression.getSubjectExpression();
if (subject != null) {
expressionToMatch = context.defineTemporary(Translation.translateAsExpression(subject, context));
}
else {
expressionToMatch = null;
}
expressionToMatch = subject != null ? context.defineTemporary(Translation.translateAsExpression(subject, context)) : null;
}
private JsNode translate() {
@@ -122,7 +117,11 @@ public final class WhenTranslator extends AbstractTranslator {
}
@NotNull
private JsExpression translateOrCondition(@NotNull JsExpression leftExpression, @NotNull KtWhenCondition condition, @NotNull TranslationContext context) {
private JsExpression translateOrCondition(
@NotNull JsExpression leftExpression,
@NotNull KtWhenCondition condition,
@NotNull TranslationContext context
) {
TranslationContext rightContext = context.innerBlock();
JsExpression rightExpression = translateCondition(condition, rightContext);
context.moveVarsFrom(rightContext);
@@ -148,7 +147,10 @@ public final class WhenTranslator extends AbstractTranslator {
}
@NotNull
private JsExpression translateWhenConditionToBooleanExpression(@NotNull KtWhenCondition condition, @NotNull TranslationContext context) {
private JsExpression translateWhenConditionToBooleanExpression(
@NotNull KtWhenCondition condition,
@NotNull TranslationContext context
) {
if (condition instanceof KtWhenConditionIsPattern) {
return translateIsCondition((KtWhenConditionIsPattern) condition, context);
}
@@ -204,15 +204,14 @@ class CallArgumentTranslator private constructor(
return
}
val list: MutableList<JsExpression>
if (shouldWrapVarargInArray) {
list = if (arguments.size == 1) SmartList<JsExpression>() else ArrayList<JsExpression>(arguments.size)
val list: MutableList<JsExpression> = if (shouldWrapVarargInArray) {
if (arguments.size == 1) SmartList<JsExpression>() else ArrayList<JsExpression>(arguments.size)
}
else {
list = result
result
}
val resultKind = translateValueArguments(arguments, list, context)
translateValueArguments(arguments, list, context)
if (shouldWrapVarargInArray) {
val concatArguments = prepareConcatArguments(arguments, list)
@@ -222,8 +221,6 @@ class CallArgumentTranslator private constructor(
else if (result.size == 1) {
result[0] = JsAstUtils.invokeMethod(result[0], "slice")
}
return resultKind
}
private fun translateValueArguments(arguments: List<ValueArgument>, list: MutableList<JsExpression>,
@@ -48,7 +48,8 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
@Nullable JsExpression receiver,
@NotNull TranslationContext context
) {
ResolvedCall<? extends FunctionDescriptor> resolvedCall = CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext());
ResolvedCall<? extends FunctionDescriptor> resolvedCall =
CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext());
if (isJsCall(resolvedCall)) {
return (new CallExpressionTranslator(expression, receiver, context)).translateJsCode();
@@ -39,7 +39,7 @@ object CallableReferenceTranslator {
is FunctionDescriptor ->
translateForFunction(descriptor, context, expression)
else ->
throw IllegalArgumentException("Expected property or function: ${descriptor}, expression=${expression.text}")
throw IllegalArgumentException("Expected property or function: $descriptor, expression=${expression.text}")
}
}
@@ -78,13 +78,13 @@ object CallableReferenceTranslator {
}
}
private fun isConstructor(descriptor: CallableDescriptor): Boolean = descriptor is ConstructorDescriptor
private fun isConstructor(descriptor: CallableDescriptor) = descriptor is ConstructorDescriptor
private fun isExtension(descriptor: CallableDescriptor): Boolean = DescriptorUtils.isExtension(descriptor)
private fun isExtension(descriptor: CallableDescriptor) = DescriptorUtils.isExtension(descriptor)
private fun isMember(descriptor: CallableDescriptor): Boolean = JsDescriptorUtils.getContainingDeclaration(descriptor) is ClassDescriptor
private fun isMember(descriptor: CallableDescriptor) = JsDescriptorUtils.getContainingDeclaration(descriptor) is ClassDescriptor
private fun isVar(descriptor: PropertyDescriptor): JsExpression = if (descriptor.isVar) JsLiteral.TRUE else JsLiteral.FALSE
private fun isVar(descriptor: PropertyDescriptor) = if (descriptor.isVar) JsLiteral.TRUE else JsLiteral.FALSE
private fun translateForTopLevelProperty(descriptor: PropertyDescriptor, context: TranslationContext): JsExpression {
val packageDescriptor = JsDescriptorUtils.getContainingDeclaration(descriptor)
@@ -94,7 +94,8 @@ object CallableReferenceTranslator {
val jsPropertyName = context.getNameForDescriptor(descriptor)
val jsPropertyNameAsString = context.program().getStringLiteral(jsPropertyName.toString())
return JsInvocation(context.namer().callableRefForTopLevelPropertyReference(), jsPackageNameRef, jsPropertyNameAsString, isVar(descriptor))
return JsInvocation(context.namer().callableRefForTopLevelPropertyReference(), jsPackageNameRef, jsPropertyNameAsString,
isVar(descriptor))
}
private fun translateForMemberProperty(descriptor: PropertyDescriptor, context: TranslationContext): JsExpression {
@@ -145,11 +146,16 @@ object CallableReferenceTranslator {
}
private fun translateForMemberFunction(descriptor: FunctionDescriptor, context: TranslationContext): JsExpression {
val classDescriptor = JsDescriptorUtils.getContainingDeclaration(descriptor) as? ClassDescriptor ?: throw IllegalArgumentException("Expected ClassDescriptor: ${descriptor}")
val classDescriptor = JsDescriptorUtils.getContainingDeclaration(descriptor) as? ClassDescriptor ?:
throw IllegalArgumentException("Expected ClassDescriptor: $descriptor")
return translateAsMemberFunctionReference(descriptor, classDescriptor, context)
}
private fun translateAsMemberFunctionReference(descriptor: CallableDescriptor, classDescriptor: ClassDescriptor, context: TranslationContext): JsExpression {
private fun translateAsMemberFunctionReference(
descriptor: CallableDescriptor,
classDescriptor: ClassDescriptor,
context: TranslationContext
): JsExpression {
val jsClassNameRef = context.getQualifiedReference(classDescriptor)
val funName = context.getNameForDescriptor(descriptor)
val funNameAsString = context.program().getStringLiteral(funName.toString())
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.types.KotlinType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.google.dart.compiler.backend.js.ast.JsBinaryOperator.*;
@@ -84,7 +83,8 @@ public final class TranslationUtils {
@NotNull
public static JsExpression translateExclForBinaryEqualLikeExpr(@NotNull JsBinaryOperation baseBinaryExpression) {
return new JsBinaryOperation(notOperator(baseBinaryExpression.getOperator()), baseBinaryExpression.getArg1(), baseBinaryExpression.getArg2());
return new JsBinaryOperation(notOperator(baseBinaryExpression.getOperator()), baseBinaryExpression.getArg1(),
baseBinaryExpression.getArg2());
}
public static boolean isEqualLikeOperator(@NotNull JsBinaryOperator operator) {
@@ -175,7 +175,7 @@ public final class TranslationUtils {
@NotNull PropertyDescriptor descriptor,
@NotNull JsExpression assignTo) {
JsNameRef backingFieldReference = backingFieldReference(context, descriptor);
return !JsAstUtils.isEmptyExpression(assignTo) ? assignment(backingFieldReference, assignTo) : assignTo;
return assignment(backingFieldReference, assignTo);
}
@Nullable