This adds exception documentation to JDK methods that would otherwise lose that 
documentation once JDK-8287796 is integrated. While adding this exception 
documentation now does not change [^1] the JDK API Documentation, it will 
automatically counterbalance the effect that JDK-8287796 will have.

JDK-8287796 seeks to remove an old, undocumented, and esoteric javadoc feature 
that cannot be suppressed [^2]. The feature is so little known about that IDEs 
either do not implement it correctly or do not implement it at all, thus 
rendering documentation differently from how the javadoc tool renders it.

That feature was introduced in JDK-4947455 and manifests as follows. If a 
method inherits documentation for an exception, along with that documentation 
the method automatically inherits documentation for all exceptions that are 
subclasses of that former exception and are documented in an overridden method.

To illustrate that behavior, consider the following example. A method 
`Subtype.m` inherits documentation for `SuperException`, while the overridden 
method `Supertype.m` documents `SuperException`, `SubExceptionA` and 
`SubExceptionB`, where the latter two exceptions are subclasses of the former 
exception:

    public class Subtype extends Supertype {

        @Override
        public void m() throws SuperException {
    ...

    public class Supertype {

        /**
         * @throws SuperException general problem
         * @throws SubExceptionA  specific problem A
         * @throws SubExceptionB  specific problem B
         */
        public void m() throws SuperException {
    ...

    public class SuperException extends Exception {
    ...

    public class SubExceptionA extends SuperException {
    ...

    public class SubExceptionB extends SuperException {
    ...

For the above example, the API Documentation for `Subtype.m` will contain 
documentation for all three exceptions; the page fragment for `Subtype.m` in 
"Method Details" will look like this:

    public void m()
           throws SuperException

    Overrides:
        m in class Supertype
    Throws:
        SuperException - general problem
        SubExceptionA - specific problem A
        SubExceptionB - specific problem B 

It works for checked and unchecked exceptions, for methods in classes and 
interfaces.


If it's the first time you hear about that behavior and this change affects 
your area, it's a good opportunity to reflect on whether the exception 
documentation this change adds is really needed or you were simply unaware of 
the fact that it was automatically added before. If exception documentation is 
not needed, please comment on this PR. Otherwise, consider approving it.

Keep in mind that if some exception documentation is not needed, **leaving it 
out** from this PR might require a CSR.


[^1]: Aside from insignificant changes on class-use and index pages. There's 
one relatively significant change. This change is in jdk.jshell, where some 
methods disappeared from "Methods declared in ..." section and other 
irregularities. We are aware of this and have filed JDK-8291803 to fix the root 
cause.
[^2]: In reality, the feature can be suppressed, but it looks like a bug rather 
than intentional design. If we legitimize the feature and its suppression 
behavior, the model for exception documentation inheritance might become much 
more complicated.

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

Commit messages:
 - Initial commit

Changes: https://git.openjdk.org/jdk/pull/10449/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10449&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8294377
  Stats: 322 lines in 15 files changed: 311 ins; 0 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/10449.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10449/head:pull/10449

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

Reply via email to