RFR: 8287333: Clean up ParamTaglet and ThrowsTaglet [v5]
Pavel Rappo
prappo at openjdk.java.net
Tue Jun 7 13:42:21 UTC 2022
On Mon, 6 Jun 2022 20:19:09 GMT, Jonathan Gibbons <jjg at openjdk.org> wrote:
>> Pavel Rappo has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 35 commits:
>>
>> - Merge branch 'master' into 8287333
>>
>> It's two days before RDP1, the codebase changes quickly. This merge is to keep up with it.
>> - Address feedback
>>
>> Also removes unneeded import.
>> - Merge branch 'master' into 8287333
>>
>> This resolves a conflict in ParamTaglet.
>> - Clean up if-branch
>> - Remove upper-bounded wildcard
>>
>> This change simplifies code without any disadvantages:
>>
>> * Those `List<? extends XTree>` are read-only
>> * An argument of the `List<XTree>` type can still be passed to a `List<? extends XTree>` parameter
>> - Simplify inheritThrowsDocumentation
>> - Reuse more specific variable
>> - Merge branch 'master' into 8287333
>> - Incremental update
>>
>> - Renames local variables and method parameters
>> - Improves comments
>> - Removes debug leftovers
>> - Update top-level doc comment
>> - ... and 25 more: https://git.openjdk.java.net/jdk/compare/f1dd559e...9c91efb0
>
> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ParamTaglet.java line 94:
>
>> 92: ? ee.getTypeParameters()
>> 93: : ee.getParameters();
>> 94: String target = ch.getParameterName((ParamTree) input.docTreeInfo.docTree());
>
> I'm guessing that it is not practical to have DocTreeInfo be generic in the DocTree field.
>
> An alternative coding style here is to pass in an argument for the expected return type, as in
>
> String target = ch.getParameterName(input.docTreeInfo.docTree(ParamTree.class));
That relates to the plan of dealing with `Input.tagId` that we discussed (chronologically) earlier in this PR. Since it's second time we touch this area, here are some bits of that plan.
Rather than generify `DocTreeInfo` and, therefore `DocFinder.Input`, we could first note a few things about `Input`:
* `tagId` and `docTreeInfo` are used only by `ParamTaglet` and `ThrowsTaglet`
* `ParamTaglet` and `ThrowsTaglet` use `tagId` and `docTreeInfo` as poor surrogates for more specific types:
* `tagId` should be `Integer` for `ParamTaglet` and `TypeMirror` for `ThrowsTaglet`
* `Input.docTreeInfo.docTree` should be of different subtypes of `DocTree` (as you note)
* `isTypeVariableParamTag` is used only by `ParamTaglet`
Similarly, we note this for `Output`: `tagList` is only used by `ThrowsTaglet`.
What does it tell us? Well, to me it sounds like `Input` and `Output` are nonspecific bags of values used by all inheritable tags. That needlessly clutters `DocFinder`, which does not use *any* of those fields.
To declutter `DocFinder` and isolate inheritable taglets from each other, a subclass of inheritable taglet should instead use its own subclasses of `Input` and `Output` to pass all the necessary inheritance information.
I started working on that in JDK 19, didn't have enough time to finish. I plan to continue working on that in JDK 20, where the result will hopefully land.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8886
More information about the javadoc-dev
mailing list