RFR [15] 8239243: Create index structures only if required

Pavel Rappo pavel.rappo at oracle.com
Tue Feb 18 23:14:12 UTC 2020


Thanks for looking into this.

> On 18 Feb 2020, at 22:57, Jonathan Gibbons <jonathan.gibbons at oracle.com> wrote:
> 
> In a number of places, you use a variable or field named "indexbuilder" that would be better written in all situations as "indexBuilder".  No need for re-review to fix that.

That practice predates this fix, but I'll update the fields as requested.

> The work is good, for what it does, but it triggers a discussion for a potential followup.   What follows is a discussion for future work, not necessarily part of this review.

That exact follow-up you are talking about has been in the works for some time now.
Stay tuned.

> "IndexBuilder" is "old" and now is only half the story. It's the A-Z index, and is unrelated to the interactive search index.  There's a bunch of fields in HtmlConfiguration that could arguably be moved/merged into an imporved abstraction of IndexBuilder that is able to manage the A-Z index as well as the interactive index. Either that, or, IndexBuilder is renamed to AZIndexBuilder, and we create a new sibling structure for the interactive search.    For the fields in question, look at this list from HtmlConfiguration:
> 
> protected SortedSet<SearchIndexItem> memberSearchIndex
> ;
> 
> protected SortedSet<SearchIndexItem> moduleSearchIndex
> ;
> 
> protected SortedSet<SearchIndexItem> packageSearchIndex
> ;
> 
> protected SortedSet<SearchIndexItem> tagSearchIndex
> ;
> 
> protected SortedSet<SearchIndexItem> typeSearchIndex
> ;
> 
> protected Map<Character,List<SearchIndexItem>> tagSearchIndexMap = new 
> HashMap<>();
> 
> protected Set<Character> tagSearchIndexKeys;
> These fields, and probably much of the code to manage them should be moved out of HtmlConfiguration into either IndexBuilder or a some new abstraction to manage these index objects.  This would be philosophically similar to the recent cleanup to move the collections of fields for options out into distinct abstractions. 
> 
> -- Jon
> 
> On 02/18/2020 07:13 AM, Pavel Rappo wrote:
>> Hi Hannes,
>> 
>> I've updated the webrev:
>> 
>>   
>> http://cr.openjdk.java.net/~prappo/8239243/webrev.01/
>> 
>> 
>> Thanks!
>> 
>> 
>>> On 18 Feb 2020, at 09:52, Hannes Wallnöfer <hannes.wallnoefer at oracle.com>
>>>  wrote:
>>> 
>>> Hi Pavel,
>>> 
>>> +1 for the conditional index building, and the IndexBuilder cleanup is a major improvement in every respect.
>>> 
>>> Nitpicking here, but two naming suggestions:
>>> 
>>> - „index“ can be both verb and noun, so renaming the „index“ method to „indexElements“ might make its meaning a bit clearer and puts it in line with the other index* methods
>>> 
>>> - since firstCharacter(String) doesn’t always return the first character maybe something like „indexCharacter“ or „keyCharacter“ would be more fitting?
>>> 
>>> Hannes
>>> 
>>> 
>>> 
>>>> Am 17.02.2020 um 16:35 schrieb Pavel Rappo <pavel.rappo at oracle.com>
>>>> :
>>>> 
>>>> Hello,
>>>> 
>>>> Please review the change for 
>>>> https://bugs.openjdk.java.net/browse/JDK-8239243
>>>> :
>>>> 
>>>> 
>>>> http://cr.openjdk.java.net/~prappo/8239243/webrev.00/
>>>> 
>>>> 
>>>> I noticed that the index structure, used in Index Page an others, is created
>>>> unconditionally (i.e. regardless of the presence of the "-noindex" command-line
>>>> option). Since populating that index doesn't seem to have any side-effects, this
>>>> will unnecessarily consume resources of documentation generation process when no
>>>> index is required. Thus, moving it under the relevant if-statement should be
>>>> safe and the right thing to do. I've also cleaned up the IndexBuilder class a bit.
>>>> 
>>>> In case you wonder, when generating the API docs for the JDK 15, it takes about
>>>> 1 sec. (one second) to create that structure. The number of instances of Element
>>>> in that Map<Character, SortedSet<Element>> is roughly 50,000 (fifty thousand).
>>>> 
>>>> -Pavel
>>>> 
>>>> 
> 



More information about the javadoc-dev mailing list