diff --git a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java index fedf8fe1da4d..3f71ce879d19 100644 --- a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java @@ -16,6 +16,7 @@ package com.intellij.refactoring.invertBoolean; import com.intellij.codeInsight.CodeInsightServicesUtil; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; @@ -24,9 +25,12 @@ import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.refactoring.BaseRefactoringProcessor; +import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.rename.RenameProcessor; +import com.intellij.refactoring.rename.RenamePsiElementProcessor; import com.intellij.refactoring.rename.RenameUtil; +import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.refactoring.util.MoveRenameUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; @@ -222,14 +226,24 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor { protected void performRefactoring(UsageInfo[] usages) { - for (PsiElement element : myRenameProcessor.getElements()) { - RenameUtil.doRename(element, myNewName, extractUsagesForElement(element, usages), myProject, new RefactoringElementListener() { - public void elementMoved(@NotNull PsiElement newElement) {} - public void elementRenamed(@NotNull PsiElement newElement) {} - }); + for (final PsiElement element : myRenameProcessor.getElements()) { + try { + RenameUtil.doRename(element, myNewName, extractUsagesForElement(element, usages), myProject, new RefactoringElementListener() { + public void elementMoved(@NotNull PsiElement newElement) { + } + + public void elementRenamed(@NotNull PsiElement newElement) { + } + }); + } + catch (final IncorrectOperationException e) { + RenameUtil.showErrorMessage(e, element, myProject); + return; + } } + for (UsageInfo usage : usages) { final SmartPsiElementPointer pointerToInvert = myToInvert.get(usage); if (pointerToInvert != null) { diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java index 897c32c471d3..3655544679e7 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java @@ -318,13 +318,20 @@ public class RenameProcessor extends BaseRefactoringProcessor { List postRenameCallbacks = new ArrayList(); final MultiMap classified = classifyUsages(myAllRenames.keySet(), usages); - for (PsiElement element : myAllRenames.keySet()) { + for (final PsiElement element : myAllRenames.keySet()) { String newName = myAllRenames.get(element); final RefactoringElementListener elementListener = getTransaction().getElementListener(element); - Runnable postRenameCallback = RenamePsiElementProcessor.forElement(element).getPostRenameCallback(element, newName, elementListener); + final RenamePsiElementProcessor renamePsiElementProcessor = RenamePsiElementProcessor.forElement(element); + Runnable postRenameCallback = renamePsiElementProcessor.getPostRenameCallback(element, newName, elementListener); final Collection infos = classified.get(element); - RenameUtil.doRename(element, newName, infos.toArray(new UsageInfo[infos.size()]), myProject, elementListener); + try { + RenameUtil.doRename(element, newName, infos.toArray(new UsageInfo[infos.size()]), myProject, elementListener); + } + catch (final IncorrectOperationException e) { + RenameUtil.showErrorMessage(e, element, myProject); + return; + } if (postRenameCallback != null) { postRenameCallbacks.add(postRenameCallback); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java index 660529dbc8c7..eacb50746203 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java @@ -172,7 +172,7 @@ public class RenameUtil { } public static void doRename(final PsiElement element, String newName, UsageInfo[] usages, final Project project, - final RefactoringElementListener listener) { + final RefactoringElementListener listener) throws IncorrectOperationException{ final RenamePsiElementProcessor processor = RenamePsiElementProcessor.forElement(element); final String fqn = element instanceof PsiFile ? ((PsiFile)element).getVirtualFile().getPath() : CopyReferenceAction.elementToFqn(element); if (fqn != null) { @@ -189,22 +189,22 @@ public class RenameUtil { }; UndoManager.getInstance(project).undoableActionPerformed(action); } - try { - processor.renameElement(element, newName, usages, listener); + processor.renameElement(element, newName, usages, listener); + } + + public static void showErrorMessage(final IncorrectOperationException e, final PsiElement element, final Project project) { + // may happen if the file or package cannot be renamed. e.g. locked by another application + if (ApplicationManager.getApplication().isUnitTestMode()) { + throw new RuntimeException(e); + //LOG.error(e); + //return; } - catch (final IncorrectOperationException e) { - // may happen if the file or package cannot be renamed. e.g. locked by another application - if (ApplicationManager.getApplication().isUnitTestMode()) { - throw new RuntimeException(e); - //LOG.error(e); - //return; + ApplicationManager.getApplication().invokeLater(new Runnable() { + public void run() { + final String helpID = RenamePsiElementProcessor.forElement(element).getHelpID(element); + CommonRefactoringUtil.showErrorMessage(RefactoringBundle.message("rename.title"), e.getMessage(), helpID, project); } - ApplicationManager.getApplication().invokeLater(new Runnable() { - public void run() { - CommonRefactoringUtil.showErrorMessage(RefactoringBundle.message("rename.title"), e.getMessage(), processor.getHelpID(element), project); - } - }); - } + }); } public static void doRenameGenericNamedElement(PsiElement namedElement, String newName, UsageInfo[] usages,