src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java
changeset 50856 1857ca5aca37
parent 50247 e91322fc41c5
child 51190 fb4a7b894fac
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java	Wed Jun 27 16:19:28 2018 -0700
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java	Thu Jun 28 01:46:03 2018 +0200
@@ -80,6 +80,7 @@
 import com.sun.source.util.DocTrees;
 import com.sun.source.util.TreePath;
 import com.sun.tools.javac.model.JavacTypes;
+import jdk.javadoc.internal.doclets.formats.html.SearchIndexItem;
 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
 import jdk.javadoc.internal.doclets.toolkit.CommentUtils.DocCommentDuo;
 import jdk.javadoc.internal.doclets.toolkit.Messages;
@@ -2079,6 +2080,48 @@
         }
     }
 
+    /**
+     * Returns a Comparator for SearchIndexItems representing types. Items are
+     * compared by short name, or full string representation if names are equal.
+     *
+     * @return a Comparator
+     */
+    public Comparator<SearchIndexItem> makeTypeSearchIndexComparator() {
+        return (SearchIndexItem sii1, SearchIndexItem sii2) -> {
+            int result = compareStrings(sii1.getSimpleName(), sii2.getSimpleName());
+            if (result == 0) {
+                // TreeSet needs this to be consistent with equal so we do
+                // a plain comparison of string representations as fallback.
+                result = sii1.toString().compareTo(sii2.toString());
+            }
+            return result;
+        };
+    }
+
+    private Comparator<SearchIndexItem> genericSearchIndexComparator = null;
+    /**
+     * Returns a Comparator for SearchIndexItems representing modules, packages, or members.
+     * Items are compared by label (member name plus signature for members, package name for
+     * packages, and module name for modules). If labels are equal then full string
+     * representation is compared.
+     *
+     * @return a Comparator
+     */
+    public Comparator<SearchIndexItem> makeGenericSearchIndexComparator() {
+        if (genericSearchIndexComparator == null) {
+            genericSearchIndexComparator = (SearchIndexItem sii1, SearchIndexItem sii2) -> {
+                int result = compareStrings(sii1.getLabel(), sii2.getLabel());
+                if (result == 0) {
+                    // TreeSet needs this to be consistent with equal so we do
+                    // a plain comparison of string representations as fallback.
+                    result = sii1.toString().compareTo(sii2.toString());
+                }
+                return result;
+            };
+        }
+        return genericSearchIndexComparator;
+    }
+
     public Iterable<TypeElement> getEnclosedTypeElements(PackageElement pkg) {
         List<TypeElement> out = getInterfaces(pkg);
         out.addAll(getClasses(pkg));