44
45 public static Object invoke(Method m, Object obj, Object[] params)
46 throws InvocationTargetException, IllegalAccessException {
47
48 // Check that the class in question is in a package that is open to
49 // this module (or exported unconditionally). If so, then we will open
50 // the containing package to the unnamed trampoline module. If not,
51 // we will throw an IllegalAccessException in order to generate a
52 // clearer error message.
53 final Class<?> clazz = m.getDeclaringClass();
54 final String packageName = clazz.getPackage().getName();
55 final Module module = clazz.getModule();
56 final Module thisModule = MethodHelper.class.getModule();
57 try {
58 // Verify that the module being called either exports the package
59 // in question unconditionally or opens the package in question to
60 // this module.
61 if (!module.isExported(packageName)) {
62 if (!module.isOpen(packageName, thisModule)) {
63 throw new IllegalAccessException(
64 "class " + MethodHelper.class.getName()
65 + " cannot access class " + clazz.getName()
66 + " (in module " + module.getName()
67 + ") because module " + module.getName()
68 + " does not open " + packageName
69 + " to " + thisModule.getName());
70 }
71 if (!module.isOpen(packageName, trampolineModule)) {
72 ReflectUtil.checkPackageAccess(packageName);
73 module.addOpens(packageName, trampolineModule);
74 }
75 }
76 } catch (IllegalAccessException ex) {
77 if (logAccessErrors) {
78 ex.printStackTrace(System.err);
79 }
80 throw ex;
81 }
82
83 return MethodUtil.invoke(m, obj, params);
84 }
|
44
45 public static Object invoke(Method m, Object obj, Object[] params)
46 throws InvocationTargetException, IllegalAccessException {
47
48 // Check that the class in question is in a package that is open to
49 // this module (or exported unconditionally). If so, then we will open
50 // the containing package to the unnamed trampoline module. If not,
51 // we will throw an IllegalAccessException in order to generate a
52 // clearer error message.
53 final Class<?> clazz = m.getDeclaringClass();
54 final String packageName = clazz.getPackage().getName();
55 final Module module = clazz.getModule();
56 final Module thisModule = MethodHelper.class.getModule();
57 try {
58 // Verify that the module being called either exports the package
59 // in question unconditionally or opens the package in question to
60 // this module.
61 if (!module.isExported(packageName)) {
62 if (!module.isOpen(packageName, thisModule)) {
63 throw new IllegalAccessException(
64 "module " + thisModule.getName()
65 + " cannot access class " + clazz.getName()
66 + " (in module " + module.getName()
67 + ") because module " + module.getName()
68 + " does not open " + packageName
69 + " to " + thisModule.getName());
70 }
71 if (!module.isOpen(packageName, trampolineModule)) {
72 ReflectUtil.checkPackageAccess(packageName);
73 module.addOpens(packageName, trampolineModule);
74 }
75 }
76 } catch (IllegalAccessException ex) {
77 if (logAccessErrors) {
78 ex.printStackTrace(System.err);
79 }
80 throw ex;
81 }
82
83 return MethodUtil.invoke(m, obj, params);
84 }
|