From 4866aa1f8961bbf48ef33c0905a81556517cc84d Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 10 Aug 2016 17:13:21 +0200 Subject: [PATCH] inline method: avoid dbl substitution of return/param types --- .../inline/InlineMethodProcessor.java | 6 +++--- ...oidMultipleSubstitutionInParameterTypes.java | 17 +++++++++++++++++ ...tipleSubstitutionInParameterTypes.java.after | 13 +++++++++++++ .../refactoring/inline/InlineMethodTest.java | 4 ++++ 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java create mode 100644 java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index 0fbaffc62b69..a9145b3bf604 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -634,9 +634,6 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { PsiSubstitutor callSubstitutor = getCallSubstitutor(methodCall); BlockData blockData = prepareBlock(ref, callSubstitutor, methodCall.getArgumentList(), tailCall); InlineUtil.solveVariableNameConflicts(blockData.block, ref, myMethodCopy.getBody()); - if (callSubstitutor != PsiSubstitutor.EMPTY) { - substituteMethodTypeParams(blockData.block, callSubstitutor); - } addParmAndThisVarInitializers(blockData, methodCall); PsiElement anchor = RefactoringUtil.getParentStatement(methodCall, true); @@ -801,6 +798,9 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { final InlineUtil.TailCallType tailCallType) throws IncorrectOperationException { final PsiCodeBlock block = myMethodCopy.getBody(); + if (callSubstitutor != PsiSubstitutor.EMPTY) { + substituteMethodTypeParams(block, callSubstitutor); + } final PsiStatement[] originalStatements = block.getStatements(); PsiLocalVariable resultVar = null; diff --git a/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java b/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java new file mode 100644 index 000000000000..1e4a03c51705 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java @@ -0,0 +1,17 @@ + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; + +class A { + void bar(List root, LinkedHashSet> list) { + addIfNotNull(root, list); + } + + private static void addIfNotNull(T element, Collection result) { + nested(result, element); + } + + + private static void nested(Collection result, S element) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java.after b/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java.after new file mode 100644 index 000000000000..77aaebdfeadd --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/AvoidMultipleSubstitutionInParameterTypes.java.after @@ -0,0 +1,13 @@ + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; + +class A { + void bar(List root, LinkedHashSet> list) { + nested(list, root); + } + + + private static void nested(Collection result, S element) {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java index 459dcfd60bb2..df3615612573 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -330,6 +330,10 @@ public class InlineMethodTest extends LightRefactoringTestCase { doTest(); } + public void testAvoidMultipleSubstitutionInParameterTypes() throws Exception { + doTest(); + } + private void doTestInlineThisOnly() { @NonNls String fileName = "/refactoring/inlineMethod/" + getTestName(false) + ".java"; configureByFile(fileName);