diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt index bafe3190573..52a1217e2ab 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt @@ -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, extensionOrDispatchReceiver: JsExpression?): CallInfo { +fun TranslationContext.getCallInfo( + resolvedCall: ResolvedCall, + extensionOrDispatchReceiver: JsExpression? +): CallInfo { return createCallInfo(resolvedCall, ExplicitReceivers(extensionOrDispatchReceiver)) } // two receiver need only for FunctionCall in VariableAsFunctionResolvedCall -fun TranslationContext.getCallInfo(resolvedCall: ResolvedCall, explicitReceivers: ExplicitReceivers): FunctionCallInfo { +fun TranslationContext.getCallInfo( + resolvedCall: ResolvedCall, + 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, explicitReceivers: ExplicitReceivers): CallInfo { +private fun TranslationContext.createCallInfo( + resolvedCall: ResolvedCall, + 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. diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index 1595bb35140..0e87b61249a 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -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) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt index 34b0f9499d9..b874b362d56 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt @@ -58,7 +58,8 @@ fun createWhile(doWhile: Boolean, expression: KtWhileExpressionBase, context: Tr jsCondition = JsLiteral.TRUE if (doWhile) { - // translate to: tmpSecondRun = false; do { if(tmpSecondRun) { if(!tmpExprVar) break; } else tmpSecondRun=true; } while(true) + // translate to: tmpSecondRun = false; + // do { if(tmpSecondRun) { if(!tmpExprVar) break; } else tmpSecondRun=true; } 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 { - 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) } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/WhenTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/WhenTranslator.java index 5b32edf2f0a..c0381b7772d 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/WhenTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/WhenTranslator.java @@ -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); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt index b3e6897513a..c10bf2c5868 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt @@ -204,15 +204,14 @@ class CallArgumentTranslator private constructor( return } - val list: MutableList - if (shouldWrapVarargInArray) { - list = if (arguments.size == 1) SmartList() else ArrayList(arguments.size) + val list: MutableList = if (shouldWrapVarargInArray) { + if (arguments.size == 1) SmartList() else ArrayList(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, list: MutableList, diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java index 8660302c4cc..74b0e67ad53 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java @@ -48,7 +48,8 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl @Nullable JsExpression receiver, @NotNull TranslationContext context ) { - ResolvedCall resolvedCall = CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext()); + ResolvedCall resolvedCall = + CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext()); if (isJsCall(resolvedCall)) { return (new CallExpressionTranslator(expression, receiver, context)).translateJsCode(); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt index 3fb829c1ebc..b90df17b579 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt @@ -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()) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 988e7b3c8a5..f3f4aec89ca 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -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