Misleading compiler.err.cant.apply.symbol.1 when base class constructor is inaccessible
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Fri Nov 24 21:28:32 UTC 2017
You are right - this is a long standing behavior - in javac the
accessibility check is done very late, typically after checking for
applicability; on the other hand, the JLS rules out candidates very
early in the overload resolution process, so in this case the JLS would
say there's no constructor. I believe the spirit of the implemented
logic was to provide more information to the user, rather than just say
'cannot find symbol', but I agree with you that, while this normally
works ok, in this specific case the error message ends up being misleading.
Thanks
Maurizio
On 24/11/17 20:10, Daniel Trebbien wrote:
> As reported here https://netbeans.org/bugzilla/show_bug.cgi?id=222487#c2
> javac can produce a misleading compiler.err.cant.apply.symbol.1 error
> message in cases where the base class constructor is inaccessible,
> either because it is private or package-private.
>
> Take the following two files:
>
> // base/Base.java
> package base;
> public class Base {
> Base(String value) { }
> }
>
> // Derived.java
> import base.Base;
> public class Derived extends Base { }
>
> javac 9.0.1 produces the following:
>
> src/Derived.java:2: error: constructor Base in class Base cannot be
> applied to given types;
>
> public class Derived extends Base { }
>
> ^
>
> required: String
>
> found: no arguments
>
> reason: actual and formal argument lists differ in length
>
>
> This is misleading because it implies that by adding a Derived
> constructor to call Base(String), that the error can be fixed;
> however, doing so results in a compiler.err.report.access error
> because the Base(String) constructor is not accessible:
>
> src/Derived.java:4: error: Base(String) is not public in Base; cannot
> be accessed from outside package
>
> super(value);
>
> ^
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20171124/d3d407a9/attachment-0001.html>
More information about the compiler-dev
mailing list