From 9dc4e46e9f0cddccaf7396917599ea766b82622d Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Tue, 30 Jun 2020 14:58:19 +0300 Subject: [PATCH] Change signature does not make doubled refactoring for java usages Fixed #KT-22170 Original commit: 4707f4fc3fc02b8acaa5bde4239701a1119bd5f5 GitOrigin-RevId: fcee7acaef25b53b27a8078c7a7ec3ab440f014f --- .../changeSignature/KotlinChangeSignatureProcessor.kt | 6 +++++- .../changeSignature/KotlinChangeSignatureTest.kt | 8 ++++++++ .../JavaMethodJvmStaticKotlinUsagesAfter.1.kt | 6 ++++++ .../JavaMethodJvmStaticKotlinUsagesAfter.java | 6 ++++++ .../JavaMethodJvmStaticKotlinUsagesBefore.1.kt | 6 ++++++ .../JavaMethodJvmStaticKotlinUsagesBefore.java | 6 ++++++ 6 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.java diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureProcessor.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureProcessor.kt index 67ef5fe2d67f..979ac96de30a 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureProcessor.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureProcessor.kt @@ -76,10 +76,14 @@ class KotlinChangeSignatureProcessor( override fun findUsages(): Array { val allUsages = ArrayList() + val javaUsages = mutableSetOf() ktChangeInfo.getOrCreateJavaChangeInfos()?.let { javaChangeInfos -> val javaProcessor = JavaChangeSignatureUsageProcessor() javaChangeInfos.mapTo(allUsages) { - KotlinWrapperForJavaUsageInfos(it, javaProcessor.findUsages(it), changeInfo.method) + val javaUsagesForKtChange = javaProcessor.findUsages(it) + val uniqueJavaUsagesForKtChange = javaUsagesForKtChange.filterNot { javaUsages.contains(it) } + javaUsages.addAll(javaUsagesForKtChange) + KotlinWrapperForJavaUsageInfos(it, uniqueJavaUsagesForKtChange.toTypedArray(), changeInfo.method) } } super.findUsages().filterTo(allUsages) { it is KotlinUsageInfo<*> || it is UnresolvableCollisionUsageInfo } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt index c27f69901b9d..c48357010288 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt @@ -564,6 +564,14 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() { } } + fun testJavaMethodJvmStaticKotlinUsages() { + doJavaTest { + val first = newParameters[1] + newParameters[1] = newParameters[0] + newParameters[0] = first + } + } + fun testJavaConstructorKotlinUsages() { doJavaTest { newParameters.removeAt(1) } } diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.1.kt new file mode 100644 index 000000000000..24234df90a91 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.1.kt @@ -0,0 +1,6 @@ +class Test { + companion object { + @JvmStatic + fun fooStatic(second: Int, first: String) { } + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.java new file mode 100644 index 000000000000..8a15a74de0ef --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesAfter.java @@ -0,0 +1,6 @@ +public class JavaTest { + public static void test() { + Test.Companion.fooStatic(2, "First"); + Test.fooStatic(2, "First"); + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.1.kt new file mode 100644 index 000000000000..4cba15004f7f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.1.kt @@ -0,0 +1,6 @@ +class Test { + companion object { + @JvmStatic + fun fooStatic(first: String, second: Int) { } + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.java new file mode 100644 index 000000000000..359d0b951be3 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/JavaMethodJvmStaticKotlinUsagesBefore.java @@ -0,0 +1,6 @@ +public class JavaTest { + public static void test() { + Test.Companion.fooStatic("First", 2); + Test.fooStatic("First", 2); + } +} \ No newline at end of file