From 83dde310cdce75fa404928a7c7a34085f4220a73 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 5 Jul 2013 16:26:03 +0200 Subject: [PATCH] EA-47556 - NPE: MoveFilesOrDirectoriesProcessor$.compare move sortDepthFirstRightLeftOrder to api --- .../ConvertToInstanceMethodProcessor.java | 2 +- .../EncapsulateFieldsProcessor.java | 2 +- .../inline/InlineMethodProcessor.java | 2 +- .../InlineSuperClassRefactoringProcessor.java | 7 ++----- .../FixableUsagesRefactoringProcessor.java | 2 +- .../refactoring/util/RefactoringUtil.java | 16 ---------------- .../util/CommonRefactoringUtil.java | 18 ++++++++++++++++++ .../MoveFilesOrDirectoriesProcessor.java | 8 ++------ .../inline/GroovyInlineLocalProcessor.java | 4 ++-- 9 files changed, 28 insertions(+), 33 deletions(-) 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 34c4308de8c7..c3a8d7279c2c 100644 --- a/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodProcessor.java @@ -187,7 +187,7 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor { myTypeParameterReplacements = buildTypeParameterReplacements(); List inheritors = new ArrayList(); - RefactoringUtil.sortDepthFirstRightLeftOrder(usages); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); // Process usages for (final UsageInfo usage : usages) { 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 180e28dd0e6d..fc87374b6ad3 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java @@ -299,7 +299,7 @@ public class EncapsulateFieldsProcessor extends BaseRefactoringProcessor { for (List usageInfos : usagesInFiles.values()) { //this is to avoid elements to become invalid as a result of processUsage final MyUsageInfo[] infos = usageInfos.toArray(new MyUsageInfo[usageInfos.size()]); - RefactoringUtil.sortDepthFirstRightLeftOrder(infos); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(infos); for (MyUsageInfo info : infos) { processUsage(info); 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 1659cac04161..a82994d44cf4 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -404,7 +404,7 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { } } else { - RefactoringUtil.sortDepthFirstRightLeftOrder(usages); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); if (myMethod.isConstructor()) { for (UsageInfo usage : usages) { PsiElement element = usage.getElement(); 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 818b8c387416..ab340a596947 100644 --- a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java @@ -32,10 +32,7 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.inlineSuperClass.usageInfo.*; import com.intellij.refactoring.memberPushDown.PushDownConflicts; import com.intellij.refactoring.memberPushDown.PushDownProcessor; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.FixableUsageInfo; -import com.intellij.refactoring.util.FixableUsagesRefactoringProcessor; -import com.intellij.refactoring.util.RefactoringUtil; +import com.intellij.refactoring.util.*; import com.intellij.refactoring.util.classMembers.MemberInfo; import com.intellij.refactoring.util.classMembers.MemberInfoStorage; import com.intellij.usageView.UsageInfo; @@ -290,7 +287,7 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori } else { super.performRefactoring(pushDownUsages); } - RefactoringUtil.sortDepthFirstRightLeftOrder(usages); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); for (UsageInfo usageInfo : usages) { if (!(usageInfo instanceof ReplaceExtendsListUsageInfo || usageInfo instanceof RemoveImportUsageInfo)) { try { diff --git a/java/java-impl/src/com/intellij/refactoring/util/FixableUsagesRefactoringProcessor.java b/java/java-impl/src/com/intellij/refactoring/util/FixableUsagesRefactoringProcessor.java index 2c5fc9f2adab..4ad49a90bb81 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/FixableUsagesRefactoringProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/util/FixableUsagesRefactoringProcessor.java @@ -38,7 +38,7 @@ public abstract class FixableUsagesRefactoringProcessor extends BaseRefactoringP } protected void performRefactoring(UsageInfo[] usageInfos) { - RefactoringUtil.sortDepthFirstRightLeftOrder(usageInfos); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usageInfos); for (UsageInfo usageInfo : usageInfos) { if (usageInfo instanceof FixableUsageInfo) { try { diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 80a4a91bb84a..ca905b0f252d 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -172,22 +172,6 @@ public class RefactoringUtil { } } - //order of usages accross different files is irrelevant - public static void sortDepthFirstRightLeftOrder(final UsageInfo[] usages) { - Arrays.sort(usages, new Comparator() { - public int compare(final UsageInfo usage1, final UsageInfo usage2) { - final PsiElement element1 = usage1.getElement(); - final PsiElement element2 = usage2.getElement(); - if (element1 == null) { - if (element2 == null) return 0; - return 1; - } - if (element2 == null) return -1; - return element2.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset(); - } - }); - } - @Nullable public static String suggestNewOverriderName(String oldOverriderName, String oldBaseName, String newBaseName) { if (oldOverriderName.equals(oldBaseName)) { diff --git a/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java b/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java index fddef64d9309..44db00972778 100644 --- a/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java +++ b/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java @@ -29,6 +29,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.RefactoringBundle; +import com.intellij.usageView.UsageInfo; import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -38,6 +39,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; /** * @author ven @@ -51,6 +53,22 @@ public class CommonRefactoringUtil { dialog.show(); } + //order of usages accross different files is irrelevant + public static void sortDepthFirstRightLeftOrder(final UsageInfo[] usages) { + Arrays.sort(usages, new Comparator() { + public int compare(final UsageInfo usage1, final UsageInfo usage2) { + final PsiElement element1 = usage1.getElement(); + final PsiElement element2 = usage2.getElement(); + if (element1 == null) { + if (element2 == null) return 0; + return 1; + } + if (element2 == null) return -1; + return element2.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset(); + } + }); + } + /** * Fatal refactoring problem during unit test run. Corresponds to message of modal dialog shown during user driven refactoring. */ diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java index 4b03fbfcd436..2ada56dc3b3a 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java @@ -33,6 +33,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.move.FileReferenceContextUtil; import com.intellij.refactoring.move.MoveCallback; import com.intellij.refactoring.rename.RenameUtil; +import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.refactoring.util.NonCodeUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; @@ -176,12 +177,7 @@ public class MoveFilesOrDirectoriesProcessor extends BaseRefactoringProcessor { elementListener.elementMoved(element); } // sort by offset descending to process correctly several usages in one PsiElement [IDEADEV-33013] - Arrays.sort(usages, new Comparator() { - @Override - public int compare(final UsageInfo o1, final UsageInfo o2) { - return o1.getElement() == o2.getElement() ? o2.getRangeInElement().getStartOffset() - o1.getRangeInElement().getStartOffset() : 0; - } - }); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); // fix references in moved files to outer files for (PsiFile movedFile : movedFiles) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java index 6ed68592515b..b0173f0aca44 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java @@ -23,7 +23,7 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.refactoring.BaseRefactoringProcessor; import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.util.RefactoringUtil; +import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.usageView.BaseUsageViewDescriptor; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; @@ -192,7 +192,7 @@ public class GroovyInlineLocalProcessor extends BaseRefactoringProcessor { @Override protected void performRefactoring(UsageInfo[] usages) { - RefactoringUtil.sortDepthFirstRightLeftOrder(usages); + CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); for (UsageInfo usage : usages) { GrVariableInliner.inlineReference(usage, myLocal, mySettings.getInitializer());