From d772076ca54b756356c2fbb196f45a29e73f12a4 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 20 Jan 2010 21:23:00 +0300 Subject: [PATCH] change signature: close propagate params/exceptions on cancel (IDEA-46683) --- .../changeSignature/inCallers/CallerChooser.java | 9 +++++++-- .../changeSignature/inCallers/MethodNode.java | 13 +++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/CallerChooser.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/CallerChooser.java index a7a04e18564a..885a750a2cd5 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/CallerChooser.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/CallerChooser.java @@ -196,8 +196,13 @@ public abstract class CallerChooser extends DialogWrapper { } private Tree createTree() { - final CheckedTreeNode root = new MethodNode(null, new HashSet()); - myRoot = new MethodNode(myMethod, new HashSet()); + final Runnable cancelCallback = new Runnable() { + public void run() { + close(CANCEL_EXIT_CODE); + } + }; + final CheckedTreeNode root = new MethodNode(null, new HashSet(), cancelCallback); + myRoot = new MethodNode(myMethod, new HashSet(), cancelCallback); root.add(myRoot); final CheckboxTree.CheckboxTreeCellRenderer cellRenderer = new CheckboxTree.CheckboxTreeCellRenderer(true, false) { public void customizeCellRenderer(JTree tree, diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/MethodNode.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/MethodNode.java index 47ad7af7c44c..73944c0d5ee7 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/MethodNode.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/inCallers/MethodNode.java @@ -42,12 +42,14 @@ import java.util.List; public class MethodNode extends CheckedTreeNode { private final PsiMethod myMethod; private final Set myCalled; + private final Runnable myCancelCallback; private boolean myOldChecked; - public MethodNode(final PsiMethod method, Set called) { + public MethodNode(final PsiMethod method, Set called, Runnable cancelCallback) { super(method); myMethod = method; myCalled = called; + myCancelCallback = cancelCallback; isChecked = false; } @@ -63,7 +65,7 @@ public class MethodNode extends CheckedTreeNode { for (PsiMethod caller : callers) { final HashSet called = new HashSet(myCalled); called.add(myMethod); - final MethodNode child = new MethodNode(caller, called); + final MethodNode child = new MethodNode(caller, called, myCancelCallback); children.add(child); child.parent = this; } @@ -89,7 +91,7 @@ public class MethodNode extends CheckedTreeNode { if (myMethod == null) return PsiMethod.EMPTY_ARRAY; final Project project = myMethod.getProject(); final List callers = new ArrayList(); - ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { public void run() { final PsiReference[] refs = MethodReferencesSearch.search(myMethod, GlobalSearchScope.allScope(project), true).toArray(PsiReference.EMPTY_ARRAY); @@ -105,7 +107,10 @@ public class MethodNode extends CheckedTreeNode { } } } - }, RefactoringBundle.message("caller.chooser.looking.for.callers"), false, project); + }, RefactoringBundle.message("caller.chooser.looking.for.callers"), true, project)) { + myCancelCallback.run(); + return PsiMethod.EMPTY_ARRAY; + } return callers.toArray(new PsiMethod[callers.size()]); }