javac not enforcing module boundaries?

Peter Levart peter.levart at gmail.com
Mon Sep 14 19:35:42 UTC 2015



On 09/14/2015 11:14 AM, Alan Bateman wrote:
> On 14/09/2015 09:22, Peter Levart wrote:
>> :
>>
>> Gives the following runtime error:
>>
>> Exception in thread "main" java.lang.IllegalAccessError: class 
>> pkgA.TestA (in module: modA) cannot access class pkgC.TypeC (in 
>> module: modC), modA cannot read modC
>>         at pkgA.TestA.main(modA@/TestA.java:8)
>>
>>
>> Which is expected. What I didn't expect is that javac did not figure 
>> this out correctly. Am I missing something and not using javac in the 
>> right way?
>
> The API exported by modB has a method that returns an instance of 
> pkgC.TypeC so I would have expected modB to be a good citizen and 
> "requires public modC". Similarly, with the API exported by modC where 
> is returns an instance of pkgD.TypeD, I would have expected modC to 
> "requires public modD". I will guess that you've set it up this way to 
> probe more into implied readability.

That's right. I checked whether the implied readability is transitive. 
It looks like it is, which is what I have expected.

>
> The javac command looks right, I see that it also doesn't fail when 
> the modules are compiled separately (D, C, B, A).
>
> -Alan.

So this must be a javac bug, right?

Regards, Peter



More information about the jigsaw-dev mailing list