From e1e48eb1e80337f20fa7d0cbeccfb13e62b37437 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 7 Apr 2015 17:41:10 +0200 Subject: [PATCH] replace duplicates: process chained constructors (IDEA-138745) --- .../duplicates/MethodDuplicatesMatchProvider.java | 3 ++- .../afterCodeDuplicatesFromConstructor.java | 13 +++++++++++++ .../beforeCodeDuplicatesFromConstructor.java | 14 ++++++++++++++ .../refactoring/IntroduceParameterTest.java | 6 ++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/introduceParameter/afterCodeDuplicatesFromConstructor.java create mode 100644 java/java-tests/testData/refactoring/introduceParameter/beforeCodeDuplicatesFromConstructor.java diff --git a/java/java-impl/src/com/intellij/refactoring/util/duplicates/MethodDuplicatesMatchProvider.java b/java/java-impl/src/com/intellij/refactoring/util/duplicates/MethodDuplicatesMatchProvider.java index f7b06702bce0..abe13aa01317 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/duplicates/MethodDuplicatesMatchProvider.java +++ b/java/java-impl/src/com/intellij/refactoring/util/duplicates/MethodDuplicatesMatchProvider.java @@ -58,8 +58,9 @@ class MethodDuplicatesMatchProvider implements MatchProvider { final boolean needQualifier = match.getInstanceExpression() != null; final boolean needStaticQualifier = isExternal(match); final boolean nameConflicts = nameConflicts(match); + final String methodName = myMethod.isConstructor() ? "this" : myMethod.getName(); @NonNls final String text = needQualifier || needStaticQualifier || nameConflicts - ? "q." + myMethod.getName() + "()": myMethod.getName() + "()"; + ? "q." + methodName + "()": methodName + "()"; PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)factory.createExpressionFromText(text, null); methodCallExpression = (PsiMethodCallExpression)CodeStyleManager.getInstance(myMethod.getManager()).reformat(methodCallExpression); final PsiParameter[] parameters = myMethod.getParameterList().getParameters(); diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterCodeDuplicatesFromConstructor.java b/java/java-tests/testData/refactoring/introduceParameter/afterCodeDuplicatesFromConstructor.java new file mode 100644 index 000000000000..99ce3bf30912 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/afterCodeDuplicatesFromConstructor.java @@ -0,0 +1,13 @@ +class A { + public A(String a) { + } +} + +class B extends A { + public B(String a) { + this(a, null); + } + public B(String a, final String anObject) { + super(a); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeCodeDuplicatesFromConstructor.java b/java/java-tests/testData/refactoring/introduceParameter/beforeCodeDuplicatesFromConstructor.java new file mode 100644 index 000000000000..0cd146ef0ab7 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/beforeCodeDuplicatesFromConstructor.java @@ -0,0 +1,14 @@ +class A { + public A(String a) { + } +} + +class B extends A { + public B(String a) { + super(a); + } + public B(String a) { + super(a); + String b = "b"; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java index 7c2509fa5cba..b7cd53fb3fd7 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java @@ -341,6 +341,12 @@ public class IntroduceParameterTest extends LightRefactoringTestCase { checkResultByFile("/refactoring/introduceParameter/after" + getTestName(false) + ".java"); } + public void testCodeDuplicatesFromConstructor() { + configureByFile("/refactoring/introduceParameter/before" + getTestName(false) + ".java"); + perform(true, 0, "anObject", false, true, true, false, 0, true); + checkResultByFile("/refactoring/introduceParameter/after" + getTestName(false) + ".java"); + } + public void testTypeAnnotation() { doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, false, false, false); }