J2K: Special conversion for java.lang.String methods: more accurate parameter count matching for String.format

#KT-7732
This commit is contained in:
Ilya Gorbunov
2015-10-06 20:29:58 +03:00
parent 77a46cab92
commit 5914625b53
@@ -157,15 +157,20 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
STRING_FORMAT_WITH_LOCALE(JAVA_LANG_STRING, "format", null) { STRING_FORMAT_WITH_LOCALE(JAVA_LANG_STRING, "format", null) {
override fun matches(method: PsiMethod) override fun matches(method: PsiMethod)
= super.matches(method) && method.parameterList.parametersCount >= 2 && method.parameterList.parameters.first().type.canonicalText == "java.util.Locale" = super.matches(method) &&
method.parameterList.parametersCount == 3 &&
method.parameterList.parameters.let { it.first().type.canonicalText == "java.util.Locale" && it.last().isVarArgs }
override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, typeArgumentsConverted: List<Type>, codeConverter: CodeConverter) override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, typeArgumentsConverted: List<Type>, codeConverter: CodeConverter)
= MethodCallExpression.build(codeConverter.convertExpression(arguments[1]), "format", codeConverter.convertExpressions(listOf(arguments[0]) + arguments.drop(2)), emptyList(), false) = MethodCallExpression.build(codeConverter.convertExpression(arguments[1]), "format", codeConverter.convertExpressions(listOf(arguments[0]) + arguments.drop(2)), emptyList(), false)
}, },
STRING_FORMAT(JAVA_LANG_STRING, "format", null) { STRING_FORMAT(JAVA_LANG_STRING, "format", null) {
override fun matches(method: PsiMethod) override fun matches(method: PsiMethod): Boolean {
= super.matches(method) && method.parameterList.parametersCount >= 1 return super.matches(method) &&
method.parameterList.parametersCount == 2 &&
method.parameterList.parameters.last().isVarArgs
}
override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, typeArgumentsConverted: List<Type>, codeConverter: CodeConverter) override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, typeArgumentsConverted: List<Type>, codeConverter: CodeConverter)
= MethodCallExpression.build(codeConverter.convertExpression(arguments.first()), "format", codeConverter.convertExpressions(arguments.drop(1)), emptyList(), false) = MethodCallExpression.build(codeConverter.convertExpression(arguments.first()), "format", codeConverter.convertExpressions(arguments.drop(1)), emptyList(), false)