< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/code/ModuleFinder.java
Print this page
*** 265,274 ****
--- 265,275 ----
}
private List<ModuleSymbol> scanModulePath(ModuleSymbol toFind) {
ListBuffer<ModuleSymbol> results = new ListBuffer<>();
Map<Name, Location> namesInSet = new HashMap<>();
+ boolean multiModuleMode = fileManager.hasLocation(StandardLocation.MODULE_SOURCE_PATH);
while (moduleLocationIterator.hasNext()) {
Set<Location> locns = (moduleLocationIterator.next());
namesInSet.clear();
for (Location l: locns) {
try {
*** 277,299 ****
ModuleSymbol msym = syms.enterModule(n);
if (msym.sourceLocation != null || msym.classLocation != null) {
// module has already been found, so ignore this instance
continue;
}
if (moduleLocationIterator.outer == StandardLocation.MODULE_SOURCE_PATH) {
msym.sourceLocation = l;
if (fileManager.hasLocation(StandardLocation.CLASS_OUTPUT)) {
! msym.classLocation = fileManager.getLocationForModule(StandardLocation.CLASS_OUTPUT, msym.name.toString());
}
} else {
msym.classLocation = l;
}
if (moduleLocationIterator.outer == StandardLocation.SYSTEM_MODULES ||
moduleLocationIterator.outer == StandardLocation.UPGRADE_MODULE_PATH) {
msym.flags_field |= Flags.SYSTEM_MODULE;
}
! if (toFind == msym || toFind == null) {
// Note: cannot return msym directly, because we must finish
// processing this set first
results.add(msym);
}
} else {
--- 278,320 ----
ModuleSymbol msym = syms.enterModule(n);
if (msym.sourceLocation != null || msym.classLocation != null) {
// module has already been found, so ignore this instance
continue;
}
+ if (fileManager.hasLocation(StandardLocation.PATCH_MODULE_PATH) &&
+ msym.patchLocation == null) {
+ msym.patchLocation =
+ fileManager.getLocationForModule(StandardLocation.PATCH_MODULE_PATH,
+ msym.name.toString());
+ checkModuleInfoOnLocation(msym.patchLocation, Kind.CLASS, Kind.SOURCE);
+ if (msym.patchLocation != null &&
+ multiModuleMode &&
+ fileManager.hasLocation(StandardLocation.CLASS_OUTPUT)) {
+ msym.patchOutputLocation =
+ fileManager.getLocationForModule(StandardLocation.CLASS_OUTPUT,
+ msym.name.toString());
+ checkModuleInfoOnLocation(msym.patchOutputLocation, Kind.CLASS);
+ }
+ }
if (moduleLocationIterator.outer == StandardLocation.MODULE_SOURCE_PATH) {
+ if (msym.patchLocation == null) {
msym.sourceLocation = l;
if (fileManager.hasLocation(StandardLocation.CLASS_OUTPUT)) {
! msym.classLocation =
! fileManager.getLocationForModule(StandardLocation.CLASS_OUTPUT,
! msym.name.toString());
! }
}
} else {
msym.classLocation = l;
}
if (moduleLocationIterator.outer == StandardLocation.SYSTEM_MODULES ||
moduleLocationIterator.outer == StandardLocation.UPGRADE_MODULE_PATH) {
msym.flags_field |= Flags.SYSTEM_MODULE;
}
! if (toFind == null ||
! (toFind == msym && (msym.sourceLocation != null || msym.classLocation != null))) {
// Note: cannot return msym directly, because we must finish
// processing this set first
results.add(msym);
}
} else {
*** 309,318 ****
--- 330,354 ----
}
return results.toList();
}
+ private void checkModuleInfoOnLocation(Location location, Kind... kinds) throws IOException {
+ if (location == null)
+ return ;
+
+ for (Kind kind : kinds) {
+ JavaFileObject file = fileManager.getJavaFileForInput(location,
+ names.module_info.toString(),
+ kind);
+ if (file != null) {
+ log.error(Errors.LocnModuleInfoNotAllowedOnPatchPath(file));
+ return ;
+ }
+ }
+ }
+
private void findModuleInfo(ModuleSymbol msym) {
try {
JavaFileObject src_fo = (msym.sourceLocation == null) ? null
: fileManager.getJavaFileForInput(msym.sourceLocation,
names.module_info.toString(), Kind.SOURCE);
< prev index next >