From d2649e626bdd233e89721b461e86d83b17eb549f Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 22 Feb 2013 17:55:33 +0100 Subject: [PATCH] javafx: sort refs from bottom to top (IDEA-101687) --- .../moveClassesOrPackages/CommonMoveUtil.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/CommonMoveUtil.java b/platform/lang-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/CommonMoveUtil.java index 475c16c2f326..4a1591dbac98 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/CommonMoveUtil.java +++ b/platform/lang-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/CommonMoveUtil.java @@ -1,6 +1,9 @@ package com.intellij.refactoring.move.moveClassesOrPackages; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.ProperTextRange; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.refactoring.util.MoveRenameUsageInfo; @@ -8,9 +11,7 @@ import com.intellij.refactoring.util.NonCodeUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.util.IncorrectOperationException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; public class CommonMoveUtil { @@ -21,6 +22,24 @@ public class CommonMoveUtil { public static NonCodeUsageInfo[] retargetUsages(final UsageInfo[] usages, final Map oldToNewElementsMapping) throws IncorrectOperationException { + Arrays.sort(usages, new Comparator() { + @Override + public int compare(UsageInfo o1, UsageInfo o2) { + final VirtualFile file1 = o1.getVirtualFile(); + final VirtualFile file2 = o2.getVirtualFile(); + if (Comparing.equal(file1, file2)) { + final ProperTextRange rangeInElement1 = o1.getRangeInElement(); + final ProperTextRange rangeInElement2 = o2.getRangeInElement(); + if (rangeInElement1 != null && rangeInElement2 != null) { + return rangeInElement2.getStartOffset() - rangeInElement1.getStartOffset(); + } + return 0; + } + if (file1 == null) return -1; + if (file2 == null) return 1; + return Comparing.compare(file1.getPath(), file2.getPath()); + } + }); List nonCodeUsages = new ArrayList(); for (UsageInfo usage : usages) { if (usage instanceof NonCodeUsageInfo) {