From 07e908f15fde945609eb23407170f2e19dd2c772 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 7 May 2019 16:08:15 +0700 Subject: [PATCH] Fix incorrect quickfix "Replace with Kotlin analog" for conversion to an extension where the first argument is an expression with an operation #KT-31341 Fixed --- .../ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt | 4 +++- .../toString/toExtension.kt | 5 +++++ .../toString/toExtension.kt.after | 5 +++++ .../idea/inspections/LocalInspectionTestGenerated.java | 5 +++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt create mode 100644 idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt index 97ec8221dcc..f2b07171b32 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt @@ -65,7 +65,9 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti val valueArguments = call.valueArguments val typeArguments = call.typeArgumentList?.text ?: "" if (replacement.toExtensionFunction) { - val receiverText = valueArguments.first().text + val receiverText = valueArguments.first().getArgumentExpression() + ?.run { if (this is KtOperationExpression) "($text)" else text } + ?: valueArguments.first().text val argumentsText = valueArguments.drop(1).joinToString(separator = ", ") { it.text } dotQualified.replaced(psiFactory.createExpression("$receiverText.${replacement.kotlinFunctionShortName}$typeArguments($argumentsText)")) file.resolveImportReference(FqName(replacement.kotlinFunctionFqName)).firstOrNull()?.let { diff --git a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt new file mode 100644 index 00000000000..984c3b47b64 --- /dev/null +++ b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME + +fun foo() { + Integer.toString(42 + 24, 16) +} diff --git a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt.after b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt.after new file mode 100644 index 00000000000..94cc3db4459 --- /dev/null +++ b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt.after @@ -0,0 +1,5 @@ +// WITH_RUNTIME + +fun foo() { + (42 + 24).toString(16) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index ab947762ffc..1997ca2405a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -7661,6 +7661,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { public void testShortToString() throws Exception { runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/shortToString.kt"); } + + @TestMetadata("toExtension.kt") + public void testToExtension() throws Exception { + runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/toString/toExtension.kt"); + } } }