< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java

Print this page

        

*** 61,70 **** --- 61,71 ---- import com.sun.tools.javac.platform.PlatformDescription; import com.sun.tools.javac.platform.PlatformUtils; import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.Context; + import com.sun.tools.javac.util.JCDiagnostic; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Log.PrefixKind; import com.sun.tools.javac.util.Log.WriterKind;
*** 141,151 **** options.remove(name); } @Override public boolean handleFileManagerOption(Option option, String value) { ! options.put(option.getText(), value); deferredFileManagerOptions.put(option, value); return true; } @Override --- 142,152 ---- options.remove(name); } @Override public boolean handleFileManagerOption(Option option, String value) { ! options.put(option, value); deferredFileManagerOptions.put(option, value); return true; } @Override
*** 162,171 **** --- 163,177 ---- public void error(String key, Object... args) { Arguments.this.error(key, args); } @Override + public void error(JCDiagnostic.Error error) { + Arguments.this.error(error); + } + + @Override public void addFile(Path p) { files.add(p); } @Override
*** 191,206 **** files = new LinkedHashSet<>(); deferredFileManagerOptions = new LinkedHashMap<>(); fileObjects = null; classNames = new LinkedHashSet<>(); processArgs(List.from(args), Option.getJavaCompilerOptions(), cmdLineHelper, true, false); } private final OptionHelper apiHelper = new GrumpyHelper(null) { @Override public String get(Option option) { ! return options.get(option.getText()); } @Override public void put(String name, String value) { options.put(name, value); --- 197,215 ---- files = new LinkedHashSet<>(); deferredFileManagerOptions = new LinkedHashMap<>(); fileObjects = null; classNames = new LinkedHashSet<>(); processArgs(List.from(args), Option.getJavaCompilerOptions(), cmdLineHelper, true, false); + if (errors) { + log.printLines(PrefixKind.JAVAC, "msg.usage", ownName); + } } private final OptionHelper apiHelper = new GrumpyHelper(null) { @Override public String get(Option option) { ! return options.get(option); } @Override public void put(String name, String value) { options.put(name, value);
*** 295,306 **** return false; String platformString = options.get(Option.RELEASE); checkOptionAllowed(platformString == null, ! option -> error("err.release.bootclasspath.conflict", option.getText()), ! Option.BOOTCLASSPATH, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND, Option.XBOOTCLASSPATH_PREPEND, Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS, Option.EXTDIRS, Option.DJAVA_EXT_DIRS, Option.SOURCE, Option.TARGET); --- 304,315 ---- return false; String platformString = options.get(Option.RELEASE); checkOptionAllowed(platformString == null, ! option -> error("err.release.bootclasspath.conflict", option.getPrimaryName()), ! Option.BOOT_CLASS_PATH, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND, Option.XBOOTCLASSPATH_PREPEND, Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS, Option.EXTDIRS, Option.DJAVA_EXT_DIRS, Option.SOURCE, Option.TARGET);
*** 358,401 **** error("err.invalid.flag", arg); return false; } Option option = null; if (arg.startsWith("-")) { ! for (Option o : allowableOpts) { ! if (o.matches(arg)) { ! option = o; ! break; ! } ! } } else if (allowOperands && Option.SOURCEFILE.matches(arg)) { option = Option.SOURCEFILE; } ! if (option == null) { ! if (fm != null && fm.handleOption(arg, argIter)) { ! continue; ! } ! error("err.invalid.flag", arg); return false; } ! ! if (option.hasArg()) { ! if (!argIter.hasNext()) { ! error("err.req.arg", arg); ! return false; } ! String operand = argIter.next(); ! if (option.process(helper, arg, operand)) { ! return false; } ! } else { ! if (option.process(helper, arg)) { return false; } - } - } return true; } /** --- 367,400 ---- error("err.invalid.flag", arg); return false; } Option option = null; + + // first, check the provided set of javac options if (arg.startsWith("-")) { ! option = Option.lookup(arg, allowableOpts); } else if (allowOperands && Option.SOURCEFILE.matches(arg)) { option = Option.SOURCEFILE; } ! if (option != null) { ! if (!option.handleOption(helper, arg, argIter)) { return false; } ! continue; } ! ! // check file manager option ! if (fm != null && fm.handleOption(arg, argIter)) { ! continue; } ! ! // none of the above ! error("err.invalid.flag", arg); return false; } return true; } /**
*** 405,421 **** * @throws IllegalStateException if a problem is found and errorMode is set to * ILLEGAL_STATE */ public boolean validate() { JavaFileManager fm = getFileManager(); ! if (options.isSet(Option.M)) { if (!fm.hasLocation(StandardLocation.CLASS_OUTPUT)) { log.error(Errors.OutputDirMustBeSpecifiedWithDashMOption); } else if (!fm.hasLocation(StandardLocation.MODULE_SOURCE_PATH)) { log.error(Errors.ModulesourcepathMustBeSpecifiedWithDashMOption); } else { ! java.util.List<String> modules = Arrays.asList(options.get(Option.M).split(",")); try { for (String module : modules) { Location sourceLoc = fm.getModuleLocation(StandardLocation.MODULE_SOURCE_PATH, module); if (sourceLoc == null) { log.error(Errors.ModuleNotFoundInModuleSourcePath(module)); --- 404,420 ---- * @throws IllegalStateException if a problem is found and errorMode is set to * ILLEGAL_STATE */ public boolean validate() { JavaFileManager fm = getFileManager(); ! if (options.isSet(Option.MODULE)) { if (!fm.hasLocation(StandardLocation.CLASS_OUTPUT)) { log.error(Errors.OutputDirMustBeSpecifiedWithDashMOption); } else if (!fm.hasLocation(StandardLocation.MODULE_SOURCE_PATH)) { log.error(Errors.ModulesourcepathMustBeSpecifiedWithDashMOption); } else { ! java.util.List<String> modules = Arrays.asList(options.get(Option.MODULE).split(",")); try { for (String module : modules) { Location sourceLoc = fm.getModuleLocation(StandardLocation.MODULE_SOURCE_PATH, module); if (sourceLoc == null) { log.error(Errors.ModuleNotFoundInModuleSourcePath(module));
*** 447,467 **** // But also note that none of these options are supported in API mode. if (options.isSet(Option.HELP) || options.isSet(Option.X) || options.isSet(Option.VERSION) || options.isSet(Option.FULLVERSION) ! || options.isSet(Option.M)) return true; if (emptyAllowed) return true; if (JavaCompiler.explicitAnnotationProcessingRequested(options)) { error("err.no.source.files.classes"); } else { error("err.no.source.files"); } return false; } if (!checkDirectory(Option.D)) { return false; --- 446,469 ---- // But also note that none of these options are supported in API mode. if (options.isSet(Option.HELP) || options.isSet(Option.X) || options.isSet(Option.VERSION) || options.isSet(Option.FULLVERSION) ! || options.isSet(Option.MODULE)) return true; if (emptyAllowed) return true; + if (!errors) { if (JavaCompiler.explicitAnnotationProcessingRequested(options)) { error("err.no.source.files.classes"); } else { error("err.no.source.files"); } + } + return false; } if (!checkDirectory(Option.D)) { return false;
*** 540,555 **** error("warn.profile.target.conflict", profileString, target.name); } // This check is only effective in command line mode, // where the file manager options are added to options ! if (options.get(Option.BOOTCLASSPATH) != null) { error("err.profile.bootclasspath.conflict"); } } ! if (options.isSet(Option.SOURCEPATH) && options.isSet(Option.MODULESOURCEPATH)) { error("err.sourcepath.modulesourcepath.conflict"); } boolean lintOptions = options.isUnset(Option.XLINT_CUSTOM, "-" + LintCategory.OPTIONS.option); --- 542,557 ---- error("warn.profile.target.conflict", profileString, target.name); } // This check is only effective in command line mode, // where the file manager options are added to options ! if (options.get(Option.BOOT_CLASS_PATH) != null) { error("err.profile.bootclasspath.conflict"); } } ! if (options.isSet(Option.SOURCE_PATH) && options.isSet(Option.MODULE_SOURCE_PATH)) { error("err.sourcepath.modulesourcepath.conflict"); } boolean lintOptions = options.isUnset(Option.XLINT_CUSTOM, "-" + LintCategory.OPTIONS.option);
*** 576,596 **** obsoleteOptionFound = true; } final Target t = target; checkOptionAllowed(t.compareTo(Target.JDK1_8) <= 0, ! option -> error("err.option.not.allowed.with.target", option.getText(), t.name), ! Option.BOOTCLASSPATH, Option.XBOOTCLASSPATH_PREPEND, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND, Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS, Option.EXTDIRS, Option.DJAVA_EXT_DIRS); checkOptionAllowed(t.compareTo(Target.JDK1_9) >= 0, ! option -> error("err.option.not.allowed.with.target", option.getText(), t.name), ! Option.MODULESOURCEPATH, Option.UPGRADEMODULEPATH, ! Option.SYSTEM, Option.MODULEPATH, Option.ADDMODS, Option.LIMITMODS, ! Option.XPATCH); if (fm.hasLocation(StandardLocation.MODULE_SOURCE_PATH)) { if (!options.isSet(Option.PROC, "only") && !fm.hasLocation(StandardLocation.CLASS_OUTPUT)) { log.error(Errors.NoOutputDir); --- 578,598 ---- obsoleteOptionFound = true; } final Target t = target; checkOptionAllowed(t.compareTo(Target.JDK1_8) <= 0, ! option -> error("err.option.not.allowed.with.target", option.getPrimaryName(), t.name), ! Option.BOOT_CLASS_PATH, Option.XBOOTCLASSPATH_PREPEND, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND, Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS, Option.EXTDIRS, Option.DJAVA_EXT_DIRS); checkOptionAllowed(t.compareTo(Target.JDK1_9) >= 0, ! option -> error("err.option.not.allowed.with.target", option.getPrimaryName(), t.name), ! Option.MODULE_SOURCE_PATH, Option.UPGRADE_MODULE_PATH, ! Option.SYSTEM, Option.MODULE_PATH, Option.ADD_MODULES, Option.LIMIT_MODULES, ! Option.PATCH_MODULE); if (fm.hasLocation(StandardLocation.MODULE_SOURCE_PATH)) { if (!options.isSet(Option.PROC, "only") && !fm.hasLocation(StandardLocation.CLASS_OUTPUT)) { log.error(Errors.NoOutputDir);
*** 606,616 **** } if (obsoleteOptionFound) log.warning(LintCategory.OPTIONS, "option.obsolete.suppression"); ! String addExports = options.get(Option.XADDEXPORTS); if (addExports != null) { // Each entry must be of the form module/package=target-list where target-list is a // comma-separated list of module or ALL-UNNAMED. // All module/package pairs must be unique. Pattern p = Pattern.compile("([^/]+)/([^=]+)=(.*)"); --- 608,618 ---- } if (obsoleteOptionFound) log.warning(LintCategory.OPTIONS, "option.obsolete.suppression"); ! String addExports = options.get(Option.ADD_EXPORTS); if (addExports != null) { // Each entry must be of the form module/package=target-list where target-list is a // comma-separated list of module or ALL-UNNAMED. // All module/package pairs must be unique. Pattern p = Pattern.compile("([^/]+)/([^=]+)=(.*)");
*** 634,644 **** // TODO: consider adding diag fragments for the entries } }); } ! String addReads = options.get(Option.XADDREADS); if (addReads != null) { // Each entry must be of the form module=source-list where source-list is a // comma separated list of module or ALL-UNNAMED. // All target modules (i.e. on left of '=') must be unique. Pattern p = Pattern.compile("([^=]+)=(.*)"); --- 636,646 ---- // TODO: consider adding diag fragments for the entries } }); } ! String addReads = options.get(Option.ADD_READS); if (addReads != null) { // Each entry must be of the form module=source-list where source-list is a // comma separated list of module or ALL-UNNAMED. // All target modules (i.e. on left of '=') must be unique. Pattern p = Pattern.compile("([^=]+)=(.*)");
*** 722,750 **** doclintOpts.add(DocLint.XMSGS_OPTION); if (xdoclintCustom != null) { for (String s: xdoclintCustom.split("\\s+")) { if (s.isEmpty()) continue; ! doclintOpts.add(s.replace(Option.XDOCLINT_CUSTOM.text, DocLint.XMSGS_CUSTOM_PREFIX)); } } if (doclintOpts.equals(Collections.singleton(DocLint.XMSGS_CUSTOM_PREFIX + "none"))) return List.nil(); String checkPackages = options.get(Option.XDOCLINT_PACKAGE); if (checkPackages != null) { for (String s : checkPackages.split("\\s+")) { ! doclintOpts.add(s.replace(Option.XDOCLINT_PACKAGE.text, DocLint.XCHECK_PACKAGE)); } } // standard doclet normally generates H1, H2, // so for now, allow user comments to assume that doclintOpts.add(DocLint.XIMPLICIT_HEADERS + "2"); - return List.from(doclintOpts.toArray(new String[doclintOpts.size()])); } private boolean checkDirectory(Option option) { String value = options.get(option); --- 724,751 ---- doclintOpts.add(DocLint.XMSGS_OPTION); if (xdoclintCustom != null) { for (String s: xdoclintCustom.split("\\s+")) { if (s.isEmpty()) continue; ! doclintOpts.add(DocLint.XMSGS_CUSTOM_PREFIX + s); } } if (doclintOpts.equals(Collections.singleton(DocLint.XMSGS_CUSTOM_PREFIX + "none"))) return List.nil(); String checkPackages = options.get(Option.XDOCLINT_PACKAGE); if (checkPackages != null) { for (String s : checkPackages.split("\\s+")) { ! doclintOpts.add(DocLint.XCHECK_PACKAGE + s); } } // standard doclet normally generates H1, H2, // so for now, allow user comments to assume that doclintOpts.add(DocLint.XIMPLICIT_HEADERS + "2"); return List.from(doclintOpts.toArray(new String[doclintOpts.size()])); } private boolean checkDirectory(Option option) { String value = options.get(option);
*** 769,778 **** --- 770,795 ---- .filter(options :: isSet) .forEach(r :: report); } } + void error(JCDiagnostic.Error error) { + errors = true; + switch (errorMode) { + case ILLEGAL_ARGUMENT: { + String msg = log.localize(error); + throw new PropagatedException(new IllegalArgumentException(msg)); + } + case ILLEGAL_STATE: { + String msg = log.localize(error); + throw new PropagatedException(new IllegalStateException(msg)); + } + case LOG: + report(error); + } + } + void error(String key, Object... args) { errors = true; switch (errorMode) { case ILLEGAL_ARGUMENT: { String msg = log.localize(PrefixKind.JAVAC, key, args);
*** 782,792 **** String msg = log.localize(PrefixKind.JAVAC, key, args); throw new PropagatedException(new IllegalStateException(msg)); } case LOG: report(key, args); - log.printLines(PrefixKind.JAVAC, "msg.usage", ownName); } } void warning(String key, Object... args) { report(key, args); --- 799,808 ----
*** 795,804 **** --- 811,825 ---- private void report(String key, Object... args) { // Would be good to have support for -XDrawDiagnostics here log.printRawLines(ownName + ": " + log.localize(PrefixKind.JAVAC, key, args)); } + private void report(JCDiagnostic.Error error) { + // Would be good to have support for -XDrawDiagnostics here + log.printRawLines(ownName + ": " + log.localize(error)); + } + private JavaFileManager getFileManager() { if (fileManager == null) fileManager = context.get(JavaFileManager.class); return fileManager; }
< prev index next >