inline: show number of usages to be inlined when possible (IDEA-73024 )

This commit is contained in:
anna
2011-12-16 08:47:16 +01:00
parent 5e78fc69bc
commit 52e77034d2
5 changed files with 34 additions and 21 deletions
@@ -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() {
@@ -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);
@@ -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;
}
}
@@ -209,6 +209,9 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer {
}
finally {
FinishMarkAction.finish(myProject, myEditor, markAction);
if (myBeforeRevert != null) {
myEditor.getCaretModel().moveToOffset(myBeforeRevert.getEndOffset());
}
}
}
@@ -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()){