mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inline: show number of usages to be inlined when possible (IDEA-73024 )
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -209,6 +209,9 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer {
|
||||
}
|
||||
finally {
|
||||
FinishMarkAction.finish(myProject, myEditor, markAction);
|
||||
if (myBeforeRevert != null) {
|
||||
myEditor.getCaretModel().moveToOffset(myBeforeRevert.getEndOffset());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -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()){
|
||||
|
||||
Reference in New Issue
Block a user