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

Reply via email to