51 // Create a Layer over the boot layer. |
51 // Create a Layer over the boot layer. |
52 // Define modules within this layer to test access between |
52 // Define modules within this layer to test access between |
53 // publically defined classes within packages of those modules. |
53 // publically defined classes within packages of those modules. |
54 public void createLayerOnBoot() throws Throwable { |
54 public void createLayerOnBoot() throws Throwable { |
55 |
55 |
56 // Define module: m1 |
56 // Define module: m1x |
57 // Can read: java.base, m2 |
57 // Can read: java.base, m2x |
58 // Packages: p1 |
58 // Packages: p1 |
59 // Packages exported: p1 is exported unqualifiedly |
59 // Packages exported: p1 is exported unqualifiedly |
60 ModuleDescriptor descriptor_m1 = |
60 ModuleDescriptor descriptor_m1x = |
61 ModuleDescriptor.module("m1") |
61 ModuleDescriptor.newModule("m1x") |
62 .requires("java.base") |
62 .requires("java.base") |
63 .requires("m2") |
63 .requires("m2x") |
64 .exports("p1") |
64 .exports("p1") |
65 .build(); |
65 .build(); |
66 |
66 |
67 // Define module: m2 |
67 // Define module: m2x |
68 // Can read: java.base |
68 // Can read: java.base |
69 // Packages: p2 |
69 // Packages: p2 |
70 // Packages exported: p2 is exported qualifiedly to m1 |
70 // Packages exported: p2 is exported qualifiedly to m1x |
71 ModuleDescriptor descriptor_m2 = |
71 ModuleDescriptor descriptor_m2x = |
72 ModuleDescriptor.module("m2") |
72 ModuleDescriptor.newModule("m2x") |
73 .requires("java.base") |
73 .requires("java.base") |
74 .exports("p2", Set.of("m1")) |
74 .exports("p2", Set.of("m1x")) |
75 .build(); |
75 .build(); |
76 |
76 |
77 // Set up a ModuleFinder containing all modules for this layer. |
77 // Set up a ModuleFinder containing all modules for this layer. |
78 ModuleFinder finder = ModuleLibrary.of(descriptor_m1, descriptor_m2); |
78 ModuleFinder finder = ModuleLibrary.of(descriptor_m1x, descriptor_m2x); |
79 |
79 |
80 // Resolves "m1" |
80 // Resolves "m1x" |
81 Configuration cf = Layer.boot() |
81 Configuration cf = Layer.boot() |
82 .configuration() |
82 .configuration() |
83 .resolveRequires(finder, ModuleFinder.of(), Set.of("m1")); |
83 .resolve(finder, ModuleFinder.of(), Set.of("m1x")); |
84 |
84 |
85 // map each module to the same class loader for this test |
85 // map each module to the same class loader for this test |
86 Map<String, ClassLoader> map = new HashMap<>(); |
86 Map<String, ClassLoader> map = new HashMap<>(); |
87 map.put("m1", MySameClassLoader.loader1); |
87 map.put("m1x", MySameClassLoader.loader1); |
88 map.put("m2", MySameClassLoader.loader1); |
88 map.put("m2x", MySameClassLoader.loader1); |
89 |
89 |
90 // Create Layer that contains m1 & m2 |
90 // Create Layer that contains m1x & m2x |
91 Layer layer = Layer.boot().defineModules(cf, map::get); |
91 Layer layer = Layer.boot().defineModules(cf, map::get); |
92 |
92 |
93 assertTrue(layer.findLoader("m1") == MySameClassLoader.loader1); |
93 assertTrue(layer.findLoader("m1x") == MySameClassLoader.loader1); |
94 assertTrue(layer.findLoader("m2") == MySameClassLoader.loader1); |
94 assertTrue(layer.findLoader("m2x") == MySameClassLoader.loader1); |
95 |
95 |
96 // now use the same loader to load class p1.c1 |
96 // now use the same loader to load class p1.c1 |
97 Class p1_c1_class = MySameClassLoader.loader1.loadClass("p1.c1"); |
97 Class p1_c1_class = MySameClassLoader.loader1.loadClass("p1.c1"); |
98 try { |
98 try { |
99 p1_c1_class.newInstance(); |
99 p1_c1_class.newInstance(); |
100 } catch (IllegalAccessError e) { |
100 } catch (IllegalAccessError e) { |
101 throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1"); |
101 throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1x"); |
102 } |
102 } |
103 } |
103 } |
104 |
104 |
105 public static void main(String args[]) throws Throwable { |
105 public static void main(String args[]) throws Throwable { |
106 ExpQualToM1 test = new ExpQualToM1(); |
106 ExpQualToM1 test = new ExpQualToM1(); |