From fee44dbb29c9b2325cd1058f80de525230c2cf4e Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Wed, 30 Nov 2016 17:42:44 +0300 Subject: [PATCH] IDEA-CR-16002 provide sdk types ordering --- .../roots/ui/configuration/JdkComboBox.java | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java index 6b576f6f8b39..df117f25879d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java @@ -30,10 +30,10 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Conditions; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.ScreenUtil; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.MultiMap; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.JBUI; import org.jetbrains.annotations.NotNull; @@ -305,41 +305,15 @@ public class JdkComboBox extends ComboBoxWithWidePopup { } } - private static class MyComparatorWrapper { - @NotNull - private final Comparator myComparator; - - MyComparatorWrapper(@NotNull final Comparator comparator) { - myComparator = comparator; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - return myComparator == ((MyComparatorWrapper)o).myComparator; - } - - @Override - public int hashCode() { - return myComparator.hashCode(); - } - } - @NotNull private static Sdk[] sortSdks(@NotNull final Sdk[] sdks) { - MultiMap comparatorToSdkMap = new MultiMap<>(); + final ContainerUtil.KeyOrderedMultiMap comparatorToSdkMap = new ContainerUtil.KeyOrderedMultiMap<>(); for (Sdk sdk : sdks) { final SdkTypeId sdkType = sdk.getSdkType(); - if (sdkType instanceof SdkType) { - comparatorToSdkMap.putValue(new MyComparatorWrapper(((SdkType)sdkType).getComparator()), sdk); - } else { - comparatorToSdkMap.putValue(new MyComparatorWrapper(SdkType.ALPHABETICAL_COMPARATOR), sdk); - } + comparatorToSdkMap.putValue(new MyComparatorWrapper(sdkType instanceof SdkType ? (SdkType)sdkType : null), sdk); } - return comparatorToSdkMap.entrySet().stream().flatMap(entry -> entry.getValue().stream().sorted(entry.getKey().myComparator)) + return comparatorToSdkMap.entrySet().stream().flatMap(entry -> entry.getValue().stream().sorted(entry.getKey().getComparator())) .toArray(size -> new Sdk[size]); } @@ -355,6 +329,32 @@ public class JdkComboBox extends ComboBoxWithWidePopup { } } + private static class MyComparatorWrapper implements Comparable { + @Nullable + private SdkType mySdkType = null; + + private MyComparatorWrapper(@Nullable final SdkType type) { + mySdkType = type; + } + + @Nullable + private String getNameToCompare() { + return mySdkType == null ? null : mySdkType.getPresentableName(); + } + + @NotNull + private Comparator getComparator() { + return mySdkType == null ? SdkType.ALPHABETICAL_COMPARATOR : mySdkType.getComparator(); + } + + @Override + public int compareTo(@NotNull final MyComparatorWrapper comparatorWrapper) { + if (getComparator() == comparatorWrapper.getComparator()) return 0; + + return StringUtil.compare(getNameToCompare(), comparatorWrapper.getNameToCompare(), true); + } + } + // implements javax.swing.ListModel @Override public JdkComboBoxItem getElementAt(int index) {