From aa0930ea600708a474847499c1403da4f305bd44 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 14 Apr 2015 17:54:29 +0300 Subject: [PATCH] Change Signature: Skip secondary constructor calls when looking for primary constructor usages #KT-7445 Fixed --- .../JetChangeSignatureUsageProcessor.java | 2 ++ ...oNotApplyPrimarySignatureToSecondaryCallsAfter.1.java | 6 ++++++ .../DoNotApplyPrimarySignatureToSecondaryCallsAfter.kt | 8 ++++++++ ...NotApplyPrimarySignatureToSecondaryCallsBefore.1.java | 6 ++++++ .../DoNotApplyPrimarySignatureToSecondaryCallsBefore.kt | 8 ++++++++ .../changeSignature/JetChangeSignatureTest.java | 9 ++++++++- 6 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.1.java create mode 100644 idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.1.java create mode 100644 idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java index 6613cfe6141..894eda3cb08 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java @@ -114,6 +114,8 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro for (PsiReference reference : ReferencesSearch.search(functionPsi, functionPsi.getUseScope())) { PsiElement element = reference.getElement(); + if (functionPsi instanceof JetClass && reference.resolve() != functionPsi) continue; + if (element instanceof JetReferenceExpression) { PsiElement parent = element.getParent(); diff --git a/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.1.java b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.1.java new file mode 100644 index 00000000000..b7adeb42e3b --- /dev/null +++ b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.1.java @@ -0,0 +1,6 @@ +class Test { + void test() { + new C(""); + new C("2", "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.kt b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.kt new file mode 100644 index 00000000000..18c098ad91c --- /dev/null +++ b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsAfter.kt @@ -0,0 +1,8 @@ +class C(p2: String, p1: String) { + public constructor(p: String) : this(p, p) {} +} + +fun foo() { + C("") + C("2", "1") +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.1.java b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.1.java new file mode 100644 index 00000000000..cf3abac15a8 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.1.java @@ -0,0 +1,6 @@ +class Test { + void test() { + new C(""); + new C("1", "2"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.kt b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.kt new file mode 100644 index 00000000000..98e0c5056a0 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/DoNotApplyPrimarySignatureToSecondaryCallsBefore.kt @@ -0,0 +1,8 @@ +class C(p1: String, p2: String) { + public constructor(p: String) : this(p, p) {} +} + +fun foo() { + C("") + C("1", "2") +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java index 00902d64a65..7b98160650f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -49,7 +49,6 @@ import java.io.File; import java.util.*; import static org.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignaturePackage.getChangeSignatureDialog; -import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory; public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { public void testBadSelection() throws Exception { @@ -841,6 +840,14 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testDoNotApplyPrimarySignatureToSecondaryCalls() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + JetParameterInfo[] newParameters = changeInfo.getNewParameters(); + changeInfo.setNewParameter(0, newParameters[1]); + changeInfo.setNewParameter(1, newParameters[0]); + doTest(changeInfo); + } + @NotNull @Override protected String getTestDataPath() {