RFR: JDK-8298405: Support Markdown in Documentation Comments [v7]
    Jonathan Gibbons 
    jjg at openjdk.org
       
    Tue Jan 30 23:05:01 UTC 2024
    
    
  
On Wed, 24 Jan 2024 12:17:19 GMT, Pavel Rappo <prappo at openjdk.org> wrote:
>> Jonathan Gibbons has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains eight commits:
>> 
>>  - Merge with upstream/master
>>  - Merge with upstream/master
>>  - Merge remote-tracking branch 'upstream/master' into 8298405.doclet-markdown-v3
>>  - Address review comments
>>  - Fix whitespace
>>  - Improve handling of embedded inline taglets
>>  - Customize support for Markdown headings
>>  - JDK-8298405: Support Markdown in Documentation Comments
>
> src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java line 238:
> 
>> 236:                         && postamble.isEmpty()
>> 237:                         && fullBody.stream().anyMatch(t -> t.getKind() == Kind.MARKDOWN)
>> 238:                         ? CommentStyle.JAVADOC_LINE : CommentStyle.JAVADOC_BLOCK;
> 
> While clever, it seems to be prone to false positive `JAVADOC_LINE`. Also, it is inconsistent with `null` and `Position.NOPOS` returned from the `getText` and `getSourcePos(int)` methods respectively.
I'm not worried about false positive `JAVADOC_LINE` than maybe false _negative_ `JAVADOC_LINE`.  Generally, the underlying issue here is how to handle weird combinations of `DocTrees` constructed by a user of the public API.  For example, should we check, and reject, a `fullBody` containing `MARKDOWN` nodes and non-empty  `preamble` or `postamble`, since that combination will never come from `DocCommentParser`.
I'm not worried about comparison with `getText` and `getSourcePos`, since there really is no other value for the source text or source position that we can return. But we can infer a best guess for the style.
Arguably, we should check the `tags` as well.
------
I dug deeper.
We do create synthetic trees in the standard doclet, such as for the descriptions of mandated methods (like `values` and `valueOf` for any enum class.  Those synthetic trees do utilize this code path, although the `getStyle` method is not currently invoked. (Verified by changing code to throw `UnsupportedOperationException` and run all the tests.) It's also true those synthetic trees do not leverage any Markdown support at this time.
I prefer to leave the code as-is at this time.
> src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java line 704:
> 
>> 702:             }
>> 703: 
>> 704:             // If the break is well within the span of the string i.e. not
> 
> Oh irony! Sentence segmentation in javadoc has some problems with abbreviations like that.
This was fixed 10/26/23.
Both forms of the sentence breaker are supposed to get this correct, but yes, chuckle, irony.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16388#discussion_r1472082408
PR Review Comment: https://git.openjdk.org/jdk/pull/16388#discussion_r1472089239
    
    
More information about the javadoc-dev
mailing list