From 52e77034d241f186d8ff8de4f8589fb089374802 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 15 Dec 2011 18:03:31 +0100 Subject: [PATCH] inline: show number of usages to be inlined when possible (IDEA-73024 ) --- .../refactoring/inline/InlineFieldDialog.java | 8 +++++--- .../inline/InlineMethodDialog.java | 19 ++----------------- .../inline/InlineOptionsDialog.java | 17 ++++++++++++++++- .../rename/inplace/MemberInplaceRenamer.java | 3 +++ .../inplace/VariableInplaceRenamer.java | 8 ++++++++ 5 files changed, 34 insertions(+), 21 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineFieldDialog.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineFieldDialog.java index 4dbbfedebb87..602460f923e5 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineFieldDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineFieldDialog.java @@ -22,14 +22,15 @@ import com.intellij.psi.PsiReferenceExpression; import com.intellij.psi.PsiSubstitutor; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.JavaRefactoringSettings; +import com.intellij.refactoring.RefactoringBundle; public class InlineFieldDialog extends InlineOptionsDialog { public static final String REFACTORING_NAME = RefactoringBundle.message("inline.field.title"); private final PsiReferenceExpression myReferenceExpression; private final PsiField myField; + protected final int myOccurrencesNumber; public InlineFieldDialog(Project project, PsiField field, PsiReferenceExpression ref) { super(project, true, field); @@ -38,7 +39,7 @@ public class InlineFieldDialog extends InlineOptionsDialog { myInvokedOnReference = myReferenceExpression != null; setTitle(REFACTORING_NAME); - + myOccurrencesNumber = initOccurrencesNumber(myField); init(); } @@ -56,7 +57,8 @@ public class InlineFieldDialog extends InlineOptionsDialog { } protected String getInlineAllText() { - return RefactoringBundle.message("all.references.and.remove.the.field"); + final String occurrencesString = myOccurrencesNumber > -1 ? " (" + myOccurrencesNumber + " occurrence" + (myOccurrencesNumber == 1 ? ")" : "s)") : ""; + return RefactoringBundle.message("all.references.and.remove.the.field") + occurrencesString; } protected boolean isInlineThis() { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodDialog.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodDialog.java index 27659f109f87..d93e87f84ac3 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodDialog.java @@ -17,18 +17,14 @@ package com.intellij.refactoring.inline; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.help.HelpManager; -import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiSubstitutor; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.PsiSearchHelper; -import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.JavaRefactoringSettings; +import com.intellij.refactoring.RefactoringBundle; public class InlineMethodDialog extends InlineOptionsDialog { public static final String REFACTORING_NAME = RefactoringBundle.message("inline.method.title"); @@ -50,21 +46,10 @@ public class InlineMethodDialog extends InlineOptionsDialog { myInvokedOnReference = ref != null; setTitle(REFACTORING_NAME); - initOccurrencesNumber(method); + myOccurrencesNumber = initOccurrencesNumber(method); init(); } - private void initOccurrencesNumber(PsiMethod method) { - final ProgressManager progressManager = ProgressManager.getInstance(); - final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(method.getProject()); - final GlobalSearchScope scope = GlobalSearchScope.projectScope(method.getProject()); - final boolean isCheapToSearch = - searchHelper.isCheapEnoughToSearch(method.getName(), scope, null, progressManager.getProgressIndicator()) != PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES; - if (isCheapToSearch) { - myOccurrencesNumber = ReferencesSearch.search(method).findAll().size(); - } - } - protected String getNameLabelText() { String methodText = PsiFormatUtil.formatMethod(myMethod, PsiSubstitutor.EMPTY, PsiFormatUtil.SHOW_NAME | PsiFormatUtil.SHOW_PARAMETERS, PsiFormatUtil.SHOW_TYPE); diff --git a/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java b/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java index 776e506081e0..01d4b942be79 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java @@ -16,11 +16,15 @@ package com.intellij.refactoring.inline; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiNameIdentifierOwner; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiSearchHelper; +import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.refactoring.ui.RefactoringDialog; import com.intellij.refactoring.util.RadioUpDownListener; -import com.intellij.ui.IdeBorderFactory; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -117,4 +121,15 @@ public abstract class InlineOptionsDialog extends RefactoringDialog implements I public JComponent getPreferredFocusedComponent() { return myRbInlineThisOnly.isSelected() ? myRbInlineThisOnly : myRbInlineAll; } + + protected static int initOccurrencesNumber(PsiNameIdentifierOwner nameIdentifierOwner) { + final ProgressManager progressManager = ProgressManager.getInstance(); + final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(nameIdentifierOwner.getProject()); + final GlobalSearchScope scope = GlobalSearchScope.projectScope(nameIdentifierOwner.getProject()); + final String name = nameIdentifierOwner.getName(); + final boolean isCheapToSearch = + name != null && searchHelper.isCheapEnoughToSearch(name, scope, null, progressManager.getProgressIndicator()) != PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES; + return isCheapToSearch ? ReferencesSearch.search(nameIdentifierOwner).findAll().size() : - 1; + } + } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java index 95e58024e488..97e5dea66d97 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java @@ -209,6 +209,9 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer { } finally { FinishMarkAction.finish(myProject, myEditor, markAction); + if (myBeforeRevert != null) { + myEditor.getCaretModel().moveToOffset(myBeforeRevert.getEndOffset()); + } } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java index 0fb1a7c312a4..8425a19963d4 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java @@ -116,6 +116,7 @@ public class VariableInplaceRenamer { private RangeMarker myRenameOffset; private String myInitialName; protected final String myOldName; + protected RangeMarker myBeforeRevert = null; public void setAdvertisementText(String advertisementText) { myAdvertisementText = advertisementText; @@ -347,6 +348,10 @@ public class VariableInplaceRenamer { }); } } + myBeforeRevert = myRenameOffset != null ? myEditor.getDocument().createRangeMarker(myRenameOffset.getStartOffset(), myEditor.getCaretModel().getOffset()) : null; + if (myBeforeRevert != null) { + myBeforeRevert.setGreedyToRight(true); + } restoreStateBeforeTemplateIsFinished(); } @@ -361,6 +366,9 @@ public class VariableInplaceRenamer { final Runnable runnable = new Runnable() { public void run() { performRefactoringRename(myNewName, context, markAction); + if (myBeforeRevert != null) { + myBeforeRevert.dispose(); + } } }; if (ApplicationManager.getApplication().isUnitTestMode()){