From be5e054e6a2872e5776769418ccf5bef9c03fcab Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 18 Mar 2015 16:03:12 +0100 Subject: [PATCH] extract method params suggester: cleanup initial params if they are not used anymore --- .../ExtractMethodSignatureSuggester.java | 21 ++++++++++++++++++- ...SignatureInitialParameterUnused_after.java | 6 +++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java index 4f26f3279a31..5d2fa678f5f3 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java @@ -33,6 +33,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.search.LocalSearchScope; +import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.introduceParameter.Util; @@ -149,11 +150,11 @@ public class ExtractMethodSignatureSuggester { if (duplicates != null && !duplicates.isEmpty()) { restoreRenamedParams(copies); - inlineSameArguments(method, copies, variables, duplicates); if (!myMethodCall.isValid()) { return null; } myMethodCall = (PsiMethodCallExpression)myMethodCall.copy(); + inlineSameArguments(method, copies, variables, duplicates); for (PsiExpression expression : copies) { myMethodCall.getArgumentList().add(expression); } @@ -188,6 +189,24 @@ public class ExtractMethodSignatureSuggester { inlineArgumentsInMethodBody(toInline); removeRedundantParametersFromMethodSignature(toInline); } + + removeUnusedStongParams(strongParamsCound); + } + + private void removeUnusedStongParams(int strongParamsCound) { + final PsiExpression[] expressions = myMethodCall.getArgumentList().getExpressions(); + final PsiParameter[] parameters = myExtractedMethod.getParameterList().getParameters(); + final PsiCodeBlock body = myExtractedMethod.getBody(); + if (body != null) { + final LocalSearchScope scope = new LocalSearchScope(body); + for(int i = strongParamsCound - 1; i >= 0; i--) { + final PsiParameter parameter = parameters[i]; + if (ReferencesSearch.search(parameter, scope).findFirst() == null) { + parameter.delete(); + expressions[i].delete(); + } + } + } } private void removeRedundantParametersFromMethodSignature(Map param2ExprMap) { diff --git a/java/java-tests/testData/refactoring/extractMethod/SuggestChangeSignatureInitialParameterUnused_after.java b/java/java-tests/testData/refactoring/extractMethod/SuggestChangeSignatureInitialParameterUnused_after.java index 099717d84291..2da1ee947c89 100644 --- a/java/java-tests/testData/refactoring/extractMethod/SuggestChangeSignatureInitialParameterUnused_after.java +++ b/java/java-tests/testData/refactoring/extractMethod/SuggestChangeSignatureInitialParameterUnused_after.java @@ -2,12 +2,12 @@ public class Test { { int x = 0; - newMethod(x, "foo".substring(x)); + newMethod("foo".substring(x)); - newMethod(x, "bar".substring(x)); + newMethod("bar".substring(x)); } - private void newMethod(int x, String substring) { + private void newMethod(String substring) { System.out.println(substring); } } \ No newline at end of file