24
24
*/
25
25
package com .oracle .svm .util ;
26
26
27
- import java .util .NoSuchElementException ;
28
27
import java .util .Objects ;
29
28
import java .util .Optional ;
30
29
import java .util .Set ;
@@ -90,6 +89,13 @@ public static void accessModuleByClass(Access access, Class<?> accessingClass, C
90
89
accessModuleByClass (access , accessingClass , declaringClass .getModule (), declaringClass .getPackageName ());
91
90
}
92
91
92
+ @ SuppressWarnings ("serial" )
93
+ public static final class ModuleSupportError extends Error {
94
+ private ModuleSupportError (String message ) {
95
+ super (message );
96
+ }
97
+ }
98
+
93
99
/**
94
100
* Open or export packages {@code packageNames} in the module named {@code moduleName} to module
95
101
* of given {@code accessingClass}. If {@code accessingClass} is null packages are opened or
@@ -98,30 +104,25 @@ public static void accessModuleByClass(Access access, Class<?> accessingClass, C
98
104
*/
99
105
@ Platforms (Platform .HOSTED_ONLY .class )
100
106
public static void accessPackagesToClass (Access access , Class <?> accessingClass , boolean optional , String moduleName , String ... packageNames ) {
101
- Module declaringModule = getModule (moduleName , optional );
102
- if (declaringModule == null ) {
103
- return ;
107
+ Objects .requireNonNull (moduleName );
108
+ Optional <Module > module = ModuleLayer .boot ().findModule (moduleName );
109
+ if (module .isEmpty ()) {
110
+ if (optional ) {
111
+ return ;
112
+ }
113
+ String accessor = accessingClass != null ? "class " + accessingClass .getTypeName () : "ALL-UNNAMED" ;
114
+ String message = access .name ().toLowerCase () + " of packages from module " + moduleName + " to " +
115
+ accessor + " failed. No module named " + moduleName + " in boot layer." ;
116
+ throw new ModuleSupportError (message );
104
117
}
118
+ Module declaringModule = module .get ();
105
119
Objects .requireNonNull (packageNames );
106
120
Set <String > packages = packageNames .length > 0 ? Set .of (packageNames ) : declaringModule .getPackages ();
107
121
for (String packageName : packages ) {
108
122
accessModuleByClass (access , accessingClass , declaringModule , packageName );
109
123
}
110
124
}
111
125
112
- @ Platforms (Platform .HOSTED_ONLY .class )
113
- private static Module getModule (String moduleName , boolean optional ) {
114
- Objects .requireNonNull (moduleName );
115
- Optional <Module > declaringModuleOpt = ModuleLayer .boot ().findModule (moduleName );
116
- if (declaringModuleOpt .isEmpty ()) {
117
- if (optional ) {
118
- return null ;
119
- }
120
- throw new NoSuchElementException (moduleName );
121
- }
122
- return declaringModuleOpt .get ();
123
- }
124
-
125
126
@ Platforms (Platform .HOSTED_ONLY .class )
126
127
private static void accessModuleByClass (Access access , Class <?> accessingClass , Module declaringModule , String packageName ) {
127
128
Module namedAccessingModule = null ;
0 commit comments