< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java

Print this page

        

*** 430,440 **** } /** * @see JavaFileManager#getLocationForModule(Location, JavaFileObject, String) */ ! Location getLocationForModule(Path dir) { return null; } /** * @see JavaFileManager#inferModuleName --- 430,440 ---- } /** * @see JavaFileManager#getLocationForModule(Location, JavaFileObject, String) */ ! Location getLocationForModule(Path dir) throws IOException { return null; } /** * @see JavaFileManager#inferModuleName
*** 543,553 **** if (l == null) { Path out = outputDir.resolve(name); l = new ModuleLocationHandler(location.getName() + "[" + name + "]", name, Collections.singleton(out), ! true, false); moduleLocations.put(name, l); pathLocations.put(out.toAbsolutePath(), l); } return l; } --- 543,553 ---- if (l == null) { Path out = outputDir.resolve(name); l = new ModuleLocationHandler(location.getName() + "[" + name + "]", name, Collections.singleton(out), ! true); moduleLocations.put(name, l); pathLocations.put(out.toAbsolutePath(), l); } return l; }
*** 862,894 **** */ private class ModuleLocationHandler extends LocationHandler implements Location { protected final String name; protected final String moduleName; protected final Collection<Path> searchPath; - protected final Collection<Path> searchPathWithOverrides; protected final boolean output; ModuleLocationHandler(String name, String moduleName, Collection<Path> searchPath, ! boolean output, boolean allowOverrides) { this.name = name; this.moduleName = moduleName; this.searchPath = searchPath; this.output = output; - - if (allowOverrides && patchMap != null) { - SearchPath mPatch = patchMap.get(moduleName); - if (mPatch != null) { - SearchPath sp = new SearchPath(); - sp.addAll(mPatch); - sp.addAll(searchPath); - searchPathWithOverrides = sp; - } else { - searchPathWithOverrides = searchPath; - } - } else { - searchPathWithOverrides = searchPath; - } } @Override @DefinedBy(Api.COMPILER) public String getName() { return name; --- 862,879 ---- */ private class ModuleLocationHandler extends LocationHandler implements Location { protected final String name; protected final String moduleName; protected final Collection<Path> searchPath; protected final boolean output; ModuleLocationHandler(String name, String moduleName, Collection<Path> searchPath, ! boolean output) { this.name = name; this.moduleName = moduleName; this.searchPath = searchPath; this.output = output; } @Override @DefinedBy(Api.COMPILER) public String getName() { return name;
*** 907,917 **** @Override // defined by LocationHandler Collection<Path> getPaths() { // For now, we always return searchPathWithOverrides. This may differ from the // JVM behavior if there is a module-info.class to be found in the overriding // classes. ! return searchPathWithOverrides; } @Override // defined by LocationHandler void setPaths(Iterable<? extends Path> files) throws IOException { throw new UnsupportedOperationException(); --- 892,902 ---- @Override // defined by LocationHandler Collection<Path> getPaths() { // For now, we always return searchPathWithOverrides. This may differ from the // JVM behavior if there is a module-info.class to be found in the overriding // classes. ! return searchPath; } @Override // defined by LocationHandler void setPaths(Iterable<? extends Path> files) throws IOException { throw new UnsupportedOperationException();
*** 1061,1071 **** try { String moduleName = readModuleName(moduleInfoClass); String name = location.getName() + "[" + pathIndex + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(path), false, true); return Collections.singleton(l); } catch (ModuleNameReader.BadClassFile e) { log.error(Errors.LocnBadModuleInfo(path)); return Collections.emptySet(); } catch (IOException e) { --- 1046,1056 ---- try { String moduleName = readModuleName(moduleInfoClass); String name = location.getName() + "[" + pathIndex + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(path), false); return Collections.singleton(l); } catch (ModuleNameReader.BadClassFile e) { log.error(Errors.LocnBadModuleInfo(path)); return Collections.emptySet(); } catch (IOException e) {
*** 1086,1096 **** String moduleName = module.fst; Path modulePath = module.snd; String name = location.getName() + "[" + pathIndex + "." + (index++) + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(modulePath), false, true); result.add(l); } return result; } --- 1071,1081 ---- String moduleName = module.fst; Path modulePath = module.snd; String name = location.getName() + "[" + pathIndex + "." + (index++) + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(modulePath), false); result.add(l); } return result; }
*** 1103,1113 **** String moduleName = module.fst; Path modulePath = module.snd; String name = location.getName() + "[" + pathIndex + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(modulePath), false, true); return Collections.singleton(l); } private Pair<String,Path> inferModuleName(Path p) { if (Files.isDirectory(p)) { --- 1088,1098 ---- String moduleName = module.fst; Path modulePath = module.snd; String name = location.getName() + "[" + pathIndex + ":" + moduleName + "]"; ModuleLocationHandler l = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(modulePath), false); return Collections.singleton(l); } private Pair<String,Path> inferModuleName(Path p) { if (Files.isDirectory(p)) {
*** 1270,1280 **** moduleLocations = new LinkedHashMap<>(); pathLocations = new LinkedHashMap<>(); map.forEach((k, v) -> { String name = location.getName() + "[" + k + "]"; ! ModuleLocationHandler h = new ModuleLocationHandler(name, k, v, false, false); moduleLocations.put(k, h); v.forEach(p -> pathLocations.put(normalize(p), h)); }); } --- 1255,1265 ---- moduleLocations = new LinkedHashMap<>(); pathLocations = new LinkedHashMap<>(); map.forEach((k, v) -> { String name = location.getName() + "[" + k + "]"; ! ModuleLocationHandler h = new ModuleLocationHandler(name, k, v, false); moduleLocations.put(k, h); v.forEach(p -> pathLocations.put(normalize(p), h)); }); }
*** 1410,1419 **** --- 1395,1405 ---- private class SystemModulesLocationHandler extends BasicLocationHandler { private Path systemJavaHome; private Path modules; private Map<String, ModuleLocationHandler> systemModules; + private Map<Path, Location> pathLocations; SystemModulesLocationHandler() { super(StandardLocation.SYSTEM_MODULES, Option.SYSTEM); systemJavaHome = Locations.javaHome; }
*** 1484,1493 **** --- 1470,1485 ---- initSystemModules(); return systemModules.get(name); } @Override + Location getLocationForModule(Path dir) throws IOException { + initSystemModules(); + return (pathLocations == null) ? null : pathLocations.get(dir); + } + + @Override Iterable<Set<Location>> listLocationsForModules() throws IOException { initSystemModules(); Set<Location> locns = new LinkedHashSet<>(); for (Location l: systemModules.values()) locns.add(l);
*** 1537,1556 **** throw new IOException("can't find system classes", e); } } systemModules = new LinkedHashMap<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(modules, Files::isDirectory)) { for (Path entry : stream) { String moduleName = entry.getFileName().toString(); String name = location.getName() + "[" + moduleName + "]"; ModuleLocationHandler h = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(entry), false, true); systemModules.put(moduleName, h); } } } } Map<Location, LocationHandler> handlersForLocation; Map<Option, LocationHandler> handlersForOption; --- 1529,1626 ---- throw new IOException("can't find system classes", e); } } systemModules = new LinkedHashMap<>(); + pathLocations = new LinkedHashMap<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(modules, Files::isDirectory)) { for (Path entry : stream) { String moduleName = entry.getFileName().toString(); String name = location.getName() + "[" + moduleName + "]"; ModuleLocationHandler h = new ModuleLocationHandler(name, moduleName, ! Collections.singleton(entry), false); systemModules.put(moduleName, h); + pathLocations.put(normalize(entry), h); + } + } + } + } + + private class PatchModulesLocationHandler extends BasicLocationHandler { + private final Map<String, ModuleLocationHandler> moduleLocations = new HashMap<>(); + private final Map<Path, Location> pathLocations = new HashMap<>(); + + PatchModulesLocationHandler() { + super(StandardLocation.PATCH_MODULE_PATH, Option.PATCH_MODULE); + } + + @Override + boolean handleOption(Option option, String value) { + if (!options.contains(option)) { + return false; + } + + // 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 moduleName = v.substring(0, eq); + SearchPath mPatchPath = new SearchPath() + .addFiles(v.substring(eq + 1)); + String name = location.getName() + "[" + moduleName + "]"; + ModuleLocationHandler h = new ModuleLocationHandler(name, moduleName, mPatchPath, false); + moduleLocations.put(moduleName, h); + for (Path r : mPatchPath) { + pathLocations.put(normalize(r), h); + } + } else { + // Should not be able to get here; + // this should be caught and handled in Option.PATCH_MODULE + log.error(Errors.LocnInvalidArgForXpatch(value)); + } + } + + return true; + } + + @Override + boolean isSet() { + return !moduleLocations.isEmpty(); } + + @Override + Collection<Path> getPaths() { + throw new UnsupportedOperationException(); + } + + @Override + void setPaths(Iterable<? extends Path> files) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + Location getLocationForModule(String name) throws IOException { + return moduleLocations.get(name); } + + @Override + Location getLocationForModule(Path dir) throws IOException { + return (pathLocations == null) ? null : pathLocations.get(dir); } + + @Override + Iterable<Set<Location>> listLocationsForModules() throws IOException { + Set<Location> locns = new LinkedHashSet<>(); + for (Location l: moduleLocations.values()) + locns.add(l); + return Collections.singleton(locns); + } + } Map<Location, LocationHandler> handlersForLocation; Map<Option, LocationHandler> handlersForOption;
*** 1566,1575 **** --- 1636,1646 ---- 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(), + new PatchModulesLocationHandler(), // TODO: should UPGRADE_MODULE_PATH be merged with SYSTEM_MODULES? new ModulePathLocationHandler(StandardLocation.UPGRADE_MODULE_PATH, Option.UPGRADE_MODULE_PATH), new ModulePathLocationHandler(StandardLocation.MODULE_PATH, Option.MODULE_PATH), new SystemModulesLocationHandler(), };
*** 1580,1635 **** handlersForOption.put(o, h); } } } - private Map<String, SearchPath> patchMap; - boolean handleOption(Option option, String value) { - switch (option) { - 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)); - } - } - } - return true; - default: LocationHandler h = handlersForOption.get(option); return (h == null ? false : h.handleOption(option, value)); } - } boolean hasLocation(Location location) { LocationHandler h = getHandler(location); return (h == null ? false : h.isSet()); } --- 1651,1664 ----
*** 1663,1673 **** Location getLocationForModule(Location location, String name) throws IOException { LocationHandler h = getHandler(location); return (h == null ? null : h.getLocationForModule(name)); } ! Location getLocationForModule(Location location, Path dir) { LocationHandler h = getHandler(location); return (h == null ? null : h.getLocationForModule(dir)); } String inferModuleName(Location location) { --- 1692,1702 ---- Location getLocationForModule(Location location, String name) throws IOException { LocationHandler h = getHandler(location); return (h == null ? null : h.getLocationForModule(name)); } ! Location getLocationForModule(Location location, Path dir) throws IOException { LocationHandler h = getHandler(location); return (h == null ? null : h.getLocationForModule(dir)); } String inferModuleName(Location location) {
< prev index next >