< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java
Print this page
@@ -33,20 +33,16 @@
import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
-import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Locale;
-import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.TreeSet;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import javax.lang.model.SourceVersion;
@@ -58,11 +54,10 @@
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.jvm.Profile;
import com.sun.tools.javac.jvm.Target;
import com.sun.tools.javac.platform.PlatformProvider;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
-import com.sun.tools.javac.resources.CompilerProperties.Errors;
import com.sun.tools.javac.util.Assert;
import com.sun.tools.javac.util.JDK9Wrappers;
import com.sun.tools.javac.util.Log;
import com.sun.tools.javac.util.Log.PrefixKind;
import com.sun.tools.javac.util.Log.WriterKind;
@@ -632,10 +627,37 @@
public Pattern getPattern() {
return Pattern.compile(",*[^,].*");
}
},
+ MODULE_VERSION("--module-version", "opt.arg.module.version", "opt.module.version", STANDARD, BASIC) {
+ @Override
+ public void process(OptionHelper helper, String option, String arg) throws InvalidValueException {
+ if (arg.isEmpty()) {
+ throw helper.newInvalidValueException("err.no.value.for.option", option);
+ } else {
+ try {
+ Class.forName(JDK9Wrappers.ModuleDescriptor.Version.CLASSNAME);
+ // use official parser if available
+ try {
+ JDK9Wrappers.ModuleDescriptor.Version.parse(arg);
+ } catch (IllegalArgumentException e) {
+ throw helper.newInvalidValueException("err.bad.value.for.option", option, arg);
+ }
+ } catch (ClassNotFoundException ex) {
+ // fall-back to simplistic rules when running on older platform
+ if (!(arg.charAt(0) >= '0' && arg.charAt(0) <= '9') ||
+ arg.endsWith("-") ||
+ arg.endsWith("+")) {
+ throw helper.newInvalidValueException("err.bad.value.for.option", option, arg);
+ }
+ }
+ }
+ super.process(helper, option, arg);
+ }
+ },
+
// This option exists only for the purpose of documenting itself.
// It's actually implemented by the CommandLine class.
AT("@", "opt.arg.file", "opt.AT", STANDARD, INFO, ArgKind.ADJACENT) {
@Override
public void process(OptionHelper helper, String option) {
@@ -679,11 +701,11 @@
INHERIT_RUNTIME_ENVIRONMENT("--inherit-runtime-environment", "opt.inherit_runtime_environment",
EXTENDED, BASIC) {
@Override
public void process(OptionHelper helper, String option) throws InvalidValueException {
try {
- Class.forName(JDK9Wrappers.VMHelper.VM_CLASSNAME);
+ Class.forName(JDK9Wrappers.VMHelper.CLASSNAME);
String[] runtimeArgs = JDK9Wrappers.VMHelper.getRuntimeArguments();
for (String arg : runtimeArgs) {
// Handle any supported runtime options; ignore all others.
// The runtime arguments always use the single token form, e.g. "--name=value".
for (Option o : getSupportedRuntimeOptions()) {
@@ -1033,11 +1055,11 @@
* This is the recommended way to handle an option directly, instead of calling the underlying
* {@link #process process} methods.
* @param helper a helper to provide access to the environment
* @param arg the arg string that identified this option
* @param rest the remaining strings to be analysed
- * @return true if the operation was successful, and false otherwise
+ * @throws InvalidValueException if the value of the option was invalid
* @implNote The return value is the opposite of that used by {@link #process}.
*/
public void handleOption(OptionHelper helper, String arg, Iterator<String> rest) throws InvalidValueException {
if (hasArg()) {
String option;
@@ -1082,10 +1104,11 @@
* Processes an option by updating the environment via a helper object.
* @param helper a helper to provide access to the environment
* @param option the option to be processed
* @param arg the value to associate with the option, or a default value
* to be used if the option does not otherwise take an argument.
+ * @throws InvalidValueException if an error occurred
*/
public void process(OptionHelper helper, String option, String arg) throws InvalidValueException {
if (choices != null) {
if (choiceKind == ChoiceKind.ONEOF) {
// some clients like to see just one of option+choice set
< prev index next >