From 953c6249c4fe128346ce77ea7d958b3963f16063 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 1 Mar 2016 16:42:32 +0100 Subject: [PATCH] safe delete: search for conflicts in usages (IDEA-152126) --- .../safeDelete/JavaSafeDeleteProcessor.java | 21 +++++++++++++++++++ .../safeDelete/SafeDeleteProcessor.java | 5 +++-- .../SafeDeleteProcessorDelegateBase.java | 4 ++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java index b7bd9384442a..1dcf6ba48d2d 100644 --- a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java @@ -256,6 +256,27 @@ public class JavaSafeDeleteProcessor extends SafeDeleteProcessorDelegateBase { return null; } + @Override + public Collection findConflicts(PsiElement element, PsiElement[] elements, UsageInfo[] usages) { + String methodRefFound = null; + if (!ApplicationManager.getApplication().isUnitTestMode() && (element instanceof PsiMethod || element instanceof PsiParameter)) { + for (UsageInfo usage : usages) { + final PsiElement refElement = usage.getElement(); + if (refElement instanceof PsiMethodReferenceExpression) { + methodRefFound = RefactoringBundle.message("expand.method.reference.warning"); + break; + } + } + } + if (methodRefFound != null) { + Collection result = new ArrayList<>(); + result.add(methodRefFound); + result.addAll(super.findConflicts(element, elements, usages)); + return result; + } + return super.findConflicts(element, elements, usages); + } + public Collection findConflicts(@NotNull final PsiElement element, @NotNull final PsiElement[] allElementsToDelete) { if (element instanceof PsiMethod) { final PsiClass containingClass = ((PsiMethod)element).getContainingClass(); diff --git a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java index 4bb3de24b553..9470cd71c0a3 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java @@ -26,7 +26,6 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.DumbModePermission; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; @@ -188,7 +187,9 @@ public class SafeDeleteProcessor extends BaseRefactoringProcessor { for (PsiElement element : myElements) { for(SafeDeleteProcessorDelegate delegate: Extensions.getExtensions(SafeDeleteProcessorDelegate.EP_NAME)) { if (delegate.handlesElement(element)) { - Collection foundConflicts = delegate.findConflicts(element, myElements); + Collection foundConflicts = delegate instanceof SafeDeleteProcessorDelegateBase + ? ((SafeDeleteProcessorDelegateBase)delegate).findConflicts(element, myElements, usages) + : delegate.findConflicts(element, myElements); if (foundConflicts != null) { conflicts.addAll(foundConflicts); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessorDelegateBase.java b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessorDelegateBase.java index f50343dda6c6..d67692b2f10a 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessorDelegateBase.java +++ b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessorDelegateBase.java @@ -42,4 +42,8 @@ public abstract class SafeDeleteProcessorDelegateBase implements SafeDeleteProce public UsageView showUsages(UsageInfo[] usages, UsageViewPresentation presentation, UsageViewManager manager, PsiElement[] elements) { return null; } + + public Collection findConflicts(PsiElement element, PsiElement[] elements, UsageInfo[] usages) { + return findConflicts(element, elements); + } }