46 import java.util.Map; |
46 import java.util.Map; |
47 import java.util.Set; |
47 import java.util.Set; |
48 import myloaders.MyDiffClassLoader; |
48 import myloaders.MyDiffClassLoader; |
49 |
49 |
50 // |
50 // |
51 // ClassLoader1 --> defines m1 --> no packages |
51 // ClassLoader1 --> defines m1x --> no packages |
52 // ClassLoader2 --> defines m2 --> packages p2 |
52 // ClassLoader2 --> defines m2x --> packages p2 |
53 // |
53 // |
54 // m1 can read m2 |
54 // m1x can read m2x |
55 // package p2 in m2 is exported unqualifiedly. |
55 // package p2 in m2x is exported unqualifiedly. |
56 // |
56 // |
57 // class p1.c1 defined in an unnamed module tries to access p2.c2 defined in m2 |
57 // class p1.c1 defined in an unnamed module tries to access p2.c2 defined in m2x |
58 // Access allowed, an unnamed module can read all modules and p2 in module |
58 // Access allowed, an unnamed module can read all modules and p2 in module |
59 // m2 which is exported unqualifiedly. |
59 // m2x which is exported unqualifiedly. |
60 // |
60 // |
61 public class UmodDiffCL_ExpUnqual { |
61 public class UmodDiffCL_ExpUnqual { |
62 |
62 |
63 // Create a Layer over the boot layer. |
63 // Create a Layer over the boot layer. |
64 // Define modules within this layer to test access between |
64 // Define modules within this layer to test access between |
65 // publically defined classes within packages of those modules. |
65 // publically defined classes within packages of those modules. |
66 public void createLayerOnBoot() throws Throwable { |
66 public void createLayerOnBoot() throws Throwable { |
67 |
67 |
68 // Define module: m1 |
68 // Define module: m1x |
69 // Can read: java.base, m2 |
69 // Can read: java.base, m2x |
70 // Packages: none |
70 // Packages: none |
71 // Packages exported: none |
71 // Packages exported: none |
72 ModuleDescriptor descriptor_m1 = |
72 ModuleDescriptor descriptor_m1x = |
73 ModuleDescriptor.module("m1") |
73 ModuleDescriptor.newModule("m1x") |
74 .requires("java.base") |
74 .requires("java.base") |
75 .requires("m2") |
75 .requires("m2x") |
76 .build(); |
76 .build(); |
77 |
77 |
78 // Define module: m2 |
78 // Define module: m2x |
79 // Can read: java.base |
79 // Can read: java.base |
80 // Packages: p2 |
80 // Packages: p2 |
81 // Packages exported: none |
81 // Packages exported: none |
82 ModuleDescriptor descriptor_m2 = |
82 ModuleDescriptor descriptor_m2x = |
83 ModuleDescriptor.module("m2") |
83 ModuleDescriptor.newModule("m2x") |
84 .requires("java.base") |
84 .requires("java.base") |
85 .exports("p2") |
85 .exports("p2") |
86 .build(); |
86 .build(); |
87 |
87 |
88 // Set up a ModuleFinder containing all modules for this layer. |
88 // Set up a ModuleFinder containing all modules for this layer. |
89 ModuleFinder finder = ModuleLibrary.of(descriptor_m1, descriptor_m2); |
89 ModuleFinder finder = ModuleLibrary.of(descriptor_m1x, descriptor_m2x); |
90 |
90 |
91 // Resolves "m1" |
91 // Resolves "m1x" |
92 Configuration cf = Layer.boot() |
92 Configuration cf = Layer.boot() |
93 .configuration() |
93 .configuration() |
94 .resolveRequires(finder, ModuleFinder.of(), Set.of("m1")); |
94 .resolve(finder, ModuleFinder.of(), Set.of("m1x")); |
95 |
95 |
96 // map each module to differing class loaders for this test |
96 // map each module to differing class loaders for this test |
97 Map<String, ClassLoader> map = new HashMap<>(); |
97 Map<String, ClassLoader> map = new HashMap<>(); |
98 map.put("m1", MyDiffClassLoader.loader1); |
98 map.put("m1x", MyDiffClassLoader.loader1); |
99 map.put("m2", MyDiffClassLoader.loader2); |
99 map.put("m2x", MyDiffClassLoader.loader2); |
100 |
100 |
101 // Create Layer that contains m1 & m2 |
101 // Create Layer that contains m1x & m2x |
102 Layer layer = Layer.boot().defineModules(cf, map::get); |
102 Layer layer = Layer.boot().defineModules(cf, map::get); |
103 |
103 |
104 assertTrue(layer.findLoader("m1") == MyDiffClassLoader.loader1); |
104 assertTrue(layer.findLoader("m1x") == MyDiffClassLoader.loader1); |
105 assertTrue(layer.findLoader("m2") == MyDiffClassLoader.loader2); |
105 assertTrue(layer.findLoader("m2x") == MyDiffClassLoader.loader2); |
106 assertTrue(layer.findLoader("java.base") == null); |
106 assertTrue(layer.findLoader("java.base") == null); |
107 |
107 |
108 // NOTE: module m1 does not define a package named p1. |
108 // NOTE: module m1x does not define a package named p1. |
109 // p1 will be loaded in an unnamed module. |
109 // p1 will be loaded in an unnamed module. |
110 Class p1_c1_class = MyDiffClassLoader.loader1.loadClass("p1.c1"); |
110 Class p1_c1_class = MyDiffClassLoader.loader1.loadClass("p1.c1"); |
111 try { |
111 try { |
112 p1_c1_class.newInstance(); |
112 p1_c1_class.newInstance(); |
113 } catch (IllegalAccessError e) { |
113 } catch (IllegalAccessError e) { |
114 throw new RuntimeException("Test Failed, p1.c1 defined in unnamed module can access p2.c2 in module m2"); |
114 throw new RuntimeException("Test Failed, p1.c1 defined in unnamed module can access p2.c2 in module m2x"); |
115 } |
115 } |
116 } |
116 } |
117 |
117 |
118 public static void main(String args[]) throws Throwable { |
118 public static void main(String args[]) throws Throwable { |
119 UmodDiffCL_ExpUnqual test = new UmodDiffCL_ExpUnqual(); |
119 UmodDiffCL_ExpUnqual test = new UmodDiffCL_ExpUnqual(); |