Commit 0d9fc78b authored by Anna Kozlova's avatar Anna Kozlova
Browse files

deep delete parameter: disable for recursive calls

parent 828ab444
Showing with 13 additions and 5 deletions
+13 -5
...@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Ref; ...@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.changeSignature.MethodNodeBase; import com.intellij.refactoring.changeSignature.MethodNodeBase;
import com.intellij.refactoring.changeSignature.inCallers.JavaCallerChooser; import com.intellij.refactoring.changeSignature.inCallers.JavaCallerChooser;
...@@ -110,6 +111,7 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser { ...@@ -110,6 +111,7 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser {
if (resolve instanceof PsiParameter && !((PsiParameter)resolve).isVarArgs()) { if (resolve instanceof PsiParameter && !((PsiParameter)resolve).isVarArgs()) {
final PsiElement scope = ((PsiParameter)resolve).getDeclarationScope(); final PsiElement scope = ((PsiParameter)resolve).getDeclarationScope();
if (scope instanceof PsiMethod) { if (scope instanceof PsiMethod) {
final Ref<Boolean> ref = new Ref<Boolean>(false);
if (ReferencesSearch.search(resolve, new LocalSearchScope(scope)).forEach(new Processor<PsiReference>() { if (ReferencesSearch.search(resolve, new LocalSearchScope(scope)).forEach(new Processor<PsiReference>() {
@Override @Override
public boolean process(PsiReference reference) { public boolean process(PsiReference reference) {
...@@ -118,15 +120,21 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser { ...@@ -118,15 +120,21 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser {
final PsiElement parent = element.getParent(); final PsiElement parent = element.getParent();
if (parent instanceof PsiExpressionList) { if (parent instanceof PsiExpressionList) {
final PsiElement gParent = parent.getParent(); final PsiElement gParent = parent.getParent();
if (gParent instanceof PsiCallExpression && if (gParent instanceof PsiCallExpression) {
nodeMethod.equals(((PsiCallExpression)gParent).resolveMethod())) { final PsiMethod resolved = ((PsiCallExpression)gParent).resolveMethod();
return true; if (scope.equals(resolved)) {
return true;
}
if (nodeMethod.equals(resolved)) {
ref.set(true);
return true;
}
} }
} }
} }
return false; return false;
} }
})) { }) && ref.get()) {
return (PsiParameter)resolve; return (PsiParameter)resolve;
} }
} }
...@@ -163,7 +171,7 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser { ...@@ -163,7 +171,7 @@ class SafeDeleteJavaCallerChooser extends JavaCallerChooser {
return new Condition<PsiMethod>() { return new Condition<PsiMethod>() {
@Override @Override
public boolean value(PsiMethod method) { public boolean value(PsiMethod method) {
return getParameter(method) != null; return !myCurrentMethod.equals(method) && getParameter(method) != null;
} }
}; };
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment