Refactoring + preserving formatting in some more places where it was missing
This commit is contained in:
@@ -57,15 +57,12 @@ class CodeConverter(
|
|||||||
return statementConverter.convertStatement(statement, this).assignPrototype(statement)
|
return statementConverter.convertStatement(statement, this).assignPrototype(statement)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun convertExpressions(expressions: Array<PsiExpression>): List<Expression>
|
fun convertExpressionsInList(expressions: List<PsiExpression>): List<Expression>
|
||||||
= expressions.map { convertExpression(it) }
|
= expressions.map { convertExpression(it).assignPrototype(it, CommentsAndSpacesInheritance.LINE_BREAKS) }
|
||||||
|
|
||||||
fun convertExpressions(expressions: List<PsiExpression>): List<Expression>
|
|
||||||
= expressions.map { convertExpression(it) }
|
|
||||||
|
|
||||||
fun convertArgumentList(list: PsiExpressionList): ArgumentList {
|
fun convertArgumentList(list: PsiExpressionList): ArgumentList {
|
||||||
return ArgumentList(
|
return ArgumentList(
|
||||||
convertExpressions(list.expressions),
|
convertExpressionsInList(list.expressions.asList()),
|
||||||
LPar.withPrototype(list.lPar()),
|
LPar.withPrototype(list.lPar()),
|
||||||
RPar.withPrototype(list.rPar())
|
RPar.withPrototype(list.rPar())
|
||||||
).assignPrototype(list)
|
).assignPrototype(list)
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
val isExtension = property.isExtensionDeclaration()
|
val isExtension = property.isExtensionDeclaration()
|
||||||
val propertyAccess = if (isTopLevel) {
|
val propertyAccess = if (isTopLevel) {
|
||||||
if (isExtension)
|
if (isExtension)
|
||||||
QualifiedExpression(codeConverter.convertExpression(arguments.firstOrNull(), true), propertyName, null).assignNoPrototype()
|
QualifiedExpression(codeConverter.convertExpression(arguments.firstOrNull(), shouldParenthesize = true), propertyName, null).assignNoPrototype()
|
||||||
else
|
else
|
||||||
propertyName
|
propertyName
|
||||||
}
|
}
|
||||||
@@ -371,7 +371,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
else if (origin is KtFunction) {
|
else if (origin is KtFunction) {
|
||||||
if (isTopLevel) {
|
if (isTopLevel) {
|
||||||
result = if (origin.isExtensionDeclaration()) {
|
result = if (origin.isExtensionDeclaration()) {
|
||||||
val qualifier = codeConverter.convertExpression(arguments.firstOrNull(), true)
|
val qualifier = codeConverter.convertExpression(arguments.firstOrNull(), shouldParenthesize = true)
|
||||||
MethodCallExpression.build(qualifier,
|
MethodCallExpression.build(qualifier,
|
||||||
origin.name!!,
|
origin.name!!,
|
||||||
convertArguments(expression, isExtension = true),
|
convertArguments(expression, isExtension = true),
|
||||||
@@ -393,7 +393,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
val resolvedQualifier = (methodExpr.qualifier as? PsiReferenceExpression)?.resolve()
|
val resolvedQualifier = (methodExpr.qualifier as? PsiReferenceExpression)?.resolve()
|
||||||
if (isFacadeClassFromLibrary(resolvedQualifier)) {
|
if (isFacadeClassFromLibrary(resolvedQualifier)) {
|
||||||
result = if (target.isKotlinExtensionFunction()) {
|
result = if (target.isKotlinExtensionFunction()) {
|
||||||
val qualifier = codeConverter.convertExpression(arguments.firstOrNull(), true)
|
val qualifier = codeConverter.convertExpression(arguments.firstOrNull(), shouldParenthesize = true)
|
||||||
MethodCallExpression.build(qualifier,
|
MethodCallExpression.build(qualifier,
|
||||||
methodExpr.referenceName!!,
|
methodExpr.referenceName!!,
|
||||||
convertArguments(expression, isExtension = true),
|
convertArguments(expression, isExtension = true),
|
||||||
@@ -418,7 +418,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
if (specialMethod != null) {
|
if (specialMethod != null) {
|
||||||
val lPar = expression.argumentList.lPar()
|
val lPar = expression.argumentList.lPar()
|
||||||
val rPar = expression.argumentList.rPar()
|
val rPar = expression.argumentList.rPar()
|
||||||
val data = SpecialMethod.ConvertCallData(qualifier, arguments, typeArguments, dot, lPar, rPar, codeConverter)
|
val data = SpecialMethod.ConvertCallData(qualifier, arguments.asList(), typeArguments, dot, lPar, rPar, codeConverter)
|
||||||
val converted = specialMethod.convertCall(data)
|
val converted = specialMethod.convertCall(data)
|
||||||
if (converted != null) {
|
if (converted != null) {
|
||||||
result = converted
|
result = converted
|
||||||
@@ -477,7 +477,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
else if (expression.arrayDimensions.size > 0 && expression.type is PsiArrayType) {
|
else if (expression.arrayDimensions.size > 0 && expression.type is PsiArrayType) {
|
||||||
result = ArrayWithoutInitializationExpression(
|
result = ArrayWithoutInitializationExpression(
|
||||||
typeConverter.convertType(expression.type, Nullability.NotNull) as ArrayType,
|
typeConverter.convertType(expression.type, Nullability.NotNull) as ArrayType,
|
||||||
codeConverter.convertExpressions(expression.arrayDimensions))
|
codeConverter.convertExpressionsInList(expression.arrayDimensions.asList()))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (type?.canonicalText in PsiPrimitiveType.getAllBoxedTypeNames()) {
|
if (type?.canonicalText in PsiPrimitiveType.getAllBoxedTypeNames()) {
|
||||||
@@ -707,7 +707,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
arguments.map { codeConverter.convertExpression(it).assignPrototype(it, commentsAndSpacesInheritance) }
|
codeConverter.convertExpressionsInList(arguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
val lPar = argumentList?.lPar()
|
val lPar = argumentList?.lPar()
|
||||||
@@ -826,7 +826,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
val callData = SpecialMethod.ConvertCallData(fakeReceiver, fakeParams.toTypedArray(), emptyList(), null, null, null, patchedConverter)
|
val callData = SpecialMethod.ConvertCallData(fakeReceiver, fakeParams, emptyList(), null, null, null, patchedConverter)
|
||||||
statement = specialMethod.convertCall(callData)!!
|
statement = specialMethod.convertCall(callData)!!
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
},
|
},
|
||||||
|
|
||||||
COLLECTION_TO_ARRAY_WITH_ARG(Collection::class.java.name, "toArray", 1) {
|
COLLECTION_TO_ARRAY_WITH_ARG(Collection::class.java.name, "toArray", 1) {
|
||||||
override fun ConvertCallData.convertCall() = copy(arguments = emptyArray()).convertWithChangedName("toTypedArray", emptyList())
|
override fun ConvertCallData.convertCall() = copy(arguments = emptyList()).convertWithChangedName("toTypedArray", emptyList())
|
||||||
},
|
},
|
||||||
|
|
||||||
MAP_SIZE(Map::class.java.name, "size", 0) {
|
MAP_SIZE(Map::class.java.name, "size", 0) {
|
||||||
@@ -276,7 +276,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
limit < 0 -> // negative, same behavior as split(regex) in kotlin
|
limit < 0 -> // negative, same behavior as split(regex) in kotlin
|
||||||
listOf(patternArgument)
|
listOf(patternArgument)
|
||||||
limit == 0 -> { // zero, same replacement as for split without limit
|
limit == 0 -> { // zero, same replacement as for split without limit
|
||||||
val newCallData = copy(arguments = arrayOf(arguments[0]))
|
val newCallData = copy(arguments = listOf(arguments[0]))
|
||||||
return STRING_SPLIT.convertCall(newCallData)
|
return STRING_SPLIT.convertCall(newCallData)
|
||||||
}
|
}
|
||||||
else -> // positive, same behavior as split(regex, limit) in kotlin
|
else -> // positive, same behavior as split(regex, limit) in kotlin
|
||||||
@@ -298,7 +298,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
= super.matches(method, superMethodsSearcher) && method.parameterList.parameters.last().type.canonicalText == "java.lang.Iterable<? extends java.lang.CharSequence>"
|
= super.matches(method, superMethodsSearcher) && method.parameterList.parameters.last().type.canonicalText == "java.lang.Iterable<? extends java.lang.CharSequence>"
|
||||||
|
|
||||||
override fun ConvertCallData.convertCall(): Expression? {
|
override fun ConvertCallData.convertCall(): Expression? {
|
||||||
val argumentList = ArgumentList.withNoPrototype(codeConverter.convertExpressions(arguments.take(1)))
|
val argumentList = ArgumentList.withNoPrototype(codeConverter.convertExpressionsInList(arguments.take(1)))
|
||||||
return MethodCallExpression.buildNonNull(codeConverter.convertExpression(arguments[1]), "joinToString", argumentList)
|
return MethodCallExpression.buildNonNull(codeConverter.convertExpression(arguments[1]), "joinToString", argumentList)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -313,9 +313,9 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return MethodCallExpression.buildNonNull(
|
return MethodCallExpression.buildNonNull(
|
||||||
MethodCallExpression.buildNonNull(null, "arrayOf", ArgumentList.withNoPrototype(codeConverter.convertExpressions(arguments.drop(1)))).assignNoPrototype(),
|
MethodCallExpression.buildNonNull(null, "arrayOf", ArgumentList.withNoPrototype(codeConverter.convertExpressionsInList(arguments.drop(1)))).assignNoPrototype(),
|
||||||
"joinToString",
|
"joinToString",
|
||||||
ArgumentList.withNoPrototype(codeConverter.convertExpressions (arguments.take(1)))
|
ArgumentList.withNoPrototype(codeConverter.convertExpressionsInList(arguments.take(1)))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -341,13 +341,13 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
|
|
||||||
STRING_REGION_MATCHES(JAVA_LANG_STRING, "regionMatches", 5) {
|
STRING_REGION_MATCHES(JAVA_LANG_STRING, "regionMatches", 5) {
|
||||||
override fun ConvertCallData.convertCall()
|
override fun ConvertCallData.convertCall()
|
||||||
= copy(arguments = arguments.drop(1).toTypedArray()).convertWithIgnoreCaseArgument("regionMatches", ignoreCaseArgument = arguments.first())
|
= copy(arguments = arguments.drop(1)).convertWithIgnoreCaseArgument("regionMatches", ignoreCaseArgument = arguments.first())
|
||||||
},
|
},
|
||||||
|
|
||||||
STRING_GET_BYTES(JAVA_LANG_STRING, "getBytes", null) {
|
STRING_GET_BYTES(JAVA_LANG_STRING, "getBytes", null) {
|
||||||
override fun ConvertCallData.convertCall(): MethodCallExpression {
|
override fun ConvertCallData.convertCall(): MethodCallExpression {
|
||||||
val charsetArg = arguments.lastOrNull()?.check { it.type?.canonicalText == JAVA_LANG_STRING }
|
val charsetArg = arguments.lastOrNull()?.check { it.type?.canonicalText == JAVA_LANG_STRING }
|
||||||
val convertedArguments = codeConverter.convertExpressions(arguments).map {
|
val convertedArguments = codeConverter.convertExpressionsInList(arguments).map {
|
||||||
if (charsetArg != null && it.prototypes?.singleOrNull()?.element == charsetArg)
|
if (charsetArg != null && it.prototypes?.singleOrNull()?.element == charsetArg)
|
||||||
MethodCallExpression.buildNonNull(null, "charset", ArgumentList.withNoPrototype(it)).assignNoPrototype()
|
MethodCallExpression.buildNonNull(null, "charset", ArgumentList.withNoPrototype(it)).assignNoPrototype()
|
||||||
else
|
else
|
||||||
@@ -365,7 +365,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
STRING_GET_CHARS(JAVA_LANG_STRING, "getChars", 4) {
|
STRING_GET_CHARS(JAVA_LANG_STRING, "getChars", 4) {
|
||||||
override fun ConvertCallData.convertCall(): MethodCallExpression {
|
override fun ConvertCallData.convertCall(): MethodCallExpression {
|
||||||
// reorder parameters: srcBegin(0), srcEnd(1), dst(2), dstOffset(3) -> destination(2), destinationOffset(3), startIndex(0), endIndex(1)
|
// reorder parameters: srcBegin(0), srcEnd(1), dst(2), dstOffset(3) -> destination(2), destinationOffset(3), startIndex(0), endIndex(1)
|
||||||
val argumentList = ArgumentList.withNoPrototype(codeConverter.convertExpressions(arguments.slice(listOf(2, 3, 0, 1))))
|
val argumentList = ArgumentList.withNoPrototype(codeConverter.convertExpressionsInList(arguments.slice(listOf(2, 3, 0, 1))))
|
||||||
return MethodCallExpression.buildNonNull(
|
return MethodCallExpression.buildNonNull(
|
||||||
codeConverter.convertExpression(qualifier),
|
codeConverter.convertExpression(qualifier),
|
||||||
"toCharArray",
|
"toCharArray",
|
||||||
@@ -383,7 +383,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun ConvertCallData.convertCall()
|
override fun ConvertCallData.convertCall()
|
||||||
= MethodCallExpression.buildNonNull(null, "String", ArgumentList.withNoPrototype(codeConverter.convertExpressions (arguments)))
|
= MethodCallExpression.buildNonNull(null, "String", ArgumentList.withNoPrototype(codeConverter.convertExpressionsInList(arguments)))
|
||||||
},
|
},
|
||||||
|
|
||||||
STRING_COPY_VALUE_OF_CHAR_ARRAY(JAVA_LANG_STRING, "copyValueOf", null) {
|
STRING_COPY_VALUE_OF_CHAR_ARRAY(JAVA_LANG_STRING, "copyValueOf", null) {
|
||||||
@@ -399,7 +399,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
|
|
||||||
STRING_VALUE_OF(JAVA_LANG_STRING, "valueOf", 1) {
|
STRING_VALUE_OF(JAVA_LANG_STRING, "valueOf", 1) {
|
||||||
override fun ConvertCallData.convertCall()
|
override fun ConvertCallData.convertCall()
|
||||||
= MethodCallExpression.buildNonNull(codeConverter.convertExpression(arguments.single(), true), "toString")
|
= MethodCallExpression.buildNonNull(codeConverter.convertExpression(arguments.single(), shouldParenthesize = true), "toString")
|
||||||
},
|
},
|
||||||
|
|
||||||
SYSTEM_OUT_PRINTLN(PrintStream::class.java.name, "println", null) {
|
SYSTEM_OUT_PRINTLN(PrintStream::class.java.name, "println", null) {
|
||||||
@@ -426,7 +426,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
|
|
||||||
data class ConvertCallData(
|
data class ConvertCallData(
|
||||||
val qualifier: PsiExpression?,
|
val qualifier: PsiExpression?,
|
||||||
@Suppress("ArrayInDataClass") val arguments: Array<PsiExpression>,
|
@Suppress("ArrayInDataClass") val arguments: List<PsiExpression>,
|
||||||
val typeArgumentsConverted: List<Type>,
|
val typeArgumentsConverted: List<Type>,
|
||||||
val dot: PsiElement?,
|
val dot: PsiElement?,
|
||||||
val lPar: PsiElement?,
|
val lPar: PsiElement?,
|
||||||
@@ -464,7 +464,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun ConvertCallData.convertWithReceiverCast(): MethodCallExpression? {
|
protected fun ConvertCallData.convertWithReceiverCast(): MethodCallExpression? {
|
||||||
val convertedArguments = arguments.map { codeConverter.convertExpression(it) }
|
val convertedArguments = codeConverter.convertExpressionsInList(arguments)
|
||||||
val qualifierWithCast = castQualifierToType(codeConverter, qualifier!!, qualifiedClassName!!) ?: return null
|
val qualifierWithCast = castQualifierToType(codeConverter, qualifier!!, qualifiedClassName!!) ?: return null
|
||||||
return MethodCallExpression.buildNonNull(
|
return MethodCallExpression.buildNonNull(
|
||||||
qualifierWithCast,
|
qualifierWithCast,
|
||||||
@@ -506,7 +506,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
if (qualifier.referenceName != "out") return null
|
if (qualifier.referenceName != "out") return null
|
||||||
if (typeArgumentsConverted.isNotEmpty()) return null
|
if (typeArgumentsConverted.isNotEmpty()) return null
|
||||||
val argumentList = ArgumentList(
|
val argumentList = ArgumentList(
|
||||||
arguments.map { codeConverter.convertExpression(it).assignPrototype(it, CommentsAndSpacesInheritance.LINE_BREAKS) },
|
codeConverter.convertExpressionsInList(arguments),
|
||||||
LPar.withPrototype(lPar),
|
LPar.withPrototype(lPar),
|
||||||
RPar.withPrototype(rPar)
|
RPar.withPrototype(rPar)
|
||||||
).assignNoPrototype()
|
).assignNoPrototype()
|
||||||
@@ -514,7 +514,7 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun CodeConverter.convertToRegex(expression: PsiExpression?): Expression
|
protected fun CodeConverter.convertToRegex(expression: PsiExpression?): Expression
|
||||||
= MethodCallExpression.buildNonNull(convertExpression(expression, true), "toRegex").assignNoPrototype()
|
= MethodCallExpression.buildNonNull(convertExpression(expression, shouldParenthesize = true), "toRegex").assignNoPrototype()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val valuesByName = values().groupBy { it.methodName }
|
private val valuesByName = values().groupBy { it.methodName }
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class DefaultStatementConverter : JavaElementVisitor(), StatementConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitExpressionListStatement(statement: PsiExpressionListStatement) {
|
override fun visitExpressionListStatement(statement: PsiExpressionListStatement) {
|
||||||
result = ExpressionListStatement(codeConverter.convertExpressions(statement.expressionList.expressions))
|
result = ExpressionListStatement(codeConverter.convertExpressionsInList(statement.expressionList.expressions.asList()))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitForStatement(statement: PsiForStatement) {
|
override fun visitForStatement(statement: PsiForStatement) {
|
||||||
|
|||||||
Reference in New Issue
Block a user