On Mon, 17 May 2021 17:39:19 GMT, liach <github.com+7806504+li...@openjdk.org> 
wrote:

>> This change fixes when a method body has only inline tags that produce no 
>> output, the method summary will get eaten.
>> 
>> This change allows `{@inheritDoc}` from empty parents to go through the code 
>> path used by `-nocomment` and properly generate tables.
>> 
>> All `jtreg:test/langtools/jdk/javadoc/doclet` tests pass.
>
> liach has refreshed the contents of this pull request, and previous commits 
> have been removed. The incremental views will show differences compared to 
> the previous content of the PR.

So I will share how I reached this as the solution than patching at somewhere 
else in the code path:

First, I directly modified 
https://github.com/openjdk/jdk/blob/894547d2c102dcbe1f9ec8a1edb11c6b31e4270e/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java#L1293
 check to include the case when the contents generated by first-sentence inline 
tags are invalid (not just empty, so `<div class="block"></div>` would be 
included). However, this inserts extraneous no-break whitespaces to all-package 
index and fails one test.

Then, I patched at 
https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SubWriterHolderWriter.java#L145
 to make it insert a no-break whitespace in order to prevent cell deletion. 
However, this breaks `-nocomment`, and I figured that reusing `-nocomment`'s 
code path would be the best approach as a result, which is the current PR.

----------
> (1) Why does the lower level that prints out HTML leave out pieces of 
> structure?

https://github.com/openjdk/jdk/blob/894547d2c102dcbe1f9ec8a1edb11c6b31e4270e/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Table.java#L330-L331

It's done by this piece of code afai see.

> (2) Why does the higher level that creates this structure knows about and 
> works around that behavior of the lower level?

This would be more fascinating. In that method, there is a whitespace 
insertion, which is used for like methods without `/** */` comments. So there 
are two ways to handle the empty comments, and I find out for resolving this 
issue, reusing the one used by `-nocomment` is easier and more compatible than 
reusing that used by regular empty methods.

--------

So this check in `Table` introduced in 
[JDK-8256580](https://bugs.openjdk.java.net/browse/JDK-8256580) (#1438) might 
have been the culprit.

If we seek a more comprehensive change, I personally would keep the change 
introduced in 8256580 and remove the original no-break whitespace insertion, so 
we consistently yield empty content for empty comments, and we can then 
properly handle these empty comments downstream.

What are your thoughts?

Another update: just checked 8256580, and the problem is exactly the same as 
what we see here.

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

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

Reply via email to