J2K: Special conversion for java.lang.String.replaceAll.

#KT-7732
This commit is contained in:
Ilya Gorbunov
2015-10-02 23:37:40 +03:00
parent 36f854e421
commit ca18613049
2 changed files with 13 additions and 1 deletions
@@ -71,6 +71,15 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
= MethodCallExpression.build(null, "setOf", listOf(codeConverter.convertExpression(arguments.single())), typeArgumentsConverted, false) = MethodCallExpression.build(null, "setOf", listOf(codeConverter.convertExpression(arguments.single())), typeArgumentsConverted, false)
}, },
STRING_REPLACE_ALL("java.lang.String", "replaceAll", 2) {
override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, typeArgumentsConverted: List<Type>, codeConverter: CodeConverter)
= MethodCallExpression.build(codeConverter.convertExpression(qualifier), "replace",
listOf(
codeConverter.convertToRegex(arguments[0]),
codeConverter.convertExpression(arguments[1])
), emptyList(), false)
},
SYSTEM_OUT_PRINTLN("java.io.PrintStream", "println", null) { SYSTEM_OUT_PRINTLN("java.io.PrintStream", "println", null) {
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)
= convertSystemOutMethodCall(methodName, qualifier, arguments, typeArgumentsConverted, codeConverter) = convertSystemOutMethodCall(methodName, qualifier, arguments, typeArgumentsConverted, codeConverter)
@@ -104,3 +113,6 @@ private fun convertSystemOutMethodCall(
if (typeArgumentsConverted.isNotEmpty()) return null if (typeArgumentsConverted.isNotEmpty()) return null
return MethodCallExpression.build(null, methodName, arguments.map { codeConverter.convertExpression(it) }, emptyList(), false) return MethodCallExpression.build(null, methodName, arguments.map { codeConverter.convertExpression(it) }, emptyList(), false)
} }
private fun CodeConverter.convertToRegex(expression: PsiExpression?): Expression
= MethodCallExpression.build(convertExpression(expression), "toRegex", emptyList(), emptyList(), false).assignNoPrototype()
@@ -3,7 +3,7 @@ package demo
internal class Test { internal class Test {
fun test() { fun test() {
var name = "$$$$" var name = "$$$$"
name = name.replaceAll("\\$[0-9]+", "\\$") name = name.replace("\\$[0-9]+".toRegex(), "\\$")
val c = '$' val c = '$'
println(c) println(c)