On Thu, 14 Apr 2022 12:42:11 GMT, Hannes Wallnöfer <hann...@openjdk.org> wrote:

>> Please review a change to straighten out the mechanism to avoid generating 
>> empty HTML elements in javadoc. 
>> 
>> Currently this is implemented using the `Content.isValid()` method in 
>> `HtmlTree.add(Content)` to check whether the the content argument should be 
>> added or dropped. This seems wrong since we don't really want to check for 
>> validity but non-emptiness (we want to drop empty elements, not print a 
>> warning or error).
>> 
>> So the first decision was to get rid of the `Content.isValid()` method and 
>> use `Content.isEmpty()` instead. I considered keeping `isValid()` and using 
>> it to actually do some validation checks, but in the end decided it didn't 
>> make much sense and scrapped the method.
>> 
>> My initial approach was to take care of emptiness at the content creation 
>> site, but it soon turned out there are too many sites potentially creating 
>> empty content. After fixing 40+ sites using a new 
>> `Content.addNonEmpty(Content)` method I still got empty elements that 
>> shouldn't be there in the JDK documentation.
>> 
>> Therefore `HtmlTree.add(Content)` still checks for and drops empty content 
>> arguments. Instead, I added a new `HtmlTree.addUnchecked(Content)` method 
>> that adds the argument without the checks. The new method is only used 5 
>> times in the whole codebase. It replaces the use of the special 
>> `HtmlTree.EMPTY` content token which is no longer needed.
>> 
>> A few remarks about the rewritten `HtmlTree.isEmpty()` method: its purpose 
>> is to determine whether content is missing in an element that should have 
>> content. It therefore always returns `false` for elements that are expected 
>> or allowed to be without content. This is maybe a bit counter-intuitive, but 
>> it is what is needed. We could do a combined check such as `isVoid() || 
>> !isEmpty()` but that would still leave out elements that *can* be empty, 
>> such as `<script>`.
>> 
>> The implementation of `HtmlTree.isEmpty()` is deliberately simple and 
>> conservative. For instance, it doesn't look at attributes to decide whether 
>> an element is allowed to be empty. The rationale for this is to make the 
>> behavior as predictable as possible and avoid surprises.
>> 
>> Since we no longer have a validity check in `HtmlTree.add(Content)` I had to 
>> remove a few lines of code in `TestHtmlDocument.java` that expected invalid 
>> tags to be dropped. Otherwise there are no test changes, as this is a 
>> noreg-cleanup task. I did compare the javadoc JDK documention before and 
>> after this change, the output is unchanged.
>
> Hannes Wallnöfer has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Tweak discardability criteria

We've maybe not seen the last of this, but this is an improvement on what was 
there before.

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

Marked as reviewed by jjg (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/7159

Reply via email to