40 public class JVMAddModuleExportsToAll {
41
42 // Test a series of error conditions for API JVM_AddModuleExportsToAll()
43 // and then test that a class in the unnamed module can access a package in
44 // a named module that has been exported unqualifiedly.
45 public static void main(String args[]) throws Throwable {
46 Object m1x, m2x, m3x;
47
48 // Get the java.lang.reflect.Module object for module java.base.
49 Class jlObject = Class.forName("java.lang.Object");
50 Object jlObject_jlrM = jlObject.getModule();
51 assertNotNull(jlObject_jlrM, "jlrModule object of java.lang.Object should not be null");
52
53 // Get the class loader for JVMAddModuleExportsToAll and assume it's also used to
54 // load class p2.c2.
55 ClassLoader this_cldr = JVMAddModuleExportsToAll.class.getClassLoader();
56
57 // Define a module for p3.
58 m1x = ModuleHelper.ModuleObject("module_one", this_cldr, new String[] { "p3" });
59 assertNotNull(m1x, "Module should not be null");
60 ModuleHelper.DefineModule(m1x, "9.0", "m1x/there", new String[] { "p3" });
61 ModuleHelper.AddReadsModule(m1x, jlObject_jlrM);
62
63 // Define a module for p2.
64 m2x = ModuleHelper.ModuleObject("module_two", this_cldr, new String[] { "p2" });
65 assertNotNull(m2x, "Module should not be null");
66 ModuleHelper.DefineModule(m2x, "9.0", "m2x/there", new String[] { "p2" });
67 ModuleHelper.AddReadsModule(m2x, jlObject_jlrM);
68
69 try {
70 ModuleHelper.AddModuleExportsToAll((Module)null, "p2");
71 throw new RuntimeException("Failed to get the expected NPE for null module");
72 } catch(NullPointerException e) {
73 // Expected
74 }
75
76 try {
77 ModuleHelper.AddModuleExportsToAll(m2x, null);
78 throw new RuntimeException("Failed to get the expected NPE for null package");
79 } catch(NullPointerException e) {
80 // Expected
81 }
82
83 try { // Expect IAE when passing a ClassLoader object instead of a java.lang.reflect.Module object.
84 ModuleHelper.AddModuleExportsToAll(this_cldr, "p2");
85 throw new RuntimeException("Failed to get the expected IAE for bad module");
86 } catch(IllegalArgumentException e) {
88 }
89
90 try {
91 ModuleHelper.AddModuleExportsToAll(m2x, "p3");
92 throw new RuntimeException("Failed to get the expected IAE for package that is in another module");
93 } catch(IllegalArgumentException e) {
94 // Expected
95 }
96
97 try {
98 ModuleHelper.AddModuleExportsToAll(m2x, "p4");
99 throw new RuntimeException("Failed to get the expected IAE for package not in any module");
100 } catch(IllegalArgumentException e) {
101 // Expected
102 }
103
104 // Export package p2 in m2x unqualifiedly. Then, do a qualified export
105 // of p2 in m2x to m3x. This should not affect the unqualified export.
106 m3x = ModuleHelper.ModuleObject("module_three", this_cldr, new String[] { "p4" });
107 assertNotNull(m3x, "Module m3x should not be null");
108 ModuleHelper.DefineModule(m3x, "9.0", "m3x/there", new String[] { "p4" });
109 ModuleHelper.AddModuleExportsToAll(m2x, "p2");
110 ModuleHelper.AddModuleExports(m2x, "p2", m3x);
111
112 // p1.c1's ctor tries to call a method in p2.c2. This should succeed because
113 // p1 is in an unnamed module and p2.c2 is exported unqualifiedly.
114 Class p1_c1_class = Class.forName("p1.c1");
115 try {
116 Object c1_obj = p1_c1_class.newInstance();
117 } catch (IllegalAccessError f) {
118 throw new RuntimeException(
119 "Class in unnamed module could not access package p2 exported unqualifieldly");
120 }
121 }
122 }
123
|
40 public class JVMAddModuleExportsToAll {
41
42 // Test a series of error conditions for API JVM_AddModuleExportsToAll()
43 // and then test that a class in the unnamed module can access a package in
44 // a named module that has been exported unqualifiedly.
45 public static void main(String args[]) throws Throwable {
46 Object m1x, m2x, m3x;
47
48 // Get the java.lang.reflect.Module object for module java.base.
49 Class jlObject = Class.forName("java.lang.Object");
50 Object jlObject_jlrM = jlObject.getModule();
51 assertNotNull(jlObject_jlrM, "jlrModule object of java.lang.Object should not be null");
52
53 // Get the class loader for JVMAddModuleExportsToAll and assume it's also used to
54 // load class p2.c2.
55 ClassLoader this_cldr = JVMAddModuleExportsToAll.class.getClassLoader();
56
57 // Define a module for p3.
58 m1x = ModuleHelper.ModuleObject("module_one", this_cldr, new String[] { "p3" });
59 assertNotNull(m1x, "Module should not be null");
60 ModuleHelper.DefineModule(m1x, false, "9.0", "m1x/there", new String[] { "p3" });
61 ModuleHelper.AddReadsModule(m1x, jlObject_jlrM);
62
63 // Define a module for p2.
64 m2x = ModuleHelper.ModuleObject("module_two", this_cldr, new String[] { "p2" });
65 assertNotNull(m2x, "Module should not be null");
66 ModuleHelper.DefineModule(m2x, false, "9.0", "m2x/there", new String[] { "p2" });
67 ModuleHelper.AddReadsModule(m2x, jlObject_jlrM);
68
69 try {
70 ModuleHelper.AddModuleExportsToAll((Module)null, "p2");
71 throw new RuntimeException("Failed to get the expected NPE for null module");
72 } catch(NullPointerException e) {
73 // Expected
74 }
75
76 try {
77 ModuleHelper.AddModuleExportsToAll(m2x, null);
78 throw new RuntimeException("Failed to get the expected NPE for null package");
79 } catch(NullPointerException e) {
80 // Expected
81 }
82
83 try { // Expect IAE when passing a ClassLoader object instead of a java.lang.reflect.Module object.
84 ModuleHelper.AddModuleExportsToAll(this_cldr, "p2");
85 throw new RuntimeException("Failed to get the expected IAE for bad module");
86 } catch(IllegalArgumentException e) {
88 }
89
90 try {
91 ModuleHelper.AddModuleExportsToAll(m2x, "p3");
92 throw new RuntimeException("Failed to get the expected IAE for package that is in another module");
93 } catch(IllegalArgumentException e) {
94 // Expected
95 }
96
97 try {
98 ModuleHelper.AddModuleExportsToAll(m2x, "p4");
99 throw new RuntimeException("Failed to get the expected IAE for package not in any module");
100 } catch(IllegalArgumentException e) {
101 // Expected
102 }
103
104 // Export package p2 in m2x unqualifiedly. Then, do a qualified export
105 // of p2 in m2x to m3x. This should not affect the unqualified export.
106 m3x = ModuleHelper.ModuleObject("module_three", this_cldr, new String[] { "p4" });
107 assertNotNull(m3x, "Module m3x should not be null");
108 ModuleHelper.DefineModule(m3x, false, "9.0", "m3x/there", new String[] { "p4" });
109 ModuleHelper.AddModuleExportsToAll(m2x, "p2");
110 ModuleHelper.AddModuleExports(m2x, "p2", m3x);
111
112 // p1.c1's ctor tries to call a method in p2.c2. This should succeed because
113 // p1 is in an unnamed module and p2.c2 is exported unqualifiedly.
114 Class p1_c1_class = Class.forName("p1.c1");
115 try {
116 Object c1_obj = p1_c1_class.newInstance();
117 } catch (IllegalAccessError f) {
118 throw new RuntimeException(
119 "Class in unnamed module could not access package p2 exported unqualifieldly");
120 }
121 }
122 }
123
|