ReplaceJavaStaticMethodWithKotlinAnalogInspection: add CommentSaver for case with transform to extension

This commit is contained in:
Dmitry Gridin
2019-07-10 12:11:11 +03:00
parent 56d2961cd9
commit beba1d82fc
12 changed files with 105 additions and 1 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.inspections.jdk2k
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.util.CommentSaver
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtCallExpression
@@ -45,9 +46,15 @@ object ToExtensionFunctionWithNonNullableReceiver : Transformation {
?.run { if (this is KtOperationExpression) "($text)" else text }
?: valueArguments.first().text
val argumentsText = valueArguments.drop(1).joinToString(separator = ", ") { it.text }
callExpression.getQualifiedExpressionForSelectorOrThis().replaced(
val oldExpression = callExpression.getQualifiedExpressionForSelectorOrThis()
val commentSaver = CommentSaver(oldExpression)
val replaced = oldExpression.replaced(
psiFactory.createExpression("$receiverText.${replacement.kotlinFunctionShortName}$typeArguments($argumentsText)")
)
commentSaver.restore(replaced)
file.resolveImportReference(FqName(replacement.kotlinFunctionFqName)).firstOrNull()?.let {
ImportInsertHelper.getInstance(callExpression.project).importDescriptor(file, it)
}
@@ -0,0 +1,8 @@
// WITH_RUNTIME
import java.util.Arrays
fun test() {
val a = arrayOf(1, 2, 3)
val b = arrayOf(1, 2, 3)
/* comment */Arrays.<caret>equals(a, /* comment2 */b)
}
@@ -0,0 +1,8 @@
// WITH_RUNTIME
import java.util.Arrays
fun test() {
val a = arrayOf(1, 2, 3)
val b = arrayOf(1, 2, 3)
/* comment *//* comment2 */a.contentEquals(b)
}
@@ -0,0 +1,9 @@
// WITH_RUNTIME
import java.util.Arrays
fun test() {
val a = arrayOf(1, 2, 3)
val b = arrayOf(1, 2, 3)
// comment
Arrays.<caret>equals(a, b) //comment2
}
@@ -0,0 +1,9 @@
// WITH_RUNTIME
import java.util.Arrays
fun test() {
val a = arrayOf(1, 2, 3)
val b = arrayOf(1, 2, 3)
// comment
a.contentEquals(b) //comment2
}
@@ -0,0 +1,6 @@
// WITH_RUNTIME
import java.lang.Math.abs
fun x() {
/*dd*/<caret>abs(5/*s*/)
}
@@ -0,0 +1,6 @@
// WITH_RUNTIME
import java.lang.Math.abs
fun x() {
/*dd*/kotlin.math.abs(5/*s*/)
}
@@ -0,0 +1,7 @@
// WITH_RUNTIME
import java.lang.Math.abs
fun x() {
// comment
<caret>abs(5)
}
@@ -0,0 +1,7 @@
// WITH_RUNTIME
import java.lang.Math.abs
fun x() {
// comment
kotlin.math.abs(5)
}
@@ -0,0 +1,5 @@
// WITH_RUNTIME
fun x() {
// comment
Math.<caret>abs(5)
}
@@ -0,0 +1,7 @@
import kotlin.math.abs
// WITH_RUNTIME
fun x() {
// comment
abs(5)
}
@@ -9101,6 +9101,16 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equals2.kt");
}
@TestMetadata("equalsWithBlockComment.kt")
public void testEqualsWithBlockComment() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithBlockComment.kt");
}
@TestMetadata("equalsWithEOLComment.kt")
public void testEqualsWithEOLComment() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithEOLComment.kt");
}
@TestMetadata("equalsWithNullOther.kt")
public void testEqualsWithNullOther() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithNullOther.kt");
@@ -9291,6 +9301,21 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/math/abs4.kt");
}
@TestMetadata("absWithBlockComment.kt")
public void testAbsWithBlockComment() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/math/absWithBlockComment.kt");
}
@TestMetadata("absWithEOLComment.kt")
public void testAbsWithEOLComment() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/math/absWithEOLComment.kt");
}
@TestMetadata("absWithEOLComment2.kt")
public void testAbsWithEOLComment2() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/math/absWithEOLComment2.kt");
}
@TestMetadata("acos.kt")
public void testAcos() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/math/acos.kt");