2424 */
2525package com .oracle .svm .util ;
2626
27- import java .util .NoSuchElementException ;
2827import java .util .Objects ;
2928import java .util .Optional ;
3029import java .util .Set ;
@@ -90,6 +89,13 @@ public static void accessModuleByClass(Access access, Class<?> accessingClass, C
9089 accessModuleByClass (access , accessingClass , declaringClass .getModule (), declaringClass .getPackageName ());
9190 }
9291
92+ @ SuppressWarnings ("serial" )
93+ public static final class ModuleSupportError extends Error {
94+ private ModuleSupportError (String message ) {
95+ super (message );
96+ }
97+ }
98+
9399 /**
94100 * Open or export packages {@code packageNames} in the module named {@code moduleName} to module
95101 * of given {@code accessingClass}. If {@code accessingClass} is null packages are opened or
@@ -98,30 +104,24 @@ public static void accessModuleByClass(Access access, Class<?> accessingClass, C
98104 */
99105 @ Platforms (Platform .HOSTED_ONLY .class )
100106 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 message = access .name ().toLowerCase () + " of packages from module " + moduleName + " to class " +
114+ accessingClass .getTypeName () + " failed. No module named " + moduleName + " in boot layer." ;
115+ throw new ModuleSupportError (message );
104116 }
117+ Module declaringModule = module .get ();
105118 Objects .requireNonNull (packageNames );
106119 Set <String > packages = packageNames .length > 0 ? Set .of (packageNames ) : declaringModule .getPackages ();
107120 for (String packageName : packages ) {
108121 accessModuleByClass (access , accessingClass , declaringModule , packageName );
109122 }
110123 }
111124
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-
125125 @ Platforms (Platform .HOSTED_ONLY .class )
126126 private static void accessModuleByClass (Access access , Class <?> accessingClass , Module declaringModule , String packageName ) {
127127 Module namedAccessingModule = null ;
0 commit comments