Skip to content

Commit 78b9770

Browse files
Fix numbered module path options handling in JNI invocation API
The truffle options should be used instead of the system properties to avoid clashing with properties set by the VM.
1 parent c72c495 commit 78b9770

File tree

3 files changed

+63
-113
lines changed

3 files changed

+63
-113
lines changed

espresso/src/com.oracle.truffle.espresso.libjavavm/src/com/oracle/truffle/espresso/libjavavm/Arguments.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public static int setupContext(Context.Builder builder, JNIJavaVMInitArgs args)
174174
} else if (optionString.startsWith("--enable-native-access=")) {
175175
handler.enableNativeAccess(optionString.substring("--enable-native-access=".length()));
176176
} else if (optionString.startsWith("--module-path=")) {
177-
builder.option(JAVA_PROPS + "jdk.module.path", optionString.substring("--module-path=".length()));
177+
builder.option("java.ModulePath", optionString.substring("--module-path=".length()));
178178
} else if (optionString.startsWith("--upgrade-module-path=")) {
179179
builder.option(JAVA_PROPS + "jdk.module.upgrade.path", optionString.substring("--upgrade-module-path=".length()));
180180
} else if (optionString.startsWith("--limit-modules=")) {

espresso/src/com.oracle.truffle.espresso.libjavavm/src/com/oracle/truffle/espresso/libjavavm/arghelper/ArgumentsHandler.java

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@
2626
import static com.oracle.truffle.espresso.libjavavm.Arguments.abort;
2727
import static com.oracle.truffle.espresso.libjavavm.Arguments.warn;
2828

29+
import java.io.File;
2930
import java.io.PrintStream;
31+
import java.util.ArrayList;
32+
import java.util.List;
3033
import java.util.Map;
3134
import java.util.Set;
3235
import java.util.function.Consumer;
@@ -54,14 +57,37 @@ public class ArgumentsHandler {
5457
*/
5558
public static final int LAUNCHER_OPTIONS_INDENT = 45;
5659

60+
private static final String JDK_MODULES_PREFIX = "jdk.module.";
61+
62+
private static final String ADD_MODULES = JDK_MODULES_PREFIX + "addmods";
63+
private static final String ADD_EXPORTS = JDK_MODULES_PREFIX + "addexports";
64+
private static final String ADD_OPENS = JDK_MODULES_PREFIX + "addopens";
65+
private static final String ADD_READS = JDK_MODULES_PREFIX + "addreads";
66+
private static final String ENABLE_NATIVE_ACCESS = JDK_MODULES_PREFIX + "enable.native.access";
67+
68+
private static final String MODULE_PATH = JDK_MODULES_PREFIX + "path";
69+
private static final String UPGRADE_PATH = JDK_MODULES_PREFIX + "upgrade.path";
70+
private static final String LIMIT_MODS = JDK_MODULES_PREFIX + "limitmods";
71+
72+
private static final String[] KNOWN_MODULE_OPTIONS = {
73+
ADD_MODULES,
74+
ADD_EXPORTS,
75+
ADD_OPENS,
76+
ADD_READS,
77+
ENABLE_NATIVE_ACCESS,
78+
MODULE_PATH,
79+
UPGRADE_PATH,
80+
LIMIT_MODS,
81+
};
82+
5783
private static final PrintStream out = System.out;
5884

5985
private final Native nativeAccess;
6086
private final PolyglotArgs polyglotAccess;
61-
private final ModulePropertyCounter modulePropertyCounter;
6287

6388
private final Set<String> ignoredXXOptions;
6489
private final Map<String, String> mappedXXOptions;
90+
private final Context.Builder builder;
6591

6692
private boolean experimental;
6793

@@ -75,14 +101,20 @@ public class ArgumentsHandler {
75101

76102
private boolean showIgnored;
77103

104+
private List<String> addModules = new ArrayList<>();
105+
private List<String> addExports = new ArrayList<>();
106+
private List<String> addOpens = new ArrayList<>();
107+
private List<String> addReads = new ArrayList<>();
108+
private List<String> enableNativeAccess = new ArrayList<>();
109+
78110
@SuppressWarnings("this-escape")
79111
public ArgumentsHandler(Context.Builder builder, Set<String> ignoredXXOptions, Map<String, String> mappedXXOptions, JNIJavaVMInitArgs args) {
80112
assert mappedXXOptions.values().stream().allMatch(s -> s.contains("."));
81113
this.ignoredXXOptions = ignoredXXOptions;
82114
this.mappedXXOptions = mappedXXOptions;
83115
this.nativeAccess = new Native(this);
84-
this.modulePropertyCounter = new ModulePropertyCounter(builder);
85116
this.polyglotAccess = new PolyglotArgs(builder, this);
117+
this.builder = builder;
86118
parseEarlyArguments(args);
87119
}
88120

@@ -122,27 +154,34 @@ private void parseEarlyArguments(JNIJavaVMInitArgs args) {
122154
}
123155

124156
public boolean isModulesOption(String key) {
125-
return modulePropertyCounter.isModulesOption(key);
157+
if (key.startsWith(JDK_MODULES_PREFIX)) {
158+
for (String known : KNOWN_MODULE_OPTIONS) {
159+
if (key.equals(known)) {
160+
return true;
161+
}
162+
}
163+
}
164+
return false;
126165
}
127166

128167
public void addModules(String option) {
129-
modulePropertyCounter.addModules(option);
168+
addModules.add(option);
130169
}
131170

132171
public void addExports(String option) {
133-
modulePropertyCounter.addExports(option);
172+
addExports.add(option);
134173
}
135174

136175
public void addOpens(String option) {
137-
modulePropertyCounter.addOpens(option);
176+
addOpens.add(option);
138177
}
139178

140179
public void addReads(String option) {
141-
modulePropertyCounter.addReads(option);
180+
addReads.add(option);
142181
}
143182

144183
public void enableNativeAccess(String option) {
145-
modulePropertyCounter.enableNativeAccess(option);
184+
enableNativeAccess.add(option);
146185
}
147186

148187
public void setExperimental(boolean experimental) {
@@ -227,6 +266,21 @@ public void handleVMOption(String optionString) {
227266
}
228267

229268
public void argumentProcessingDone() {
269+
if (!addModules.isEmpty()) {
270+
builder.option("java.AddModules", String.join(File.pathSeparator, addModules));
271+
}
272+
if (!addExports.isEmpty()) {
273+
builder.option("java.AddExports", String.join(File.pathSeparator, addExports));
274+
}
275+
if (!addOpens.isEmpty()) {
276+
builder.option("java.AddOpens", String.join(File.pathSeparator, addOpens));
277+
}
278+
if (!addReads.isEmpty()) {
279+
builder.option("java.AddReads", String.join(File.pathSeparator, addReads));
280+
}
281+
if (!enableNativeAccess.isEmpty()) {
282+
builder.option("java.EnableNativeAccess", String.join(File.pathSeparator, enableNativeAccess));
283+
}
230284
printHelp();
231285
polyglotAccess.argumentProcessingDone();
232286
}

espresso/src/com.oracle.truffle.espresso.libjavavm/src/com/oracle/truffle/espresso/libjavavm/arghelper/ModulePropertyCounter.java

Lines changed: 0 additions & 104 deletions
This file was deleted.

0 commit comments

Comments
 (0)