RFR: 8237383: Members inherited from non-public types are not included in index
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Apr 1 17:47:16 UTC 2020
Hi Hannes,
I don't see anything wrong in the webrev, so in that sense, the webrev
is Approved. I did have one question, about VisibleMemberTable, but I
see you anticipated my question and answered it below, in the original
RFR email. :-)
The work itself looks good. Nice.
The remaining comments are stylistic or suggestions.
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.
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`.
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.
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?
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.
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.
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.
TagletWriter:192
By convention, the phrase used to describe a paramter in `@param` should
not end with a period `.`
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`.
IndexBuilder:56
(Performance) would it be better to build the indexMap unsorted, and
then just sort it when needed? (Open question.)
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)
Comparators: (multiple) missing blank line before documentation comment.
-- Jon
On 3/27/20 5:03 PM, Hannes Wallnöfer wrote:
> Please review:
>
> JBS: https://bugs.openjdk.java.net/browse/JDK-8237383
> Webrev: http://cr.openjdk.java.net/~hannesw/8237383/webrev.00/
>
> This patch makes sure members inherited from non-documented parents are included in HTML and search index files.
>
> There is a new IndexItem class to the doclets.toolkit.util package that is used instead of raw Elements to collect indexed elements by IndexBuilder. This is necessary because we need to know the inheriting class when rendering a member signature as the member type may change by instantiating type parameters.
>
> IndexItem can also hold a SearchIndexItem so that index tags can be added to IndexBuilder to generate index files from a single collection rather than manually merging two collections.
>
> Unfortunately I ran into some obstacles with this, so the resulting code is not quite as simple and unified as I would have liked. HTML and search indexes are structured differently and each use a variety of different formats and comparators for sorting. This makes it very difficult to manage everything within a single place, so there’s still much of the original redundancy and complexity left.
>
> I also moved all comparator factory methods from the Utils class to a new Comparators class. The code is mostly unchanged as I was not able to simplify it without changing behaviour. There is one new comparator factory method that generates a composite generator for the IndexItems containing elements and search tags in the HTML index.
>
> The changes in VisibleMemberTree are mostly removal of dead code. The implementation of getExtraMembers(Kind) was the same as getAllVisibleMembers(Kind), so no additional members were found and added by that method. There is also a bit of code cleanup in that class.
>
>
> Thanks,
> Hannes
More information about the javadoc-dev
mailing list