Confusing error message for inner non-public service provider
Alex Buckley
alex.buckley at oracle.com
Thu Feb 9 23:07:40 UTC 2017
On 2/9/2017 2:49 PM, Vicente Romero wrote:
> Just to double check, the right javac behavior in this case should be to
> issue similar errors in both cases like:
>
> some position here: error: ServiceImpl is not public in
> com.example.internal; cannot be accessed from outside package
It's correct to give an error, but the clause "cannot be accessed from
outside package" should be dropped (it's not relevant to ServiceLoader).
> some other position here: error: Outer.ServiceImpl is not public in
> com.example.internal; cannot be accessed from outside package
It's not correct to give an error at all. The JLS (acting on behalf of
ServiceLoader) is not interested in the class Outer.ServiceImpl being
"accessible" by some arbitrary client. All the JLS wants is for the
class to be 'public'.
> without mentioning in any case anything about visibility right?
Correct. All the types we're discussing are in the same module so they
(and their packages) are all visible to each other; package visibility
is irrelevant to this example.
Alex
More information about the jigsaw-dev
mailing list