Implied readability + layers
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Fri Nov 6 20:21:26 UTC 2015
Hi,
On Fri, Nov 6, 2015 at 9:20 PM, Alex Buckley <alex.buckley at oracle.com>
wrote:
>
>>
>> importcom.bar.Bar;
>> public classBaz {
>> publicString baz(){return newBar().bar();}
>> publicBar bar(){
>> return newBar();
>> }
>> }
>>
>
> I expect javac will warn about the bar() method of class Baz. As a public
> method in a public type in an exported package, its return type is from
> another module (com.bar), yet module com.baz doesn't set up implied
> readability to that other module. Anyway, moving on.
>
As said in Alan's response this is my bad and I missed requires public.
>
> layer 2: com.foo and com.bar at 2
>> --------------------
>> module com.bar {//version2
>>
>> exports com.bar;
>> }
>>
>> -------------
>>
>> //Bar.java
>>
>> packagecom.bar;
>>
>> public classBar {
>> publicString bar(){return"bar2";}
>> }
>>
>> -------------
>>
>> module com.foo {
>> requires com.baz;
>>
>> exports com.foo;
>>
>> }
>>
>> -------------
>>
>> Foo.java
>>
>> packagecom.foo;
>>
>> importcom.bar.Bar;
>> importcom.baz.Baz;
>>
>> public classMain {
>> public static voidmain(String[] args) {
>> System.out.println(newBaz().baz());
>> System.out.println(newBar().bar());
>> }
>> }
>>
>
> Foo.java should not compile. 'import com.bar.Bar' names a type that is
> inaccessible from module foo. This makes the rest of the scenario moot.
>
>>
>>
>> I say this is puzzling since with almost the equivalent code I get
>> another result. If you want I can show for you in another post.
>>
>
> It is puzzling. By specifying com.bar at 2 as one of the root modules in
> cfg2, you have managed to get layer2's loader to load the class com.bar.Bar
> from com.bar at 2. And code in module foo can access that class, despite
> module foo not reading any com.bar module.
>
I sent test files directly to your mail.
--
Best Regards,
Ali Ebrahimi
More information about the jigsaw-dev
mailing list