Skip to content

Commit bfb082e

Browse files
committed
Throw ModuleSupportError if module not found and accessPackagesToClass not optional
1 parent c31bc8b commit bfb082e

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

substratevm/src/com.oracle.svm.util/src/com/oracle/svm/util/ModuleSupport.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
*/
2525
package com.oracle.svm.util;
2626

27-
import java.util.NoSuchElementException;
2827
import java.util.Objects;
2928
import java.util.Optional;
3029
import 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,25 @@ 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 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);
104117
}
118+
Module declaringModule = module.get();
105119
Objects.requireNonNull(packageNames);
106120
Set<String> packages = packageNames.length > 0 ? Set.of(packageNames) : declaringModule.getPackages();
107121
for (String packageName : packages) {
108122
accessModuleByClass(access, accessingClass, declaringModule, packageName);
109123
}
110124
}
111125

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-
125126
@Platforms(Platform.HOSTED_ONLY.class)
126127
private static void accessModuleByClass(Access access, Class<?> accessingClass, Module declaringModule, String packageName) {
127128
Module namedAccessingModule = null;

0 commit comments

Comments
 (0)