RFR: JDK-6251738: Want a top-level summary page that itemizes all spec documents referenced from javadocs (OEM spec) [v2]
Pavel Rappo
prappo at openjdk.java.net
Thu Nov 5 16:19:59 UTC 2020
On Wed, 4 Nov 2020 20:57:06 GMT, Jonathan Gibbons <jjg at openjdk.org> wrote:
>> This introduces support for a new `@spec` tag that can be used as either an inline tag or as a block tag. It is used to identify references to external specifications, in such a way that the references can be collected together on a new summary page, called "Other Specifications", available from either the static INDEX page or the interactive search box.
>>
>> As an inline tag, the format is `{@spec url label}`, which is roughly translated to `<a href="url">label</a>` in the generated docs.
>>
>> As a block tag, the format is simply
>>
>> @spec url label
>>
>> which is handled in a manner analogous to
>>
>> @see <a href="url">label</a>
>>
>> The tag is notable for being the first standard/supported tag that can be used as either an inline or block tag. (We have had support for bimodal non-standard/custom tags for a while, such as `{@jls}` and `{@jvms}`.) To support bimodal standard tags, some changes to `DocCommentParser` are incorporated here.
>>
>> This change is only the _support_ for the new tag; it does _not_ include any changes to API docs to _use_ the new tag.
>
> Jonathan Gibbons has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 11 commits:
>
> - Fix merge issues; review feedback
> - Merge with master
> - allow rich content in createAnchorAndSearchIndex
> - update Docs.gmk to stop disabling spec tag
> - fix TestSpecTag.testEncodedURI
> - fix tests
> - remove support to workaround legacy @spec tag
> - Merge remote-tracking branch 'upstream/master' into new-spec-tag
> - fix trailing whitespace in test
> - temporarily allow existing legacy usage `@spec JPMS` `@spec jsr-51`
> - ... and 1 more: https://git.openjdk.java.net/jdk/compare/804bd725...ed5512d9
1. Thanks for incorporating my previous offline feedback.
2. Since Hannes and Erik seem to have looked at everything else, I looked mostly at changes in `src/jdk.compiler/share/classes/com/sun/source/**`, which are good!
3. There should be a corresponding but separate change to "Documentation Comment Specification for the Standard Doclet".
4. Can we use this new `@since` tag to refer to the spec at `com/sun/tools/javac/parser/DocCommentParser.java:1116`?
5. Should we specify in `com.sun.source.doctree.SpecTree` that both `url` and `label` parts are mandatory?
6. `DCSpec extends DCEndPosTree`, sigh... Although that is not a public API, this design suggests we could improve that abstraction sometime later.
src/jdk.compiler/share/classes/com/sun/tools/javac/parser/DocCommentParser.java line 1104:
> 1102:
> 1103: DCTree parse(int pos, Kind kind) throws ParseException {
> 1104: if (kind != this.kind && this.kind != Kind.EITHER) {
This condition looks right, but shouldn't we add another one to guard against accidental passing of `kind == EITHER`?
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTree.java line 306:
> 304: * The {@code ref} argument will be URL-encoded for use as the attribute value.
> 305: *
> 306: * @param ref the value for the {@code href} attribute}
Since you are here, could you please remove that trailing `}`?
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTree.java line 322:
> 320: * {@link URI#toASCIIString() converted} to ASCII for use as the attribute value.
> 321: *
> 322: * @param ref the value for the {@code href} attribute}
One more, perhaps copy-pasted, trailing `}`.
test/langtools/tools/javac/diags/examples/NoLabel.java line 2:
> 1: /*
> 2: * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
Should be:
`Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.`
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java line 266:
> 264: }
> 265:
> 266: String textOf(List<? extends DocTree> trees) {
I wonder if this method should work **recursively** rather than shallowly. Consider the following example:
@spec http://example.com Some code: {@code text}
I reckon we'll end up with only `Some code: `.
src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DCTree.java line 81:
> 79: return list.stream().allMatch(DCTree::isBlank);
> 80: }
> 81:
Adding these two methods **here** might be overkill.
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java line 737:
> 735:
> 736: for (Taglet t : taglets) {
> 737: String name = t.isBlockTag() ? "@" + t.getName() : "{@" + t.getName() + "}";
Out of curiosity, why did you flip that?
-------------
Changes requested by prappo (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/790
More information about the compiler-dev
mailing list