rename additional without automatic renamers

This commit is contained in:
Anna Kozlova
2012-02-03 13:46:30 +04:00
parent 54361fc67a
commit 18a54e041c
2 changed files with 64 additions and 73 deletions
@@ -84,7 +84,6 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
final String initialName,
final String oldName) {
super(editor, elementToRename, project, initialName, oldName);
}
public boolean performInplaceRename() {
@@ -115,7 +114,8 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
final PsiFile containingFile) {
if (appendAdditionalElement(stringUsages)) {
return super.buildTemplateAndStart(refs, stringUsages, scope, containingFile);
} else {
}
else {
final RenameChooser renameChooser = new RenameChooser(myEditor) {
@Override
protected void runRenameTemplate(Collection<Pair<PsiElement, TextRange>> stringUsages) {
@@ -179,10 +179,61 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
}
}
protected void renameSynthetic(String newName) {
}
protected void performRefactoringRename(final String newName,
final StartMarkAction markAction) {
try {
performAutomaticRename(newName);
new WriteCommandAction(myProject, getCommandName()) {
@Override
protected void run(Result result) throws Throwable {
renameSynthetic(newName);
}
}.execute();
PsiNamedElement elementToRename = getVariable();
for (AutomaticRenamerFactory renamerFactory : Extensions.getExtensions(AutomaticRenamerFactory.EP_NAME)) {
if (renamerFactory.isApplicable(elementToRename)) {
final List<UsageInfo> usages = new ArrayList<UsageInfo>();
final AutomaticRenamer renamer =
renamerFactory.createRenamer(elementToRename, newName, new ArrayList<UsageInfo>());
if (renamer.hasAnythingToRename()) {
if (!ApplicationManager.getApplication().isUnitTestMode()) {
final AutomaticRenamingDialog renamingDialog = new AutomaticRenamingDialog(myProject, renamer);
renamingDialog.show();
if (!renamingDialog.isOK()) return;
}
final Runnable runnable = new Runnable() {
public void run() {
renamer.findUsages(usages, false, false);
}
};
if (!ProgressManager.getInstance()
.runProcessWithProgressSynchronously(runnable, RefactoringBundle.message("searching.for.variables"), true, myProject)) {
return;
}
if (!CommonRefactoringUtil.checkReadOnlyStatus(myProject, PsiUtilCore.toPsiElementArray(renamer.getElements()))) return;
final UsageInfo[] usageInfos = usages.toArray(new UsageInfo[usages.size()]);
final MultiMap<PsiElement, UsageInfo> classified = RenameProcessor.classifyUsages(renamer.getElements(), usageInfos);
for (final PsiNamedElement element : renamer.getElements()) {
new WriteCommandAction(myProject, getCommandName()) {
@Override
protected void run(Result result) throws Throwable {
final String newElementName = renamer.getNewName(element);
if (newElementName != null) {
final Collection<UsageInfo> infos = classified.get(element);
RenameUtil.doRenameGenericNamedElement(element, newElementName, infos.toArray(new UsageInfo[infos.size()]), null);
}
}
}.execute();
}
}
}
}
}
finally {
try {
@@ -194,50 +245,6 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
}
}
protected void performAutomaticRename(String newName) {
PsiNamedElement elementToRename = getVariable();
for (AutomaticRenamerFactory renamerFactory : Extensions.getExtensions(AutomaticRenamerFactory.EP_NAME)) {
if (renamerFactory.isApplicable(elementToRename)) {
final List<UsageInfo> usages = new ArrayList<UsageInfo>();
final AutomaticRenamer renamer = renamerFactory.createRenamer(elementToRename, newName, new ArrayList<UsageInfo>());
if (renamer.hasAnythingToRename()) {
if (!ApplicationManager.getApplication().isUnitTestMode()) {
final AutomaticRenamingDialog renamingDialog = new AutomaticRenamingDialog(myProject, renamer);
renamingDialog.show();
if (!renamingDialog.isOK()) return;
}
final Runnable runnable = new Runnable() {
public void run() {
renamer.findUsages(usages, false, false);
}
};
if (!ProgressManager.getInstance()
.runProcessWithProgressSynchronously(runnable, RefactoringBundle.message("searching.for.variables"), true, myProject)) {
return;
}
if (!CommonRefactoringUtil.checkReadOnlyStatus(myProject, PsiUtilCore.toPsiElementArray(renamer.getElements()))) return;
final UsageInfo[] usageInfos = usages.toArray(new UsageInfo[usages.size()]);
final MultiMap<PsiElement,UsageInfo> classified = RenameProcessor.classifyUsages(renamer.getElements(), usageInfos);
for (final PsiNamedElement element : renamer.getElements()) {
new WriteCommandAction(myProject, getCommandName()) {
@Override
protected void run(Result result) throws Throwable {
final String newElementName = renamer.getNewName(element);
if (newElementName != null) {
final Collection<UsageInfo> infos = classified.get(element);
RenameUtil.doRenameGenericNamedElement(element, newElementName, infos.toArray(new UsageInfo[infos.size()]), null);
}
}
}.execute();
}
}
}
}
}
@Override
protected String getCommandName() {
PsiNamedElement variable = getVariable();
@@ -287,7 +294,7 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
}
private boolean isIdentifier(final String newName) {
final NamesValidator namesValidator = LanguageNamesValidation.INSTANCE.forLanguage(myLanguage);
return namesValidator == null || namesValidator.isIdentifier(newName, myProject);
}
@@ -15,10 +15,6 @@
*/
package org.jetbrains.plugins.groovy.refactoring.rename.inplace;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.command.impl.FinishMarkAction;
import com.intellij.openapi.command.impl.StartMarkAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.PsiNamedElement;
@@ -39,27 +35,15 @@ public class GrVariableInplaceRenamer extends VariableInplaceRenamer {
super(elementToRename, editor);
}
@Override
protected void performRefactoringRename(final String newName, StartMarkAction markAction) {
try {
new WriteCommandAction(myProject, getCommandName()) {
@Override
protected void run(Result result) throws Throwable {
PsiNamedElement elementToRename = getVariable();
if (elementToRename instanceof ClosureSyntheticParameter && !"it".equals(newName)) {
final GrClosableBlock closure = ((ClosureSyntheticParameter)elementToRename).getClosure();
final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(myProject);
final PsiType type = ((ClosureSyntheticParameter)elementToRename).getTypeGroovy();
final GrParameter newParam = factory.createParameter(newName, TypesUtil.unboxPrimitiveTypeWrapper(type));
final GrParameter added = closure.addParameter(newParam);
GrReferenceAdjuster.shortenReferences(added);
}
}
}.execute();
performAutomaticRename(newName);
}
finally {
FinishMarkAction.finish(myProject, myEditor, markAction);
protected void renameSynthetic(String newName) {
PsiNamedElement elementToRename = getVariable();
if (elementToRename instanceof ClosureSyntheticParameter && !"it".equals(newName)) {
final GrClosableBlock closure = ((ClosureSyntheticParameter)elementToRename).getClosure();
final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(myProject);
final PsiType type = ((ClosureSyntheticParameter)elementToRename).getTypeGroovy();
final GrParameter newParam = factory.createParameter(newName, TypesUtil.unboxPrimitiveTypeWrapper(type));
final GrParameter added = closure.addParameter(newParam);
GrReferenceAdjuster.shortenReferences(added);
}
}
}