--- old/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java 2016-08-05 14:30:54.000000000 -0700 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java 2016-08-05 14:30:54.000000000 -0700 @@ -84,7 +84,7 @@ import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH; -import static com.sun.tools.javac.main.Option.BOOTCLASSPATH; +import static com.sun.tools.javac.main.Option.BOOT_CLASS_PATH; import static com.sun.tools.javac.main.Option.DJAVA_ENDORSED_DIRS; import static com.sun.tools.javac.main.Option.DJAVA_EXT_DIRS; import static com.sun.tools.javac.main.Option.ENDORSEDDIRS; @@ -580,8 +580,7 @@ private class ClassPathLocationHandler extends SimpleLocationHandler { ClassPathLocationHandler() { - super(StandardLocation.CLASS_PATH, - Option.CLASSPATH, Option.CP); + super(StandardLocation.CLASS_PATH, Option.CLASS_PATH); } @Override @@ -649,7 +648,7 @@ BootClassPathLocationHandler() { super(StandardLocation.PLATFORM_CLASS_PATH, - Option.BOOTCLASSPATH, Option.XBOOTCLASSPATH, + Option.BOOT_CLASS_PATH, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_PREPEND, Option.XBOOTCLASSPATH_APPEND, Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS, @@ -669,7 +668,7 @@ option = canonicalize(option); optionValues.put(option, value); - if (option == BOOTCLASSPATH) { + if (option == BOOT_CLASS_PATH) { optionValues.remove(XBOOTCLASSPATH_PREPEND); optionValues.remove(XBOOTCLASSPATH_APPEND); } @@ -682,7 +681,7 @@ private Option canonicalize(Option option) { switch (option) { case XBOOTCLASSPATH: - return Option.BOOTCLASSPATH; + return Option.BOOT_CLASS_PATH; case DJAVA_ENDORSED_DIRS: return Option.ENDORSEDDIRS; case DJAVA_EXT_DIRS: @@ -713,7 +712,7 @@ SearchPath computePath() throws IOException { SearchPath path = new SearchPath(); - String bootclasspathOpt = optionValues.get(BOOTCLASSPATH); + String bootclasspathOpt = optionValues.get(BOOT_CLASS_PATH); String endorseddirsOpt = optionValues.get(ENDORSEDDIRS); String extdirsOpt = optionValues.get(EXTDIRS); String xbootclasspathPrependOpt = optionValues.get(XBOOTCLASSPATH_PREPEND); @@ -1161,7 +1160,7 @@ ModuleSourcePathLocationHandler() { super(StandardLocation.MODULE_SOURCE_PATH, - Option.MODULESOURCEPATH); + Option.MODULE_SOURCE_PATH); } @Override @@ -1493,16 +1492,16 @@ BasicLocationHandler[] handlers = { new BootClassPathLocationHandler(), new ClassPathLocationHandler(), - new SimpleLocationHandler(StandardLocation.SOURCE_PATH, Option.SOURCEPATH), - new SimpleLocationHandler(StandardLocation.ANNOTATION_PROCESSOR_PATH, Option.PROCESSORPATH), - new SimpleLocationHandler(StandardLocation.ANNOTATION_PROCESSOR_MODULE_PATH, Option.PROCESSORMODULEPATH), + new SimpleLocationHandler(StandardLocation.SOURCE_PATH, Option.SOURCE_PATH), + new SimpleLocationHandler(StandardLocation.ANNOTATION_PROCESSOR_PATH, Option.PROCESSOR_PATH), + new SimpleLocationHandler(StandardLocation.ANNOTATION_PROCESSOR_MODULE_PATH, Option.PROCESSOR_MODULE_PATH), new OutputLocationHandler(StandardLocation.CLASS_OUTPUT, Option.D), new OutputLocationHandler(StandardLocation.SOURCE_OUTPUT, Option.S), new OutputLocationHandler(StandardLocation.NATIVE_HEADER_OUTPUT, Option.H), new ModuleSourcePathLocationHandler(), // TODO: should UPGRADE_MODULE_PATH be merged with SYSTEM_MODULES? - new ModulePathLocationHandler(StandardLocation.UPGRADE_MODULE_PATH, Option.UPGRADEMODULEPATH), - new ModulePathLocationHandler(StandardLocation.MODULE_PATH, Option.MODULEPATH, Option.MP), + new ModulePathLocationHandler(StandardLocation.UPGRADE_MODULE_PATH, Option.UPGRADE_MODULE_PATH), + new ModulePathLocationHandler(StandardLocation.MODULE_PATH, Option.MODULE_PATH), new SystemModulesLocationHandler(), }; @@ -1518,29 +1517,42 @@ boolean handleOption(Option option, String value) { switch (option) { - case XPATCH: - Map map = new LinkedHashMap<>(); - int eq = value.indexOf('='); - if (eq > 0) { - String mName = value.substring(0, eq); - SearchPath mPatchPath = new SearchPath() - .addFiles(value.substring(eq + 1)); - boolean ok = true; - for (Path p: mPatchPath) { - Path mi = p.resolve("module-info.class"); - if (Files.exists(mi)) { - log.error(Errors.LocnModuleInfoNotAllowedOnPatchPath(mi)); - ok = false; + case PATCH_MODULE: + if (value == null) { + patchMap = null; + } else { + // Allow an extended syntax for --patch-module consisting of a series + // of values separated by NULL characters. This is to facilitate + // supporting deferred file manager options on the command line. + // See Option.PATCH_MODULE for the code that composes these multiple + // values. + for (String v : value.split("\0")) { + int eq = v.indexOf('='); + if (eq > 0) { + String mName = v.substring(0, eq); + SearchPath mPatchPath = new SearchPath() + .addFiles(v.substring(eq + 1)); + boolean ok = true; + for (Path p : mPatchPath) { + Path mi = p.resolve("module-info.class"); + if (Files.exists(mi)) { + log.error(Errors.LocnModuleInfoNotAllowedOnPatchPath(mi)); + ok = false; + } + } + if (ok) { + if (patchMap == null) { + patchMap = new LinkedHashMap<>(); + } + patchMap.put(mName, mPatchPath); + } + } else { + // Should not be able to get here; + // this should be caught and handled in Option.PATCH_MODULE + log.error(Errors.LocnInvalidArgForXpatch(value)); } } - if (ok && !mPatchPath.isEmpty()) { - map.computeIfAbsent(mName, (_x) -> new SearchPath()) - .addAll(mPatchPath); - } - } else { - log.error(Errors.LocnInvalidArgForXpatch(value)); } - patchMap = map; return true; default: LocationHandler h = handlersForOption.get(option);