rename: prepare renaming invokes after automatic renamers suggestions as well (IDEA-56124)

This commit is contained in:
anna
2010-07-07 15:49:24 +04:00
parent 9b246114ca
commit b70942e628
4 changed files with 57 additions and 7 deletions
@@ -0,0 +1,12 @@
public class X {
}
class MyClass1 {}
/**
* {@link #MyClass1Impl()}
*/
class MyClass1Impl extends MyClass1 {
MyClass1Impl() {
}
}
@@ -0,0 +1,12 @@
public class X {
}
class MyClass {}
/**
* {@link #MyClassImpl()}
*/
class MyClassImpl extends MyClass {
MyClassImpl() {
}
}
@@ -54,12 +54,16 @@ public class RenameClassTest extends MultiFileTestCase {
}
public void testAutomaticRenameVars() throws Exception {
doRenameClass("XX", "Y");
}
private void doRenameClass(final String className, final String newName) throws Exception {
doTest(new PerformAction() {
public void performAction(VirtualFile rootDir, VirtualFile rootAfter) throws Exception {
PsiClass aClass = myJavaFacade.findClass("XX", GlobalSearchScope.allScope(getProject()));
PsiClass aClass = myJavaFacade.findClass(className, GlobalSearchScope.allScope(getProject()));
assertNotNull("Class XX not found", aClass);
final RenameProcessor processor = new RenameProcessor(myProject, aClass, "Y", true, true) {
final RenameProcessor processor = new RenameProcessor(myProject, aClass, newName, true, true) {
@Override
protected boolean showAutomaticRenamingDialog(AutomaticRenamer automaticVariableRenamer) {
for (PsiNamedElement element : automaticVariableRenamer.getElements()) {
@@ -78,6 +82,10 @@ public class RenameClassTest extends MultiFileTestCase {
});
}
public void testAutomaticRenameInheritors() throws Exception {
doRenameClass("MyClass", "MyClass1");
}
public void testAutomaticRenameVarsCollision() throws Exception {
doTest("XX", "Y");
}
@@ -99,16 +99,16 @@ public class RenameProcessor extends BaseRefactoringProcessor {
}
public void doRun() {
prepareRenaming();
prepareRenaming(myPrimaryElement, myNewName, myAllRenames);
super.doRun();
}
public void prepareRenaming() {
final List<RenamePsiElementProcessor> processors = RenamePsiElementProcessor.allForElement(myPrimaryElement);
public void prepareRenaming(final PsiElement element, final String newName, final LinkedHashMap<PsiElement, String> allRenames) {
final List<RenamePsiElementProcessor> processors = RenamePsiElementProcessor.allForElement(element);
myForceShowPreview = false;
for (RenamePsiElementProcessor processor : processors) {
processor.prepareRenaming(myPrimaryElement, myNewName, myAllRenames);
processor.prepareRenaming(element, newName, allRenames);
myForceShowPreview |= processor.forcesShowPreview();
}
}
@@ -145,15 +145,33 @@ public class RenameProcessor extends BaseRefactoringProcessor {
final List<UsageInfo> variableUsages = new ArrayList<UsageInfo>();
if (!myRenamers.isEmpty()) {
if (!findRenamedVariables(variableUsages)) return false;
final LinkedHashMap<PsiElement, String> renames = new LinkedHashMap<PsiElement, String>();
for (final AutomaticRenamer renamer : myRenamers) {
final List<? extends PsiNamedElement> variables = renamer.getElements();
for (final PsiNamedElement variable : variables) {
final String newName = renamer.getNewName(variable);
if (newName != null) {
addElement(variable, newName);
prepareRenaming(variable, newName, renames);
}
}
}
if (!renames.isEmpty()) {
myAllRenames.putAll(renames);
final Runnable runnable = new Runnable() {
public void run() {
for (Map.Entry<PsiElement, String> entry : renames.entrySet()) {
final UsageInfo[] usages =
RenameUtil.findUsages(entry.getKey(), entry.getValue(), mySearchInComments, mySearchTextOccurrences, myAllRenames);
Collections.addAll(variableUsages, usages);
}
}
};
if (!ProgressManager.getInstance()
.runProcessWithProgressSynchronously(runnable, RefactoringBundle.message("searching.for.variables"), true, myProject)) {
return false;
}
}
}
if (!variableUsages.isEmpty()) {
@@ -349,7 +367,7 @@ public class RenameProcessor extends BaseRefactoringProcessor {
protected void prepareTestRun() {
if (!PsiElementRenameHandler.canRename(myProject, null, myPrimaryElement)) return;
prepareRenaming();
prepareRenaming(myPrimaryElement, myNewName, myAllRenames);
}
public Collection<String> getNewNames() {