diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java index 6735651d7ecf..09694b709f7c 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java @@ -30,6 +30,7 @@ import com.intellij.usageView.UsageInfo; import com.intellij.usages.Usage; import com.intellij.usages.UsageGroup; import com.intellij.usages.UsageView; +import com.intellij.usages.UsageViewSettings; import com.intellij.usages.rules.PsiElementUsage; import com.intellij.usages.rules.UsageGroupingRule; import org.jetbrains.annotations.NotNull; @@ -43,26 +44,25 @@ public class MethodGroupingRule implements UsageGroupingRule { private static final Logger LOG = Logger.getInstance("#com.intellij.usages.impl.rules.MethodGroupingRule"); public UsageGroup groupUsage(Usage usage) { - if (usage instanceof PsiElementUsage) { - PsiElement psiElement = ((PsiElementUsage)usage).getElement(); - if (psiElement.getContainingFile() instanceof PsiJavaFile) { - PsiElement containingMethod = psiElement; - do { - containingMethod = PsiTreeUtil.getParentOfType(containingMethod, PsiMethod.class, true); - if (containingMethod == null || ((PsiMethod)containingMethod).getContainingClass().getQualifiedName() != null) break; - } - while (true); + if (!(usage instanceof PsiElementUsage)) return null; + PsiElement psiElement = ((PsiElementUsage)usage).getElement(); + if (psiElement.getContainingFile() instanceof PsiJavaFile) { + PsiElement containingMethod = psiElement; + do { + containingMethod = PsiTreeUtil.getParentOfType(containingMethod, PsiMethod.class, true); + if (containingMethod == null || ((PsiMethod)containingMethod).getContainingClass().getQualifiedName() != null) break; + } + while (true); - if (containingMethod != null) { - return new MethodUsageGroup((PsiMethod)containingMethod); - } + if (containingMethod != null) { + return new MethodUsageGroup((PsiMethod)containingMethod); } } return null; } private static class MethodUsageGroup implements UsageGroup, TypeSafeDataProvider { - private final SmartPsiElementPointer myMethodPointer; + private final SmartPsiElementPointer myMethodPointer; private final String myName; private Icon myIcon; @@ -142,8 +142,14 @@ public class MethodGroupingRule implements UsageGroupingRule { if (!(usageGroup instanceof MethodUsageGroup)) { LOG.error("MethodUsageGroup expected but " + usageGroup.getClass() + " found"); } + MethodUsageGroup other = (MethodUsageGroup)usageGroup; + PsiMethod myMethod = myMethodPointer.getElement(); + PsiMethod otherMethod = other.myMethodPointer.getElement(); + if (myMethod != null && otherMethod != null && myMethod != otherMethod && !UsageViewSettings.getInstance().IS_SORT_MEMBERS_ALPHABETICALLY) { + return myMethod.getTextOffset() < otherMethod.getTextOffset() ? -1 : 1; + } - return myName.compareTo(((MethodUsageGroup)usageGroup).myName); + return myName.compareTo(other.myName); } public void calcData(final DataKey key, final DataSink sink) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsAction.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsAction.java index 66a1e3b4b98b..efc13e6d1cb1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsAction.java @@ -44,9 +44,6 @@ public class OptimizeImportsAction extends AnAction { final Editor editor = BaseCodeInsightAction.getInjectedEditor(project, PlatformDataKeys.EDITOR.getData(dataContext)); final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); - if (files == null) { - return; - } PsiFile file = null; PsiDirectory dir; diff --git a/platform/platform-resources-en/src/messages/UsageView.properties b/platform/platform-resources-en/src/messages/UsageView.properties index a5a9c7ea113c..c4f18923f6ce 100644 --- a/platform/platform-resources-en/src/messages/UsageView.properties +++ b/platform/platform-resources-en/src/messages/UsageView.properties @@ -63,3 +63,4 @@ show.usages.only.usage=It''s the only usage in {0} all.usages.are.in.this.line=All {0} usages in {1} are in this line no.usages.found.in=No usages found in {0} some.usages.found=({0,choice, 1#1 usage|2#{0,number} usages} found) +sort.alphabetically.action.text=Sort Members Alphabetically diff --git a/platform/usageView/src/com/intellij/usages/UsageViewSettings.java b/platform/usageView/src/com/intellij/usages/UsageViewSettings.java index 5cdd691e149d..cdaf24566a3e 100644 --- a/platform/usageView/src/com/intellij/usages/UsageViewSettings.java +++ b/platform/usageView/src/com/intellij/usages/UsageViewSettings.java @@ -42,6 +42,7 @@ public class UsageViewSettings implements PersistentStateComponent