Thanks for the review, Jon. 

I uploaded a new webrev that includes some but not all of your suggestions. I 
think we should do more in a separate cleanup, especially the one to put 
IndexItem and SearchIndexItem in a single class hierarchy.

http://cr.openjdk.java.net/~hannesw/8237383/webrev.01/ 
<http://cr.openjdk.java.net/~hannesw/8237383/webrev.01/>

More details inline below.

> Am 01.04.2020 um 19:47 schrieb Jonathan Gibbons <jonathan.gibb...@oracle.com>:
> 
> AbstractExecutableMemberWriter: it took a while to realize why you were 
> adding a typeElement parameter to utils.flatSignature. Maybe some better 
> comments on Utils.flatSignature would help.

The javadoc comments for both  #signature and #flatSignature were a bit oddly 
worded and redundant, I changed them to the following:
/**
 * Get the signature of an executable element with qualified parameter types
 * in the context of type element {@code site}.
 * For instance, for a method {@code mymethod(String x, int y)},
 * it will return {@code (java.lang.String,int)}.
 *
 * @param e the executable element
 * @param site the contextual site
 * @return String signature with qualified parameter types
 */

/**
 * Get the flat signature of an executable element with simple (unqualified)
 * parameter types in the context of type element {@code site}.
 * For instance, for a method {@code mymethod(String x, int y)},
 * it will return {@code (String, int)}.
 *
 * @param e the executable element
 * @param site the contextual site
 * @return String signature with simple (unqualified) parameter types
 */

> Utils.comparators. There's a lot of uses of `utils.comparators`. When it 
> appears more than once, I would suggest stashing a copy of comparators 
> somewhere, so that uses of `utils.comparators` simplify to just `comparators`.
> 

I added a Comparators field to HtmlDocletWriter, which removes lots of 
`utils.comparators` in subclasses, as well as ClassUseMapper.  In some methods 
that contained multiple uses I added a local variable.

> IndexItem ... did you consider making IndexItem an interface or abstract 
> class, with subtypes for the two different kinds ... introducing 
> ElementIndexItem, and possibly seeing if SearchIndexItem becomes a possible 
> subtype of IndexItem. We could then (eventually) use the upcoming switch on 
> sealed types in upcoming releases.

I wanted to do something along those lines in order to clean things up, but 
decided I had spent enough time on this already (mostly due to multiple 
attempts it took me to approach the issue from the right side). This is 
something I think we should definitely do in a separate change.

> AbstractIndexWriter:268 ... MemberDoc is old-speak for "Element", and could 
> be updated. Equally, it might be interesting to (separately) grep for 
> instances of such old-speak, and fix them.
> 
> AbstractIndexWriter:269: parameter `containing`: there is a standard word in 
> the Language Model jargon: `enclosing`.  Do you mean `enclosing` or something 
> different?

I have changed `MemberDoc` to `element`  and `containing` to `enclosing` (the 
parameter name was kept from a local var in that method).


> AllClassesIndexWriter:137.  I guess this works because utils.isCoreClass is 
> null-tolerant ... but I did have to check that. maybe it would be better to 
> defensively check if `typeElement != null`... or if you move towards subtypes 
> of IndexItem, check the class of the subtype here.  Or have an `is...` method 
> on IndexItem.
> 

It worked because AllClassesIndexWriter only works on TypeElements, no other 
elements and no search tags. I have still added a null check for typeElement:

if (typeElement == null || !utils.isCoreClass(typeElement)) {
    continue;
}

> BaseConfiguration/Utils/Comparators.
> In general, {Base,Html}Configuration is the "god object" from which to access 
> handlers/managers/utilities.  I realize there is a chicken-and-egg problem 
> setting up Comparators (since there is a circular dependency with Utils), but 
> once you're past that, then it would be better if BaseConfiguration is the 
> place to get Comparators. To that end, I would make the field in Utils 
> private, to discourage direct use of the field from outside the class.
> 

I tried to fix this but didn’t find a solution to the circular dependency I was 
really happy with, so I left the comparators in Utils.

> Comparators:
> In general, we have way too many `get` methods that ought to be `new`, `make` 
> or `build` methods. Comparators has the opposite problem ... it has `make` 
> methods that return shared instances.  I would either rename the `make*` 
> methods to be `get*`, or even drop the verb altogether and have methods like 
> `comparators.generalPurposeComparator()`. The recent changes to option 
> handling used verb-less accessors.  If all the accessor names end in 
> `Comparator` maybe even that word could be dropped.
> 

Also didn’t try to improve this.

> TagletWriter:192
> By convention, the phrase used to describe a paramter in `@param` should not 
> end with a period `.`

Since all the @param and @return tags in that class end with a period and it 
was not really part of the fix I removed that change from the patch.

> IndexBuilder:36
> It is an anti-pattern for a class in the `toolkit` world to import a class 
> from the `formats.html` world.  I don't see anything in `SearchIndexItem` 
> that is specific to HTML, so SearchIndexItem could/should be moved to the 
> `toolkit` package, alongside `IndexItem`.

I was aware of this, but found a few other instances of classes in `toolkit` 
importing and using code from `formats.html`, so I thought it was permissible 
:) I left this unchanged for now and would propose to fix it with a future 
IndexItem/SearchIndexItem cleanup.

> IndexBuilder:56
> (Performance) would it be better to build the indexMap unsorted, and then 
> just sort it when needed? (Open question.)

Good question, I haven’t tried, will look into it. 

> VisibleMemberTable:630...644
> It seems questionable add members into two separate lists. To me, it would 
> seem more intuitive to add the member into one group -or- the other.  This 
> may come up as an issue if we get to merge the handling of anno types to the 
> general handling for other kinds of types (enum, class, interface, record, 
> etc)

Actually this code looked suspicious to me. I just added the condition to check 
if the type is an annotation before adding a field as annotation type field, as 
is done for methods and required/optional annotation members. Since this is not 
part of the fix I might as well remove this change. I have left it in for now.

> Comparators: (multiple) missing blank line before documentation comment.
> 

Fixed.

> -- Jon
> 

Reply via email to