mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
do refactoring from conflicts view ( IDEA-52320 )
This commit is contained in:
+6
-2
@@ -372,7 +372,7 @@ public class ChangeSignatureProcessor extends BaseRefactoringProcessor {
|
||||
|
||||
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
MultiMap<PsiElement, String> conflictDescriptions = new MultiMap<PsiElement, String>();
|
||||
UsageInfo[] usagesIn = refUsages.get();
|
||||
final UsageInfo[] usagesIn = refUsages.get();
|
||||
addMethodConflicts(conflictDescriptions);
|
||||
RenameUtil.addConflictDescriptions(usagesIn, conflictDescriptions);
|
||||
Set<UsageInfo> usagesSet = new HashSet<UsageInfo>(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();
|
||||
|
||||
+1
-1
@@ -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<PsiElement, String> conflicts) throws IncorrectOperationException {
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ public class EncapsulateFieldsProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
}
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, refUsages.get());
|
||||
}
|
||||
|
||||
private void checkExistingMethods(PsiMethod[] prototypes, MultiMap<PsiElement, String> conflicts, boolean isGetter) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
+6
-2
@@ -186,7 +186,7 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
|
||||
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
UsageInfo[] usagesIn = refUsages.get();
|
||||
final UsageInfo[] usagesIn = refUsages.get();
|
||||
ArrayList<UsageInfo> oldUsages = new ArrayList<UsageInfo>();
|
||||
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();
|
||||
|
||||
+1
-1
@@ -228,7 +228,7 @@ class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, usagesIn);
|
||||
}
|
||||
|
||||
private static boolean isAccessedForWriting (PsiExpression expr) {
|
||||
|
||||
@@ -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<PsiElement, String> conflicts) {
|
||||
|
||||
+1
-1
@@ -205,7 +205,7 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
|
||||
}
|
||||
}
|
||||
}
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, usages);
|
||||
}
|
||||
|
||||
private static boolean isAccessedForWriting (PsiExpression expr) {
|
||||
|
||||
+1
-1
@@ -128,7 +128,7 @@ public class InlineToAnonymousClassProcessor extends BaseRefactoringProcessor {
|
||||
protected boolean preprocessUsages(final Ref<UsageInfo[]> refUsages) {
|
||||
MultiMap<PsiElement, String> conflicts = getConflicts(refUsages.get());
|
||||
if (!conflicts.isEmpty()) {
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, refUsages.get());
|
||||
}
|
||||
return super.preprocessUsages(refUsages);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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<PsiElement, String> conflicts) {
|
||||
protected boolean showConflicts(MultiMap<PsiElement, String> conflicts, UsageInfo[] usages) {
|
||||
return true;
|
||||
}
|
||||
}.run();
|
||||
|
||||
+1
-1
@@ -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<PsiElement, String> conflicts) {
|
||||
|
||||
+1
-1
@@ -149,7 +149,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
|
||||
}
|
||||
}
|
||||
}
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, refUsages.get());
|
||||
}
|
||||
|
||||
public void findUsages(@NotNull List<FixableUsageInfo> usages) {
|
||||
|
||||
+6
-2
@@ -70,12 +70,16 @@ public abstract class MakeMethodOrClassStaticProcessor<T extends PsiTypeParamete
|
||||
return new MakeMethodOrClassStaticViewDescriptor(myMember);
|
||||
}
|
||||
|
||||
protected final boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
protected final boolean preprocessUsages(final Ref<UsageInfo[]> refUsages) {
|
||||
UsageInfo[] usagesIn = refUsages.get();
|
||||
if (myPrepareSuccessfulSwingThreadCallback != null) {
|
||||
MultiMap<PsiElement, String> 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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -109,7 +109,8 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
|
||||
protected boolean preprocessUsages(final Ref<UsageInfo[]> refUsages) {
|
||||
return showConflicts(getConflicts(refUsages.get()));
|
||||
final UsageInfo[] usages = refUsages.get();
|
||||
return showConflicts(getConflicts(usages), usages);
|
||||
}
|
||||
|
||||
protected void refreshElements(final PsiElement[] elements) {
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -146,7 +146,7 @@ public class MoveDirectoryWithClassesProcessor extends BaseRefactoringProcessor
|
||||
conflicts.putValue(psiFile, e.getMessage());
|
||||
}
|
||||
}
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, refUsages.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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) {
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
}
|
||||
catch (IncorrectOperationException e) {}
|
||||
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, usages);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-1
@@ -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<PsiElement, String> conflicts, final UsageInfo[] usages) throws IncorrectOperationException {
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
+1
-1
@@ -172,7 +172,7 @@ public class ReplaceConstructorWithFactoryProcessor extends BaseRefactoringProce
|
||||
}
|
||||
|
||||
|
||||
return showConflicts(conflicts);
|
||||
return showConflicts(conflicts, usages);
|
||||
}
|
||||
|
||||
private PsiClass getConstructorContainingClass() {
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
@@ -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<PsiElement,String> conflicts) {
|
||||
@Deprecated
|
||||
protected boolean showConflicts(final MultiMap<PsiElement, String> conflicts) {
|
||||
return showConflicts(conflicts, null);
|
||||
}
|
||||
|
||||
protected boolean showConflicts(final MultiMap<PsiElement, String> 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();
|
||||
|
||||
@@ -115,7 +115,7 @@ public class RenameProcessor extends BaseRefactoringProcessor {
|
||||
return RenamePsiElementProcessor.forElement(myPrimaryElement).getHelpID(myPrimaryElement);
|
||||
}
|
||||
|
||||
public boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
public boolean preprocessUsages(final Ref<UsageInfo[]> refUsages) {
|
||||
UsageInfo[] usagesIn = refUsages.get();
|
||||
MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -50,10 +50,18 @@ public class ConflictsDialog extends DialogWrapper{
|
||||
private String[] myConflictDescriptions;
|
||||
private MultiMap<PsiElement, String> myElementConflictDescription;
|
||||
private final Project myProject;
|
||||
private Runnable myDoRefactoringRunnable;
|
||||
|
||||
public ConflictsDialog(Project project, MultiMap<PsiElement, String> conflictDescriptions) {
|
||||
this(project, conflictDescriptions, null);
|
||||
}
|
||||
|
||||
public ConflictsDialog(Project project,
|
||||
MultiMap<PsiElement, String> conflictDescriptions,
|
||||
Runnable doRefactoringRunnable) {
|
||||
super(project, true);
|
||||
myProject = project;
|
||||
myDoRefactoringRunnable = doRefactoringRunnable;
|
||||
final LinkedHashSet<String> conflicts = new LinkedHashSet<String>();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ public class MoveGroovyScriptProcessor extends MoveClassesOrPackagesProcessor {
|
||||
|
||||
@Override
|
||||
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
return showConflicts(new MultiMap<PsiElement, String>());
|
||||
return showConflicts(new MultiMap<PsiElement, String>(), refUsages.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user