From ba07a224ba0c011deb705aabc588fe2dd1c6c8b6 Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 27 Apr 2010 15:36:28 +0400 Subject: [PATCH] do refactoring from conflicts view ( IDEA-52320 ) --- .../ChangeSignatureProcessor.java | 8 ++++++-- .../ConvertToInstanceMethodProcessor.java | 2 +- .../EncapsulateFieldsProcessor.java | 2 +- .../extractclass/ExtractClassProcessor.java | 2 +- .../InheritanceToDelegationProcessor.java | 8 ++++++-- .../inline/InlineConstantFieldProcessor.java | 2 +- .../inline/InlineMethodProcessor.java | 2 +- .../InlineParameterExpressionProcessor.java | 2 +- .../inline/InlineToAnonymousClassProcessor.java | 2 +- .../InlineSuperClassRefactoringProcessor.java | 4 ++-- .../IntroduceParameterProcessor.java | 2 +- .../IntroduceParameterObjectProcessor.java | 2 +- .../MakeMethodOrClassStaticProcessor.java | 8 ++++++-- .../memberPushDown/PushDownProcessor.java | 6 +++--- .../MoveClassToInnerProcessor.java | 3 ++- .../MoveClassesOrPackagesProcessor.java | 2 +- .../MoveDirectoryWithClassesProcessor.java | 2 +- .../move/moveInner/MoveInnerProcessor.java | 2 +- .../MoveInstanceMethodProcessor.java | 2 +- .../move/moveMembers/MoveMembersProcessor.java | 2 +- .../RemoveMiddlemanProcessor.java | 2 +- .../ReplaceConstructorWithBuilderProcessor.java | 2 +- .../ReplaceConstructorWithFactoryProcessor.java | 2 +- .../WrapReturnValueProcessor.java | 2 +- .../refactoring/BaseRefactoringProcessor.java | 15 ++++++++++++--- .../refactoring/rename/RenameProcessor.java | 8 ++++++-- .../intellij/refactoring/ui/ConflictsDialog.java | 16 +++++++++++++++- .../move/MoveGroovyScriptProcessor.java | 2 +- 28 files changed, 77 insertions(+), 37 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java index 909b200d8e67..9291086f363e 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java @@ -372,7 +372,7 @@ public class ChangeSignatureProcessor extends BaseRefactoringProcessor { protected boolean preprocessUsages(Ref refUsages) { MultiMap conflictDescriptions = new MultiMap(); - UsageInfo[] usagesIn = refUsages.get(); + final UsageInfo[] usagesIn = refUsages.get(); addMethodConflicts(conflictDescriptions); RenameUtil.addConflictDescriptions(usagesIn, conflictDescriptions); Set usagesSet = new HashSet(Arrays.asList(usagesIn)); @@ -387,7 +387,11 @@ public class ChangeSignatureProcessor extends BaseRefactoringProcessor { } if (myPrepareSuccessfulSwingThreadCallback != null && !conflictDescriptions.isEmpty()) { - ConflictsDialog dialog = new ConflictsDialog(myProject, conflictDescriptions); + ConflictsDialog dialog = new ConflictsDialog(myProject, conflictDescriptions, new Runnable(){ + public void run() { + execute(usagesIn); + } + }); dialog.show(); if (!dialog.isOK()){ if (dialog.isShowConflicts()) prepareSuccessful(); diff --git a/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java index aed16d3c631a..d0e9c6c0db7e 100644 --- a/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java @@ -172,7 +172,7 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor { LOG.error(e); } - return showConflicts(conflicts); + return showConflicts(conflicts, usagesIn); } private void addInaccessibilityConflicts(final UsageInfo[] usages, final MultiMap conflicts) throws IncorrectOperationException { diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java index 13bf9964620e..24edd4ec313b 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java @@ -127,7 +127,7 @@ public class EncapsulateFieldsProcessor extends BaseRefactoringProcessor { } } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } private void checkExistingMethods(PsiMethod[] prototypes, MultiMap conflicts, boolean isGetter) { diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java index e3eca3742431..8b8daed6696b 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java @@ -151,7 +151,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { conflicts.putValue(field, "Field \'" + field.getName() + "\' needs getter"); } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } diff --git a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java index 237387fac737..9e842d7bccb7 100644 --- a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java @@ -186,7 +186,7 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor { } protected boolean preprocessUsages(Ref refUsages) { - UsageInfo[] usagesIn = refUsages.get(); + final UsageInfo[] usagesIn = refUsages.get(); ArrayList oldUsages = new ArrayList(); addAll(oldUsages, usagesIn); final ObjectUpcastedUsageInfo[] objectUpcastedUsageInfos = objectUpcastedUsages(usagesIn); @@ -202,7 +202,11 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor { analyzeConflicts(usagesIn, conflicts); if (!conflicts.isEmpty()) { ConflictsDialog conflictsDialog = - new ConflictsDialog(myProject, conflicts); + new ConflictsDialog(myProject, conflicts, new Runnable() { + public void run() { + execute(usagesIn); + } + }); conflictsDialog.show(); if (!conflictsDialog.isOK()){ if (conflictsDialog.isShowConflicts()) prepareSuccessful(); diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java index 186b5f0c3cbb..0cc343e57b59 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java @@ -228,7 +228,7 @@ class InlineConstantFieldProcessor extends BaseRefactoringProcessor { } } - return showConflicts(conflicts); + return showConflicts(conflicts, usagesIn); } private static boolean isAccessedForWriting (PsiExpression expr) { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index c714bf0a381b..e7374961d506 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -141,7 +141,7 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { if (!myInlineThisOnly) { if (!CommonRefactoringUtil.checkReadOnlyStatus(myProject, myMethod)) return false; } - return showConflicts(conflicts); + return showConflicts(conflicts, usagesIn); } private void addInaccessibleSuperCallsConflicts(final UsageInfo[] usagesIn, final MultiMap conflicts) { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java index 19ab41026c2c..d4cf4bdffa09 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java @@ -205,7 +205,7 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor } } } - return showConflicts(conflicts); + return showConflicts(conflicts, usages); } private static boolean isAccessedForWriting (PsiExpression expr) { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassProcessor.java index 21940971ba96..574c18398b21 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassProcessor.java @@ -128,7 +128,7 @@ public class InlineToAnonymousClassProcessor extends BaseRefactoringProcessor { protected boolean preprocessUsages(final Ref refUsages) { MultiMap conflicts = getConflicts(refUsages.get()); if (!conflicts.isEmpty()) { - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } return super.preprocessUsages(refUsages); } diff --git a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java index 112b86ba4ed9..50f24d095af9 100644 --- a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java @@ -201,14 +201,14 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori conflicts.put(element, conflictsMap.get(element)); } checkConflicts(refUsages, conflicts); - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } protected void performRefactoring(final UsageInfo[] usages) { new PushDownProcessor(mySuperClass.getProject(), myMemberInfos, mySuperClass, new DocCommentPolicy(DocCommentPolicy.ASIS)){ //push down conflicts are already collected @Override - protected boolean showConflicts(MultiMap conflicts) { + protected boolean showConflicts(MultiMap conflicts, UsageInfo[] usages) { return true; } }.run(); diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java index 0ae7342287fd..c21a50c78698 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java @@ -243,7 +243,7 @@ public class IntroduceParameterProcessor extends BaseRefactoringProcessor implem processor.findConflicts(this, refUsages.get(), conflicts); } - return showConflicts(conflicts); + return showConflicts(conflicts, usagesIn); } private void detectAccessibilityConflicts(final UsageInfo[] usageArray, MultiMap conflicts) { diff --git a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java index c50008889609..d89efed1e111 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java @@ -149,7 +149,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP } } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } public void findUsages(@NotNull List usages) { diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java index e034af55c99d..5c5036683675 100644 --- a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java @@ -70,12 +70,16 @@ public abstract class MakeMethodOrClassStaticProcessor refUsages) { + protected final boolean preprocessUsages(final Ref refUsages) { UsageInfo[] usagesIn = refUsages.get(); if (myPrepareSuccessfulSwingThreadCallback != null) { MultiMap conflicts = getConflictDescriptions(usagesIn); if (conflicts.size() > 0) { - ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts); + ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts, new Runnable(){ + public void run() { + execute(refUsages.get()); + } + }); conflictsDialog.show(); if (!conflictsDialog.isOK()) { if (conflictsDialog.isShowConflicts()) prepareSuccessful(); diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java index 0edd3a3228c9..6aa631de9748 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java @@ -104,7 +104,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor { myCreateClassDlg = CreateSubclassAction.chooseSubclassToCreate(myClass); if (myCreateClassDlg != null) { pushDownConflicts.checkTargetClassConflicts(null, false, myCreateClassDlg.getTargetDirectory()); - return showConflicts(pushDownConflicts.getConflicts()); + return showConflicts(pushDownConflicts.getConflicts(), usagesIn); } else { return false; } @@ -118,7 +118,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor { } } - return showConflicts(pushDownConflicts.getConflicts()); + return showConflicts(pushDownConflicts.getConflicts(), usagesIn); } protected void refreshElements(PsiElement[] elements) { @@ -149,7 +149,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor { removeFromTargetClass(); } catch (IncorrectOperationException e) { - LOG.assertTrue(false); + LOG.error(e); } } diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java index d6728cb2224c..371409623bdd 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java @@ -109,7 +109,8 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor { } protected boolean preprocessUsages(final Ref refUsages) { - return showConflicts(getConflicts(refUsages.get())); + final UsageInfo[] usages = refUsages.get(); + return showConflicts(getConflicts(usages), usages); } protected void refreshElements(final PsiElement[] elements) { diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index aa68369253e2..55840bff4297 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -204,7 +204,7 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { } refUsages.set(filteredUsages.toArray(new UsageInfo[filteredUsages.size()])); - return showConflicts(conflicts); + return showConflicts(conflicts, usages); } private boolean isInsideMoved(PsiElement place) { diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveDirectoryWithClassesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveDirectoryWithClassesProcessor.java index 9ebfaada25bf..973f212d22e0 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveDirectoryWithClassesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveDirectoryWithClassesProcessor.java @@ -146,7 +146,7 @@ public class MoveDirectoryWithClassesProcessor extends BaseRefactoringProcessor conflicts.putValue(psiFile, e.getMessage()); } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } @Override diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java index d4ef7978342d..21662cf5cb64 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java @@ -403,7 +403,7 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor { // if (myInnerClass.hasModifierProperty(PsiModifier.)) { myOuterClass.accept(new Visitor()); - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } private static boolean isInPackage(final PsiFile containingFile, PsiPackage aPackage) { diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java index 6cd4d13f1111..a67d424c2c3c 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java @@ -127,7 +127,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{ } catch (IncorrectOperationException e) {} - return showConflicts(conflicts); + return showConflicts(conflicts, usages); } @NotNull diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java index 56dc68aa0b10..2852d5b6144c 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java @@ -242,7 +242,7 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor { } analyzeMoveConflicts(myMembersToMove, myTargetClass, myNewVisibility, conflicts); RefactoringConflictsUtil.analyzeModuleConflicts(myProject, myMembersToMove, usages, myTargetClass, conflicts); - return showConflicts(conflicts); + return showConflicts(conflicts, usages); } private void addInaccessiblleConflicts(final MultiMap conflicts, final UsageInfo[] usages) throws IncorrectOperationException { diff --git a/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanProcessor.java b/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanProcessor.java index 584cc4475ec3..5ec1420e7663 100644 --- a/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanProcessor.java @@ -84,7 +84,7 @@ public class RemoveMiddlemanProcessor extends FixableUsagesRefactoringProcessor } } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } private void processUsagesForMethod(final boolean deleteMethodHierarchy, PsiMethod method, int[] paramPermutation, String getterName, PsiMethod delegatedMethod, diff --git a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java index 862e7e3b2ac5..30f404a01a7f 100644 --- a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java @@ -285,7 +285,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto conflicts.putValue(null, "Found constructors are not reducible to simple chain"); } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } protected String getCommandName() { diff --git a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithFactory/ReplaceConstructorWithFactoryProcessor.java b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithFactory/ReplaceConstructorWithFactoryProcessor.java index 63cc01f21434..b81fa745bf33 100644 --- a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithFactory/ReplaceConstructorWithFactoryProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithFactory/ReplaceConstructorWithFactoryProcessor.java @@ -172,7 +172,7 @@ public class ReplaceConstructorWithFactoryProcessor extends BaseRefactoringProce } - return showConflicts(conflicts); + return showConflicts(conflicts, usages); } private PsiClass getConstructorContainingClass() { diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java index 564e16cc7adf..0b59f205de74 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java @@ -228,7 +228,7 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor conflicts.putValue(existingClass, RefactorJBundle.message("there.already.exists.a.class.with.the.selected.name")); } } - return showConflicts(conflicts); + return showConflicts(conflicts, refUsages.get()); } protected void performRefactoring(UsageInfo[] usageInfos) { diff --git a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java index 37a5ebb6b1a3..e8e9fb3a00df 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java @@ -256,7 +256,7 @@ public abstract class BaseRefactoringProcessor { return CommonRefactoringUtil.checkReadOnlyStatus(project, psiElements); } - void execute(final UsageInfo[] usages) { + protected void execute(final UsageInfo[] usages) { CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { public void run() { ApplicationManager.getApplication().runWriteAction(new Runnable() { @@ -495,13 +495,22 @@ public abstract class BaseRefactoringProcessor { } } - protected boolean showConflicts(final MultiMap conflicts) { + @Deprecated + protected boolean showConflicts(final MultiMap conflicts) { + return showConflicts(conflicts, null); + } + + protected boolean showConflicts(final MultiMap conflicts, final UsageInfo[] usages) { if (!conflicts.isEmpty() && ApplicationManager.getApplication().isUnitTestMode()) { throw new ConflictsInTestsException(conflicts.values()); } if (myPrepareSuccessfulSwingThreadCallback != null && !conflicts.isEmpty()) { - final ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts); + final ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts, usages == null ? null : new Runnable() { + public void run() { + execute(usages); + } + }); conflictsDialog.show(); if (!conflictsDialog.isOK()) { if (conflictsDialog.isShowConflicts()) prepareSuccessful(); 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 a7b97f882b15..aa6f37fbad44 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java @@ -115,7 +115,7 @@ public class RenameProcessor extends BaseRefactoringProcessor { return RenamePsiElementProcessor.forElement(myPrimaryElement).getHelpID(myPrimaryElement); } - public boolean preprocessUsages(Ref refUsages) { + public boolean preprocessUsages(final Ref refUsages) { UsageInfo[] usagesIn = refUsages.get(); MultiMap conflicts = new MultiMap(); @@ -125,7 +125,11 @@ public class RenameProcessor extends BaseRefactoringProcessor { if (ApplicationManager.getApplication().isUnitTestMode()) { throw new ConflictsInTestsException(conflicts.values()); } - ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts); + ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts, new Runnable() { + public void run() { + execute(refUsages.get()); + } + }); conflictsDialog.show(); if (!conflictsDialog.isOK()) { if (conflictsDialog.isShowConflicts()) prepareSuccessful(); diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java b/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java index 7aac82f5272b..de694820c41b 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java @@ -50,10 +50,18 @@ public class ConflictsDialog extends DialogWrapper{ private String[] myConflictDescriptions; private MultiMap myElementConflictDescription; private final Project myProject; + private Runnable myDoRefactoringRunnable; public ConflictsDialog(Project project, MultiMap conflictDescriptions) { + this(project, conflictDescriptions, null); + } + + public ConflictsDialog(Project project, + MultiMap conflictDescriptions, + Runnable doRefactoringRunnable) { super(project, true); myProject = project; + myDoRefactoringRunnable = doRefactoringRunnable; final LinkedHashSet conflicts = new LinkedHashSet(); for (String conflict : conflictDescriptions.values()) { @@ -141,6 +149,7 @@ public class ConflictsDialog extends DialogWrapper{ presentation.setCodeUsagesString(codeUsagesString); presentation.setTabName(codeUsagesString); presentation.setTabText(codeUsagesString); + presentation.setShowCancelButton(true); final Usage[] usages = new Usage[myElementConflictDescription.size()]; int i = 0; @@ -176,7 +185,12 @@ public class ConflictsDialog extends DialogWrapper{ } }; } - UsageViewManager.getInstance(myProject).showUsages(UsageTarget.EMPTY_ARRAY, usages, presentation); + final UsageView usageView = UsageViewManager.getInstance(myProject).showUsages(UsageTarget.EMPTY_ARRAY, usages, presentation); + if (myDoRefactoringRunnable != null) { + usageView.addPerformOperationAction( + myDoRefactoringRunnable, + RefactoringBundle.message("retry.command"), "Unable to perform refactoring. There were changes in code after the usages have been found.", RefactoringBundle.message("usageView.doAction")); + } close(SHOW_CONFLICTS_EXIT_CODE); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyScriptProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyScriptProcessor.java index 817916439cae..6a589b0b356e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyScriptProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyScriptProcessor.java @@ -78,7 +78,7 @@ public class MoveGroovyScriptProcessor extends MoveClassesOrPackagesProcessor { @Override protected boolean preprocessUsages(Ref refUsages) { - return showConflicts(new MultiMap()); + return showConflicts(new MultiMap(), refUsages.get()); } @Override