On 2/02/2022 10:46 pm, Pavel Rappo wrote:
On Wed, 2 Feb 2022 12:06:39 GMT, David Holmes <dhol...@openjdk.org> wrote:
While looking into guts of javadoc comment inheritance, I noticed that a number
of places in JDK seem to confuse JLS 8.4.6.** with JLS 8.4.8.**.
Granted, "8.4.6 Method Throws" tangentially addresses overriding. However, I believe that
the real target should be "8.4.8. Inheritance, Overriding, and Hiding" and its
subsections.
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java line 1793:
1791: }
1792:
1793: // Error if static method overrides instance method (JLS 8.4.8.2).
"overrides" should be "hides"
Although you seem to be correct, the error messages and the code around operate using the
term "override":
Ah yes, I can see now that "overrides" is (incorrectly) used all through
this code and even in the error messages. It is a subtle distinction.
Cheers,
David
-----
// Error if static method overrides instance method (JLS 8.4.8.2).
if ((m.flags() & STATIC) != 0 &&
(other.flags() & STATIC) == 0) {
log.error(TreeInfo.diagnosticPositionFor(m, tree),
Errors.OverrideStatic(cannotOverride(m, other)));
m.flags_field |= BAD_OVERRIDE;
return;
}
// Error if instance method overrides static or final
// method (JLS 8.4.8.1).
if ((other.flags() & FINAL) != 0 ||
(m.flags() & STATIC) == 0 &&
(other.flags() & STATIC) != 0) {
log.error(TreeInfo.diagnosticPositionFor(m, tree),
Errors.OverrideMeth(cannotOverride(m, other),
asFlagSet(other.flags() & (FINAL |
STATIC))));
m.flags_field |= BAD_OVERRIDE;
return;
}
/**
* compiler.err.override.static=\
* {0}\n\
* overriding method is static
*/
public static Error OverrideStatic(Fragment arg0) {
return new Error("compiler", "override.static", arg0);
}
Compiler folk, what do you think?
-------------
PR: https://git.openjdk.java.net/jdk/pull/7311