RFR: JDK-8289332: Auto-generate ids for user-defined headings

Jonathan Gibbons jjg at openjdk.org
Tue Aug 16 20:09:38 UTC 2022


On Mon, 25 Jul 2022 15:10:36 GMT, Hannes Wallnöfer <hannesw at openjdk.org> wrote:

> This is a simple change to automatically generate `id` attributes for HTML headers in documentation comments. 
> 
> I decided to leave the functionality in `HtmlDocletWriter` rather than moving it to `HtmlIds` because it uses the same helper methods as`commentTagsToContent`.
> 
> The value of the `id` attribute id derived from the content of the header tag with spaces and other non-word characters replaced by `-`. A `-hdr` suffix is appended to avoid collisions with other ids. If there are duplicate values an int counter is appended to make them unique.

Some inline comments/questions.

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java line 1762:

> 1760:     private boolean hasIdAttribute(StartElementTree node) {
> 1761:         return node.getAttributes().stream().anyMatch(
> 1762:                 dt -> equalsIgnoreCase(((AttributeTree)dt).getName(), "id"));

Do you need to filter/map the stream to ensure no class cast exceptions?
Can the attributes include `ErroneousTree`?

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java line 1791:

> 1789:         if (!idValue.isEmpty()) {
> 1790:             // Make id unique
> 1791:             idValue = idValue + "-hdr";

Would it be better to use `header` rather than just `hdr` ?
Better still, `heading` seems to be the term in the HTML spec; `header` is also used, but not for headings.

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java line 1800:

> 1798:             }
> 1799:             content.add("id=\"").add(idValue).add("\"");
> 1800:         }

This part of the algorithm, to create an `id` from the text contents of a header, still feels like it belongs in `HtmlIds`.  It feels like we should have 

HtmlIds.getIdForHeader(CharSequence headerText)

or something like that

-------------

PR: https://git.openjdk.org/jdk/pull/9627


More information about the javadoc-dev mailing list