[External] : RE: Docs generated by Java8 Javadoc are incompatible with "javadoc -source 8"

Jonathan Gibbons jonathan.gibbons at oracle.com
Thu Jan 5 00:31:38 UTC 2023


For the main issue in your email, there is no reasonable general 
solution. [But, see a suggestion below].

The underlying problem is that there was a series of releases where some 
incompatible changes were made, for the best of reasons, in the form of 
the names used for anchors/ids.

In JDK 7, the output format was HTML, but the anchors were unencoded, 
and even included whitespace characters, and thus reported as invalid by 
HTML syntax checkers, such as `HtmlTidy`.

In JDK 8, the anchors were encoded, so that the generated HTML files 
could be validated for conformance.

In JDK 9, HTML 5 became an option, allowing the use of unencoded anchors 
again (without whitespace)

In JDK 11, HTML 5 became the default, with an unsuppressable warning 
given if HTML 4 was requested.

In JDK 13, support for HTML 4 was removed, and thus all output was HTML 
5, with legal/unencoded anchors.

Throughout this transition period, there was nowhere to easily record 
the form of the anchors used in the generated documentation, leading to 
the kind of compatibility problems we are discussing here.

So, the problem primarily exists when trying to link to older API.  Docs 
generated with JDK 7 are not interesting, because the release is no 
longer supported, and the docs were generally broken/invalid.   Docs 
generated with JDK 8 are potentially of interest, because it is still a 
supported version. Docs generated with 9 and 10 are less interesting 
just because those are older releases that are no longer supported, 
although I accept that support (or lack thereof) for the JDK version 
does not imply support (or lack thereof) for unrelated end-user libraries.

So, to summarize, I do think that the presence of package-list or 
element-list is a reasonable default proxy to indicate the style of 
anchors in generated documentation, even if it is not always 100% 
accurate.  I agree with your sentiment that it is not reasonable to 
grovel through files looking for anchors, although it might be 
interesting to see how much you could infer from a standard file in any 
generated API, like `index.html`.  That leaves only one option (sic) 
which would be to either provide a new command-line option to specify 
the encoding used for anchors/ids in any given API, or to enhance the 
existing `-link`/`-linkoffline` options to allow that information to be 
provided.  But, while I think it is reasonable to provide the ability to 
link to APIs generated with JDK 8, I'm not sure it is worth the effort 
to be able to link to API documentation generated with other older 
releases that are no longer supported. Ideally, those libraries should 
be using supported JDK releases, and the package-list/element-list trick 
will be "good enough".

-- Jon

On 12/27/22 2:28 AM, Roman Marchenko wrote:
> Hi Jon and Hannes,
> Thank you for reviewing my proposal. As far as I understand, it's suggested to use element/package-list file presence rather than using "-source" option to determine a type of anchors. This is needed because there are docs generated by some "recent" code, so, in case of a fix, we would like to keep backward compatibility and satisfy all the cases.
> I tried some experiments with javadoc and 3rd party libs, and I've found Dagger library. Its docs are located herehttps://urldefense.com/v3/__https://dagger.dev/api/2.0/__;!!ACWV5N9M2RV99hQ!PSu9axKvSpAzp-jvCGznT0naE57tmmB9s9GVHwG1QgKm-FGttuG-Ai-6lp_sXSCo8hy2GM-CVycT1ZA3bkxJLYau$  .
> Dagger docs contain "package-list" file. Additionally, headers of html files contain "HTML 4" marks. However, all its anchors are "new" style, e.g.https://urldefense.com/v3/__https://dagger.dev/api/2.0/dagger/Lazy.html*get()__;Iw!!ACWV5N9M2RV99hQ!PSu9axKvSpAzp-jvCGznT0naE57tmmB9s9GVHwG1QgKm-FGttuG-Ai-6lp_sXSCo8hy2GM-CVycT1ZA3bpT3Hn7j$  . I have no idea how it could happen. Is this case a kind of a bug or was it generated by some "legal" version of javadoc we need to support? Perhaps it could be analyzed through all the pages to find a link to any class method to determine a type of anchors, but, I guess, this approach is too complicated.

More information about the javadoc-dev mailing list