RFR: 8190876: javadoc search on "java.se" shows "java.se" the last one among other modules
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Jun 27 20:50:49 UTC 2018
If you just add a comment explaining the secondary comparison, you don't
need another round of review.
-- Jon
On 6/27/18 1:49 PM, Jonathan Gibbons wrote:
> OK,
>
> Please add a comment to that effect in the code, so we don't lose that
> info.
>
> -- Jon
>
>
> On 6/27/18 1:42 PM, Hannes Wallnöfer wrote:
>> Am 27.06.2018 um 22:12 schrieb Jonathan Gibbons
>> <jonathan.gibbons at oracle.com>:
>>> Utils.java
>>>
>>> The secondary comparisons, on lines 2093, 2113 still use
>>> String.compareTo instead of compareStrings.
>>>
>> The reason is that TreeSet requires the Comparator to be consistent
>> with equals, i.e. if compare returns 0 for any two of them, TreeSet
>> will consider them as equal and discard one of them.
>>
>> So the reason for the secondary comparison is not just to have
>> consistent order, but (maybe more importantly) avoid losing items
>> that happen to have the same label or name.
>>
>> Also, the toString representation is not what is displayed to the
>> user, so using collation for ordering may not have the expected result.
>>
>> Hannes
>>
>>
>>> -- Jon
>>>
>>> On 06/27/2018 11:36 AM, Hannes Wallnöfer wrote:
>>>> Here’s a new webrev with collator applied to all search results
>>>> (search tags now use generic comparator, specific search tag
>>>> comparator is removed). The search tag test has been updated to
>>>> expect the new order.
>>>>
>>>> http://cr.openjdk.java.net/~hannesw/8190876/webrev.03/
>>>>
>>>> Hannes
>>>>
>>>>> Am 27.06.2018 um 19:20 schrieb Jonathan Gibbons
>>>>> <jonathan.gibbons at oracle.com>:
>>>>>
>>>>> This seems like flawed reasoning. We should not have an
>>>>> inconsistent policy just because it affects a particular use case
>>>>> and/or test.
>>>>>
>>>>> Either we believe in using collation for sorting the index
>>>>> entries, or we don't.
>>>>>
>>>>> -- Jon
>>>>>
>>>>>
>>>>> On 6/27/18 9:24 AM, Hannes Wallnöfer wrote:
>>>>>> When searching for „jav“, Search Tags contains „Java Collections
>>>>>> Framework“ followed by various java* command line tools. When
>>>>>> using collation, the first item is „javac“, followed by „Java
>>>>>> Collections Framework“ and then the remaining java* tools.
>>>>>>
>>>>>> It just looks strange and it causes tests to fail, so I opted for
>>>>>> keeping search tag order as it is.
>>>>>>
>>>>>> Hannes
>>>>>>
>>>>>>> Am 27.06.2018 um 18:05 schrieb Jonathan Gibbons
>>>>>>> <jonathan.gibbons at oracle.com>:
>>>>>>>
>>>>>>> Hannes,
>>>>>>>
>>>>>>> Can you explain more what you mean by ...
>>>>>>>
>>>>>>> "except search tags, where collation causes frameworks and
>>>>>>> commands to be mixed up and tests to fail."
>>>>>>>
>>>>>>> -- Jon
>>>>>>>
>>>>>>>
>>>>>>> On 6/27/18 8:57 AM, Hannes Wallnöfer wrote:
>>>>>>>> Updated webrev with comparators moved to Utils. All index items
>>>>>>>> use collation for primary comparison except search tags, where
>>>>>>>> collation causes frameworks and commands to be mixed up and
>>>>>>>> tests to fail. Comparators for index collections are created in
>>>>>>>> HtmlConfiguration.initConfiguration, I think Locale should be
>>>>>>>> set by then.
>>>>>>>>
>>>>>>>> http://cr.openjdk.java.net/~hannesw/8190876/webrev.02/
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Hannes
>>>>>>>>
>>>>>>>>
>>>>>>>>> Am 22.06.2018 um 23:22 schrieb Jonathan Gibbons
>>>>>>>>> <jonathan.gibbons at oracle.com>:
>>>>>>>>>
>>>>>>>>> While I agree that Utils is not a great place for the
>>>>>>>>> comparators, I will note that the comparison routines there
>>>>>>>>> are better than the "simple" ones you have placed in
>>>>>>>>> SearchIndexItem. In particular, the existing comparison code
>>>>>>>>> in Utils uses java.text.Collator to provide locale-sensitive
>>>>>>>>> comparison, which is conceptually more correct than your
>>>>>>>>> simple comparison of the upper-cased strings.
>>>>>>>>>
>>>>>>>>> -- Jon
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 06/19/2018 03:03 AM, Hannes Wallnöfer wrote:
>>>>>>>>>> Thanks for the review, Jon.
>>>>>>>>>>
>>>>>>>>>> I’ve uploaded a new webrev to address the issues you brought up:
>>>>>>>>>>
>>>>>>>>>> http://cr.openjdk.java.net/~hannesw/8190876/webrev.01/
>>>>>>>>>>
>>>>>>>>>> Moving the index item comparators up to Utils didn’t feel
>>>>>>>>>> right, so I made them static and moved them to
>>>>>>>>>> SearchIndexItem.java, which feels more appropriate to me. The
>>>>>>>>>> generic one that is used multiple times is now a singleton.
>>>>>>>>>>
>>>>>>>>>> I also forgot to update SearchTest.java for the changes in
>>>>>>>>>> search.js file, that is included in the new webrev.
>>>>>>>>>>
>>>>>>>>>> Hannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Am 18.06.2018 um 20:23 schrieb Jonathan Gibbons
>>>>>>>>>>> <jonathan.gibbons at oracle.com>:
>>>>>>>>>>>
>>>>>>>>>>> Minor issues to address:
>>>>>>>>>>>
>>>>>>>>>>> HtmlConfiguration, 397, 406:
>>>>>>>>>>> You're using .toUpperCase() which depends on the Locale.
>>>>>>>>>>> The convention in javadoc is to use
>>>>>>>>>>> Utils.to{Lower,Upper}Case(String), which forces the en-US
>>>>>>>>>>> locale (to avoid the Turkish-i problem). There is an
>>>>>>>>>>> equivalent convention in javac as well.
>>>>>>>>>>>
>>>>>>>>>>> SearchIndexItem
>>>>>>>>>>> If I understand the code correctly, "NestedName" is not the
>>>>>>>>>>> correct term to be using. I think you're trying to get the
>>>>>>>>>>> "simple name". Nesting is a different concept, as in,
>>>>>>>>>>> "nested classes". In a better/future world, SearchIndexItem
>>>>>>>>>>> should contain an Element (not should not always be only
>>>>>>>>>>> string based) and once you have an Element, you can easily
>>>>>>>>>>> get the simple name.
>>>>>>>>>>>
>>>>>>>>>>> Style issue:
>>>>>>>>>>>
>>>>>>>>>>> Although not wrong, it seems less than ideal to have
>>>>>>>>>>> functions creating and returning equal instances of the
>>>>>>>>>>> comparators, as compared to having singleton instances
>>>>>>>>>>> stored as needed. But then, it's also weird to have these
>>>>>>>>>>> search indexes stored in HtmlConfiguration, as compared to a
>>>>>>>>>>> search-related class. In addition, Utils has many
>>>>>>>>>>> comparators, so you arguably should not be adding more
>>>>>>>>>>> comparators here in HtmlConfiguration. (Not that I like the
>>>>>>>>>>> overuse of the Utils bucket.)
>>>>>>>>>>>
>>>>>>>>>>> -- Jon
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 06/15/2018 12:43 AM, Hannes Wallnöfer wrote:
>>>>>>>>>>>> This changes sorting order of packages and modules in the
>>>>>>>>>>>> search box from last name segment to whole package or
>>>>>>>>>>>> module name, respectively. Apart from fixing the observed
>>>>>>>>>>>> issue that leads to more intuitive listings as package and
>>>>>>>>>>>> module names are hierarchic by nature.
>>>>>>>>>>>>
>>>>>>>>>>>> The sorting order for types, members, and search tags is
>>>>>>>>>>>> not changed.
>>>>>>>>>>>>
>>>>>>>>>>>> The patch also moves sorting from client side JavaScript to
>>>>>>>>>>>> Java, speeding up rendering of search results by at over
>>>>>>>>>>>> 2x. It also provides the benefit of secondary order, so
>>>>>>>>>>>> members and types with the same name and signature are now
>>>>>>>>>>>> ordered by package name, whereas their order was undefined
>>>>>>>>>>>> before.
>>>>>>>>>>>>
>>>>>>>>>>>> Please review:
>>>>>>>>>>>>
>>>>>>>>>>>> Webrev: cr.openjdk.java.net/~hannesw/8190876/webrev.00/
>>>>>>>>>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8190876
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Hannes
>
More information about the javadoc-dev
mailing list