26
26
import static com .oracle .truffle .espresso .libjavavm .Arguments .abort ;
27
27
import static com .oracle .truffle .espresso .libjavavm .Arguments .warn ;
28
28
29
+ import java .io .File ;
29
30
import java .io .PrintStream ;
31
+ import java .util .ArrayList ;
32
+ import java .util .List ;
30
33
import java .util .Map ;
31
34
import java .util .Set ;
32
35
import java .util .function .Consumer ;
@@ -54,14 +57,37 @@ public class ArgumentsHandler {
54
57
*/
55
58
public static final int LAUNCHER_OPTIONS_INDENT = 45 ;
56
59
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
+
57
83
private static final PrintStream out = System .out ;
58
84
59
85
private final Native nativeAccess ;
60
86
private final PolyglotArgs polyglotAccess ;
61
- private final ModulePropertyCounter modulePropertyCounter ;
62
87
63
88
private final Set <String > ignoredXXOptions ;
64
89
private final Map <String , String > mappedXXOptions ;
90
+ private final Context .Builder builder ;
65
91
66
92
private boolean experimental ;
67
93
@@ -75,14 +101,20 @@ public class ArgumentsHandler {
75
101
76
102
private boolean showIgnored ;
77
103
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
+
78
110
@ SuppressWarnings ("this-escape" )
79
111
public ArgumentsHandler (Context .Builder builder , Set <String > ignoredXXOptions , Map <String , String > mappedXXOptions , JNIJavaVMInitArgs args ) {
80
112
assert mappedXXOptions .values ().stream ().allMatch (s -> s .contains ("." ));
81
113
this .ignoredXXOptions = ignoredXXOptions ;
82
114
this .mappedXXOptions = mappedXXOptions ;
83
115
this .nativeAccess = new Native (this );
84
- this .modulePropertyCounter = new ModulePropertyCounter (builder );
85
116
this .polyglotAccess = new PolyglotArgs (builder , this );
117
+ this .builder = builder ;
86
118
parseEarlyArguments (args );
87
119
}
88
120
@@ -122,27 +154,34 @@ private void parseEarlyArguments(JNIJavaVMInitArgs args) {
122
154
}
123
155
124
156
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 ;
126
165
}
127
166
128
167
public void addModules (String option ) {
129
- modulePropertyCounter . addModules (option );
168
+ addModules . add (option );
130
169
}
131
170
132
171
public void addExports (String option ) {
133
- modulePropertyCounter . addExports (option );
172
+ addExports . add (option );
134
173
}
135
174
136
175
public void addOpens (String option ) {
137
- modulePropertyCounter . addOpens (option );
176
+ addOpens . add (option );
138
177
}
139
178
140
179
public void addReads (String option ) {
141
- modulePropertyCounter . addReads (option );
180
+ addReads . add (option );
142
181
}
143
182
144
183
public void enableNativeAccess (String option ) {
145
- modulePropertyCounter . enableNativeAccess (option );
184
+ enableNativeAccess . add (option );
146
185
}
147
186
148
187
public void setExperimental (boolean experimental ) {
@@ -227,6 +266,21 @@ public void handleVMOption(String optionString) {
227
266
}
228
267
229
268
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
+ }
230
284
printHelp ();
231
285
polyglotAccess .argumentProcessingDone ();
232
286
}
0 commit comments