Minor style and formatting improvements of CallArgumentsTranslator

This commit is contained in:
Alexey Andreev
2016-05-16 15:05:20 +03:00
parent 2f42f3bdf6
commit 23a4184e48
@@ -78,10 +78,8 @@ class CallArgumentTranslator private constructor(
var cachedReceiver: TemporaryConstVariable? = null var cachedReceiver: TemporaryConstVariable? = null
var result: MutableList<JsExpression> = ArrayList(valueParameters.size) var result: MutableList<JsExpression> = ArrayList(valueParameters.size)
val valueArgumentsByIndex = resolvedCall.valueArgumentsByIndex val valueArgumentsByIndex = resolvedCall.valueArgumentsByIndex ?: throw IllegalStateException(
if (valueArgumentsByIndex == null) { "Failed to arrange value arguments by index: " + resolvedCall.resultingDescriptor)
throw IllegalStateException("Failed to arrange value arguments by index: " + resolvedCall.resultingDescriptor)
}
var argsBeforeVararg: List<JsExpression>? = null var argsBeforeVararg: List<JsExpression>? = null
var argumentsShouldBeExtractedToTmpVars = false var argumentsShouldBeExtractedToTmpVars = false
val argContexts = SmartList<TranslationContext>() val argContexts = SmartList<TranslationContext>()
@@ -89,7 +87,7 @@ class CallArgumentTranslator private constructor(
var concatArguments: MutableList<JsExpression>? = null var concatArguments: MutableList<JsExpression>? = null
for (parameterDescriptor in valueParameters) { for (parameterDescriptor in valueParameters) {
val actualArgument = valueArgumentsByIndex.get(parameterDescriptor.index) val actualArgument = valueArgumentsByIndex[parameterDescriptor.index]
val argContext = context().innerBlock() val argContext = context().innerBlock()
@@ -169,7 +167,8 @@ class CallArgumentTranslator private constructor(
return translate(resolvedCall, receiver, context, context.dynamicContext().jsBlock()) return translate(resolvedCall, receiver, context, context.dynamicContext().jsBlock())
} }
@JvmStatic fun translate(resolvedCall: ResolvedCall<*>, receiver: JsExpression?, context: TranslationContext, block: JsBlock): ArgumentsInfo { @JvmStatic fun translate(resolvedCall: ResolvedCall<*>, receiver: JsExpression?, context: TranslationContext,
block: JsBlock): ArgumentsInfo {
val innerContext = context.innerBlock(block) val innerContext = context.innerBlock(block)
val argumentTranslator = CallArgumentTranslator(resolvedCall, receiver, innerContext) val argumentTranslator = CallArgumentTranslator(resolvedCall, receiver, innerContext)
val result = argumentTranslator.translate() val result = argumentTranslator.translate()
@@ -184,7 +183,8 @@ class CallArgumentTranslator private constructor(
return result return result
} }
private fun translateSingleArgument(actualArgument: ResolvedValueArgument, result: MutableList<JsExpression>, context: TranslationContext): ArgumentsKind { private fun translateSingleArgument(actualArgument: ResolvedValueArgument, result: MutableList<JsExpression>,
context: TranslationContext): ArgumentsKind {
val valueArguments = actualArgument.arguments val valueArguments = actualArgument.arguments
if (actualArgument is DefaultValueArgument) { if (actualArgument is DefaultValueArgument) {
@@ -195,9 +195,7 @@ class CallArgumentTranslator private constructor(
assert(actualArgument is ExpressionValueArgument) assert(actualArgument is ExpressionValueArgument)
assert(valueArguments.size == 1) assert(valueArguments.size == 1)
val argumentExpression = valueArguments.get(0).getArgumentExpression() val argumentExpression = valueArguments[0].getArgumentExpression()!!
assert(argumentExpression != null)
argumentExpression!!
val jsExpression = Translation.translateAsExpression(argumentExpression, context) val jsExpression = Translation.translateAsExpression(argumentExpression, context)
result.add(jsExpression) result.add(jsExpression)
@@ -210,7 +208,8 @@ class CallArgumentTranslator private constructor(
} }
} }
private fun translateVarargArgument(arguments: List<ValueArgument>, result: MutableList<JsExpression>, context: TranslationContext, shouldWrapVarargInArray: Boolean): ArgumentsKind { private fun translateVarargArgument(arguments: List<ValueArgument>, result: MutableList<JsExpression>,
context: TranslationContext, shouldWrapVarargInArray: Boolean): ArgumentsKind {
if (arguments.isEmpty()) { if (arguments.isEmpty()) {
if (shouldWrapVarargInArray) { if (shouldWrapVarargInArray) {
result.add(JsArrayLiteral(listOf<JsExpression>())) result.add(JsArrayLiteral(listOf<JsExpression>()))
@@ -240,14 +239,13 @@ class CallArgumentTranslator private constructor(
return resultKind return resultKind
} }
private fun translateValueArguments(arguments: List<ValueArgument>, list: MutableList<JsExpression>, context: TranslationContext): ArgumentsKind { private fun translateValueArguments(arguments: List<ValueArgument>, list: MutableList<JsExpression>,
context: TranslationContext): ArgumentsKind {
var resultKind = ArgumentsKind.HAS_NOT_EMPTY_EXPRESSION_ARGUMENT var resultKind = ArgumentsKind.HAS_NOT_EMPTY_EXPRESSION_ARGUMENT
val argContexts = SmartList<TranslationContext>() val argContexts = SmartList<TranslationContext>()
var argumentsShouldBeExtractedToTmpVars = false var argumentsShouldBeExtractedToTmpVars = false
for (argument in arguments) { for (argument in arguments) {
val argumentExpression = argument.getArgumentExpression() val argumentExpression = argument.getArgumentExpression()!!
assert(argumentExpression != null)
argumentExpression!!
val argContext = context.innerBlock() val argContext = context.innerBlock()
val argExpression = Translation.translateAsExpression(argumentExpression, argContext) val argExpression = Translation.translateAsExpression(argumentExpression, argContext)
list.add(argExpression) list.add(argExpression)
@@ -269,11 +267,11 @@ class CallArgumentTranslator private constructor(
assert(concatArguments.size > 0) { "concatArguments.size should not be 0" } assert(concatArguments.size > 0) { "concatArguments.size should not be 0" }
if (concatArguments.size > 1) { if (concatArguments.size > 1) {
return JsInvocation(JsNameRef("concat", concatArguments.get(0)), concatArguments.subList(1, concatArguments.size)) return JsInvocation(JsNameRef("concat", concatArguments[0]), concatArguments.subList(1, concatArguments.size))
} }
else { else {
return concatArguments.get(0) return concatArguments[0]
} }
} }
@@ -286,8 +284,8 @@ class CallArgumentTranslator private constructor(
val size = arguments.size val size = arguments.size
for (index in 0..size - 1) { for (index in 0..size - 1) {
val valueArgument = arguments.get(index) val valueArgument = arguments[index]
val expressionArgument = list.get(index) val expressionArgument = list[index]
if (valueArgument.getSpreadElement() != null) { if (valueArgument.getSpreadElement() != null) {
if (lastArrayContent.size > 0) { if (lastArrayContent.size > 0) {
@@ -310,15 +308,16 @@ class CallArgumentTranslator private constructor(
return concatArguments return concatArguments
} }
private fun extractArguments(argExpressions: MutableList<JsExpression>, argContexts: List<TranslationContext>, context: TranslationContext, toTmpVars: Boolean) { private fun extractArguments(argExpressions: MutableList<JsExpression>, argContexts: List<TranslationContext>,
context: TranslationContext, toTmpVars: Boolean) {
for (i in argExpressions.indices) { for (i in argExpressions.indices) {
val argContext = argContexts.get(i) val argContext = argContexts[i]
val jsArgExpression = argExpressions.get(i) val jsArgExpression = argExpressions[i]
if (argContext.currentBlockIsEmpty() && TranslationUtils.isCacheNeeded(jsArgExpression)) { if (argContext.currentBlockIsEmpty() && TranslationUtils.isCacheNeeded(jsArgExpression)) {
if (toTmpVars) { if (toTmpVars) {
val temporaryVariable = context.declareTemporary(jsArgExpression) val temporaryVariable = context.declareTemporary(jsArgExpression)
context.addStatementToCurrentBlock(temporaryVariable.assignmentExpression().makeStmt()) context.addStatementToCurrentBlock(temporaryVariable.assignmentExpression().makeStmt())
argExpressions.set(i, temporaryVariable.reference()) argExpressions[i] = temporaryVariable.reference()
} }
else { else {
context.addStatementToCurrentBlock(jsArgExpression.makeStmt()) context.addStatementToCurrentBlock(jsArgExpression.makeStmt())
@@ -344,8 +343,7 @@ private fun Map<TypeParameterDescriptor, KotlinType>.addReifiedTypeArgsTo(
for (param in keys.sortedBy { it.index }) { for (param in keys.sortedBy { it.index }) {
if (!param.isReified) continue if (!param.isReified) continue
val argumentType = get(param) val argumentType = get(param) ?: continue
if (argumentType == null) continue
val isCheckCallable = patternTranslator.getIsTypeCheckCallable(argumentType) val isCheckCallable = patternTranslator.getIsTypeCheckCallable(argumentType)
reifiedTypeArguments.add(isCheckCallable) reifiedTypeArguments.add(isCheckCallable)