mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 23:34:52 +02:00
8152650: ModuleFinder.compose should accept varargs
Reviewed-by: mchung
This commit is contained in:
parent
48ac10a591
commit
ce04e9d9a2
20 changed files with 243 additions and 148 deletions
|
@ -82,14 +82,14 @@ public class GenGraphs {
|
||||||
mods.add(name);
|
mods.add(name);
|
||||||
Configuration cf = Configuration.empty()
|
Configuration cf = Configuration.empty()
|
||||||
.resolveRequires(finder,
|
.resolveRequires(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
Set.of(name));
|
Set.of(name));
|
||||||
genGraphs.genDotFile(dir, name, cf);
|
genGraphs.genDotFile(dir, name, cf);
|
||||||
}
|
}
|
||||||
|
|
||||||
Configuration cf = Configuration.empty()
|
Configuration cf = Configuration.empty()
|
||||||
.resolveRequires(finder,
|
.resolveRequires(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
mods);
|
mods);
|
||||||
genGraphs.genDotFile(dir, "jdk", cf);
|
genGraphs.genDotFile(dir, "jdk", cf);
|
||||||
|
|
||||||
|
|
|
@ -292,7 +292,7 @@ public class ModuleSummary {
|
||||||
static Configuration resolve(Set<String> roots) {
|
static Configuration resolve(Set<String> roots) {
|
||||||
return Configuration.empty()
|
return Configuration.empty()
|
||||||
.resolveRequires(ModuleFinder.ofSystem(),
|
.resolveRequires(ModuleFinder.ofSystem(),
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
roots);
|
roots);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ import java.util.stream.Collectors;
|
||||||
* Configuration parent = Layer.boot().configuration();
|
* Configuration parent = Layer.boot().configuration();
|
||||||
*
|
*
|
||||||
* Configuration cf = parent.resolveRequires(finder,
|
* Configuration cf = parent.resolveRequires(finder,
|
||||||
* ModuleFinder.empty(),
|
* ModuleFinder.of(),
|
||||||
* Set.of("myapp"));
|
* Set.of("myapp"));
|
||||||
* cf.modules().forEach(m -> {
|
* cf.modules().forEach(m -> {
|
||||||
* System.out.format("%s -> %s%n",
|
* System.out.format("%s -> %s%n",
|
||||||
|
@ -366,7 +366,7 @@ public final class Configuration {
|
||||||
Configuration parent = empty();
|
Configuration parent = empty();
|
||||||
|
|
||||||
Resolver resolver
|
Resolver resolver
|
||||||
= new Resolver(finder, parent, ModuleFinder.empty(), traceOutput);
|
= new Resolver(finder, parent, ModuleFinder.of(), traceOutput);
|
||||||
resolver.resolveRequires(roots).resolveUses();
|
resolver.resolveRequires(roots).resolveUses();
|
||||||
|
|
||||||
return new Configuration(parent, resolver, check);
|
return new Configuration(parent, resolver, check);
|
||||||
|
|
|
@ -33,12 +33,15 @@ import java.nio.file.Paths;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.Permission;
|
import java.security.Permission;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
import sun.security.action.GetPropertyAction;
|
import sun.security.action.GetPropertyAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,15 +63,15 @@ import sun.security.action.GetPropertyAction;
|
||||||
* ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
|
* ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
|
||||||
*
|
*
|
||||||
* Optional<ModuleReference> omref = finder.find("jdk.foo");
|
* Optional<ModuleReference> omref = finder.find("jdk.foo");
|
||||||
* if (omref.isPresent()) { ... }
|
* omref.ifPresent(mref -> ... );
|
||||||
*
|
*
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* <p> The {@link #find(String) find} and {@link #findAll() findAll} methods
|
* <p> The {@link #find(String) find} and {@link #findAll() findAll} methods
|
||||||
* defined here can fail for several reasons. These include include I/O errors,
|
* defined here can fail for several reasons. These include I/O errors, errors
|
||||||
* errors detected parsing a module descriptor ({@code module-info.class}), or
|
* detected parsing a module descriptor ({@code module-info.class}), or in the
|
||||||
* in the case of {@code ModuleFinder} returned by {@link #of ModuleFinder.of},
|
* case of {@code ModuleFinder} returned by {@link #of ModuleFinder.of}, that
|
||||||
* that two or more modules with the same name are found in a directory.
|
* two or more modules with the same name are found in a directory.
|
||||||
* When an error is detected then these methods throw {@link FindException
|
* When an error is detected then these methods throw {@link FindException
|
||||||
* FindException} with an appropriate {@link Throwable#getCause cause}.
|
* FindException} with an appropriate {@link Throwable#getCause cause}.
|
||||||
* The behavior of a {@code ModuleFinder} after a {@code FindException} is
|
* The behavior of a {@code ModuleFinder} after a {@code FindException} is
|
||||||
|
@ -205,11 +208,13 @@ public interface ModuleFinder {
|
||||||
*
|
*
|
||||||
* <p> The module finder returned by this method supports modules that are
|
* <p> The module finder returned by this method supports modules that are
|
||||||
* packaged as JAR files. A JAR file with a {@code module-info.class} in
|
* packaged as JAR files. A JAR file with a {@code module-info.class} in
|
||||||
* the top-level directory of the JAR file is a modular JAR and is an
|
* the top-level directory of the JAR file (or overridden by a versioned
|
||||||
* <em>explicit module</em>. A JAR file that does not have a {@code
|
* entry in a {@link java.util.jar.JarFile#isMultiRelease() multi-release}
|
||||||
* module-info.class} in the top-level directory is an {@link
|
* JAR file) is a modular JAR and is an <em>explicit module</em>.
|
||||||
* ModuleDescriptor#isAutomatic automatic} module. The {@link
|
* A JAR file that does not have a {@code module-info.class} in the
|
||||||
* ModuleDescriptor} for an automatic module is created as follows:
|
* top-level directory is an {@link ModuleDescriptor#isAutomatic automatic}
|
||||||
|
* module. The {@link ModuleDescriptor} for an automatic module is created as
|
||||||
|
* follows:
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
*
|
*
|
||||||
|
@ -263,18 +268,22 @@ public interface ModuleFinder {
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* <p> In addition to JAR files, an implementation may also support modules
|
* <p> In addition to JAR files, an implementation may also support modules
|
||||||
* that are packaged in other implementation specific module formats. As
|
* that are packaged in other implementation specific module formats. When
|
||||||
* with automatic modules, the contents of a packaged or exploded module
|
* a file is encountered that is not recognized as a packaged module then
|
||||||
* may need to be <em>scanned</em> in order to determine the packages in
|
* {@code FindException} is thrown. An implementation may choose to ignore
|
||||||
* the module. If a {@code .class} file that corresponds to a class in an
|
* some files, {@link java.nio.file.Files#isHidden hidden} files for
|
||||||
|
* example. Paths to files that do not exist are always ignored. </p>
|
||||||
|
*
|
||||||
|
* <p> As with automatic modules, the contents of a packaged or exploded
|
||||||
|
* module may need to be <em>scanned</em> in order to determine the packages
|
||||||
|
* in the module. If a {@code .class} file that corresponds to a class in an
|
||||||
* unnamed package is encountered then {@code FindException} is thrown. </p>
|
* unnamed package is encountered then {@code FindException} is thrown. </p>
|
||||||
*
|
*
|
||||||
* <p> Finders created by this method are lazy and do not eagerly check
|
* <p> Finders created by this method are lazy and do not eagerly check
|
||||||
* that the given file paths are directories or packaged modules.
|
* that the given file paths are directories or packaged modules.
|
||||||
* Consequently, the {@code find} or {@code findAll} methods will only
|
* Consequently, the {@code find} or {@code findAll} methods will only
|
||||||
* fail if invoking these methods results in searching a directory or
|
* fail if invoking these methods results in searching a directory or
|
||||||
* packaged module and an error is encountered. Paths to files that do not
|
* packaged module and an error is encountered. </p>
|
||||||
* exist are ignored. </p>
|
|
||||||
*
|
*
|
||||||
* @param entries
|
* @param entries
|
||||||
* A possibly-empty array of paths to directories of modules
|
* A possibly-empty array of paths to directories of modules
|
||||||
|
@ -283,81 +292,87 @@ public interface ModuleFinder {
|
||||||
* @return A {@code ModuleFinder} that locates modules on the file system
|
* @return A {@code ModuleFinder} that locates modules on the file system
|
||||||
*/
|
*/
|
||||||
static ModuleFinder of(Path... entries) {
|
static ModuleFinder of(Path... entries) {
|
||||||
|
// special case zero entries
|
||||||
|
if (entries.length == 0) {
|
||||||
|
return new ModuleFinder() {
|
||||||
|
@Override
|
||||||
|
public Optional<ModuleReference> find(String name) {
|
||||||
|
Objects.requireNonNull(name);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<ModuleReference> findAll() {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return new ModulePath(entries);
|
return new ModulePath(entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a module finder that is the equivalent to composing two
|
* Returns a module finder that is composed from a sequence of zero or more
|
||||||
* module finders. The resulting finder will locate modules references
|
* module finders. The {@link #find(String) find} method of the resulting
|
||||||
* using {@code first}; if not found then it will attempt to locate module
|
* module finder will locate a module by invoking the {@code find} method
|
||||||
* references using {@code second}.
|
* of each module finder, in array index order, until either the module is
|
||||||
|
* found or all module finders have been searched. The {@link #findAll()
|
||||||
|
* findAll} method of the resulting module finder will return a set of
|
||||||
|
* modules that includes all modules located by the first module finder.
|
||||||
|
* The set of modules will include all modules located by the second or
|
||||||
|
* subsequent module finder that are not located by previous module finders
|
||||||
|
* in the sequence.
|
||||||
*
|
*
|
||||||
* <p> The {@link #findAll() findAll} method of the resulting module finder
|
* <p> When locating modules then any exceptions or errors thrown by the
|
||||||
* will locate all modules located by the first module finder. It will
|
* {@code find} or {@code findAll} methods of the underlying module finders
|
||||||
* also locate all modules located by the second module finder that are not
|
* will be propogated to the caller of the resulting module finder's
|
||||||
* located by the first module finder. </p>
|
* {@code find} or {@code findAll} methods. </p>
|
||||||
*
|
*
|
||||||
* @apiNote This method will eventually be changed to take a sequence of
|
* @param finders
|
||||||
* module finders.
|
* The array of module finders
|
||||||
*
|
*
|
||||||
* @param first
|
* @return A {@code ModuleFinder} that composes a sequence of module finders
|
||||||
* The first module finder
|
|
||||||
* @param second
|
|
||||||
* The second module finder
|
|
||||||
*
|
|
||||||
* @return A {@code ModuleFinder} that composes two module finders
|
|
||||||
*/
|
*/
|
||||||
static ModuleFinder compose(ModuleFinder first, ModuleFinder second) {
|
static ModuleFinder compose(ModuleFinder... finders) {
|
||||||
Objects.requireNonNull(first);
|
final List<ModuleFinder> finderList = Arrays.asList(finders);
|
||||||
Objects.requireNonNull(second);
|
finderList.forEach(Objects::requireNonNull);
|
||||||
|
|
||||||
return new ModuleFinder() {
|
return new ModuleFinder() {
|
||||||
Set<ModuleReference> allModules;
|
private final Map<String, ModuleReference> nameToModule = new HashMap<>();
|
||||||
|
private Set<ModuleReference> allModules;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ModuleReference> find(String name) {
|
public Optional<ModuleReference> find(String name) {
|
||||||
Optional<ModuleReference> om = first.find(name);
|
// cached?
|
||||||
if (!om.isPresent())
|
ModuleReference mref = nameToModule.get(name);
|
||||||
om = second.find(name);
|
if (mref != null)
|
||||||
return om;
|
return Optional.of(mref);
|
||||||
|
Optional<ModuleReference> omref = finderList.stream()
|
||||||
|
.map(f -> f.find(name))
|
||||||
|
.flatMap(Optional::stream)
|
||||||
|
.findFirst();
|
||||||
|
omref.ifPresent(m -> nameToModule.put(name, m));
|
||||||
|
return omref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<ModuleReference> findAll() {
|
public Set<ModuleReference> findAll() {
|
||||||
if (allModules == null) {
|
if (allModules != null)
|
||||||
allModules = Stream.concat(first.findAll().stream(),
|
return allModules;
|
||||||
second.findAll().stream())
|
// seed with modules already found
|
||||||
.map(a -> a.descriptor().name())
|
Set<ModuleReference> result = new HashSet<>(nameToModule.values());
|
||||||
.distinct()
|
finderList.stream()
|
||||||
.map(this::find)
|
.flatMap(f -> f.findAll().stream())
|
||||||
.map(Optional::get)
|
.forEach(mref -> {
|
||||||
.collect(Collectors.toSet());
|
String name = mref.descriptor().name();
|
||||||
}
|
if (nameToModule.putIfAbsent(name, mref) == null) {
|
||||||
|
result.add(mref);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
allModules = Collections.unmodifiableSet(result);
|
||||||
return allModules;
|
return allModules;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an empty module finder. The empty finder does not find any
|
|
||||||
* modules.
|
|
||||||
*
|
|
||||||
* @apiNote This is useful when using methods such as {@link
|
|
||||||
* Configuration#resolveRequires resolveRequires} where two finders are
|
|
||||||
* specified. An alternative is {@code ModuleFinder.of()}.
|
|
||||||
*
|
|
||||||
* @return A {@code ModuleFinder} that does not find any modules
|
|
||||||
*/
|
|
||||||
static ModuleFinder empty() {
|
|
||||||
// an alternative implementation of ModuleFinder.of()
|
|
||||||
return new ModuleFinder() {
|
|
||||||
@Override public Optional<ModuleReference> find(String name) {
|
|
||||||
Objects.requireNonNull(name);
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
@Override public Set<ModuleReference> findAll() {
|
|
||||||
return Collections.emptySet();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ import sun.security.util.SecurityConstants;
|
||||||
* #boot() boot} layer, that is created when the Java virtual machine is
|
* #boot() boot} layer, that is created when the Java virtual machine is
|
||||||
* started. The <em>system modules</em>, including {@code java.base}, are in
|
* started. The <em>system modules</em>, including {@code java.base}, are in
|
||||||
* the boot layer. The modules in the boot layer are mapped to the bootstrap
|
* the boot layer. The modules in the boot layer are mapped to the bootstrap
|
||||||
* class loader and other class loaders that are built-in into the ava virtual
|
* class loader and other class loaders that are built-in into the Java virtual
|
||||||
* machine. The boot layer will often be the {@link #parent() parent} when
|
* machine. The boot layer will often be the {@link #parent() parent} when
|
||||||
* creating additional layers. </p>
|
* creating additional layers. </p>
|
||||||
*
|
*
|
||||||
|
@ -105,7 +105,7 @@ import sun.security.util.SecurityConstants;
|
||||||
* Layer parent = Layer.boot();
|
* Layer parent = Layer.boot();
|
||||||
*
|
*
|
||||||
* Configuration cf = parent.configuration()
|
* Configuration cf = parent.configuration()
|
||||||
* .resolveRequires(finder, ModuleFinder.empty(), Set.of("myapp"));
|
* .resolveRequires(finder, ModuleFinder.of(), Set.of("myapp"));
|
||||||
*
|
*
|
||||||
* ClassLoader scl = ClassLoader.getSystemClassLoader();
|
* ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
*
|
*
|
||||||
|
|
|
@ -341,7 +341,7 @@ public final class ModuleBootstrap {
|
||||||
// resolve all root modules
|
// resolve all root modules
|
||||||
Configuration cf = Configuration.empty()
|
Configuration cf = Configuration.empty()
|
||||||
.resolveRequires(finder,
|
.resolveRequires(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
roots);
|
roots);
|
||||||
|
|
||||||
// module name -> reference
|
// module name -> reference
|
||||||
|
|
|
@ -125,7 +125,7 @@ class Main {
|
||||||
boolean printModuleDescriptor;
|
boolean printModuleDescriptor;
|
||||||
Version moduleVersion;
|
Version moduleVersion;
|
||||||
Pattern modulesToHash;
|
Pattern modulesToHash;
|
||||||
ModuleFinder moduleFinder = ModuleFinder.empty();
|
ModuleFinder moduleFinder = ModuleFinder.of();
|
||||||
|
|
||||||
private static final String MODULE_INFO = "module-info.class";
|
private static final String MODULE_INFO = "module-info.class";
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,7 @@ public class JlinkTask {
|
||||||
|
|
||||||
Configuration cf = Configuration.empty()
|
Configuration cf = Configuration.empty()
|
||||||
.resolveRequires(finder,
|
.resolveRequires(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
addMods);
|
addMods);
|
||||||
|
|
||||||
Map<String, Path> mods = cf.modules().stream()
|
Map<String, Path> mods = cf.modules().stream()
|
||||||
|
@ -390,7 +390,7 @@ public class JlinkTask {
|
||||||
// resolve all root modules
|
// resolve all root modules
|
||||||
Configuration cf = Configuration.empty()
|
Configuration cf = Configuration.empty()
|
||||||
.resolveRequires(finder,
|
.resolveRequires(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
roots);
|
roots);
|
||||||
|
|
||||||
// module name -> reference
|
// module name -> reference
|
||||||
|
|
|
@ -705,7 +705,7 @@ public final class TaskHelper {
|
||||||
Configuration bootConfiguration = Layer.boot().configuration();
|
Configuration bootConfiguration = Layer.boot().configuration();
|
||||||
try {
|
try {
|
||||||
Configuration cf = bootConfiguration
|
Configuration cf = bootConfiguration
|
||||||
.resolveRequiresAndUses(ModuleFinder.empty(),
|
.resolveRequiresAndUses(ModuleFinder.of(),
|
||||||
finder,
|
finder,
|
||||||
Collections.emptySet());
|
Collections.emptySet());
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class TestLayer {
|
||||||
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
Configuration cf = parent.resolveRequiresAndUses(ModuleFinder.empty(),
|
Configuration cf = parent.resolveRequiresAndUses(ModuleFinder.of(),
|
||||||
finder,
|
finder,
|
||||||
modules);
|
modules);
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class NoAccess {
|
||||||
Configuration parent = bootLayer.configuration();
|
Configuration parent = bootLayer.configuration();
|
||||||
|
|
||||||
Configuration cf = parent.resolveRequiresAndUses(finder,
|
Configuration cf = parent.resolveRequiresAndUses(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
Set.of("m1", "m2"));
|
Set.of("m1", "m2"));
|
||||||
|
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
|
|
|
@ -469,7 +469,7 @@ public class AutomaticModulesTest {
|
||||||
static Configuration resolve(Configuration parent,
|
static Configuration resolve(Configuration parent,
|
||||||
ModuleFinder finder,
|
ModuleFinder finder,
|
||||||
String... roots) {
|
String... roots) {
|
||||||
return parent.resolveRequires(finder, ModuleFinder.empty(), Set.of(roots));
|
return parent.resolveRequires(finder, ModuleFinder.of(), Set.of(roots));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -721,7 +721,7 @@ public class ConfigurationTest {
|
||||||
// finder2 is the after ModuleFinder and so p@2.0 should not be located
|
// finder2 is the after ModuleFinder and so p@2.0 should not be located
|
||||||
// as module p is in parent configuration.
|
// as module p is in parent configuration.
|
||||||
|
|
||||||
cf2 = resolveRequiresAndUses(cf1, ModuleFinder.empty(), finder2, "m1");
|
cf2 = resolveRequiresAndUses(cf1, ModuleFinder.of(), finder2, "m1");
|
||||||
|
|
||||||
assertTrue(cf2.parent().get() == cf1);
|
assertTrue(cf2.parent().get() == cf1);
|
||||||
assertTrue(cf2.modules().size() == 1);
|
assertTrue(cf2.modules().size() == 1);
|
||||||
|
@ -865,7 +865,7 @@ public class ConfigurationTest {
|
||||||
|
|
||||||
ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
|
ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
|
||||||
|
|
||||||
Configuration cf2 = resolveRequires(cf1, ModuleFinder.empty(), finder2, "m2");
|
Configuration cf2 = resolveRequires(cf1, ModuleFinder.of(), finder2, "m2");
|
||||||
|
|
||||||
assertTrue(cf2.modules().size() == 1);
|
assertTrue(cf2.modules().size() == 1);
|
||||||
assertTrue(cf2.findModule("m2").isPresent());
|
assertTrue(cf2.findModule("m2").isPresent());
|
||||||
|
@ -967,7 +967,7 @@ public class ConfigurationTest {
|
||||||
*/
|
*/
|
||||||
@Test(expectedExceptions = { ResolutionException.class })
|
@Test(expectedExceptions = { ResolutionException.class })
|
||||||
public void testRootNotFound() {
|
public void testRootNotFound() {
|
||||||
resolveRequires(ModuleFinder.empty(), "m1");
|
resolveRequires(ModuleFinder.of(), "m1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1440,22 +1440,22 @@ public class ConfigurationTest {
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
public void testResolveRequiresWithNull1() {
|
public void testResolveRequiresWithNull1() {
|
||||||
resolveRequires((ModuleFinder)null, ModuleFinder.empty());
|
resolveRequires((ModuleFinder)null, ModuleFinder.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
public void testResolveRequiresWithNull2() {
|
public void testResolveRequiresWithNull2() {
|
||||||
resolveRequires(ModuleFinder.empty(), (ModuleFinder)null);
|
resolveRequires(ModuleFinder.of(), (ModuleFinder)null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
public void testResolveRequiresAndUsesWithNull1() {
|
public void testResolveRequiresAndUsesWithNull1() {
|
||||||
resolveRequiresAndUses((ModuleFinder) null, ModuleFinder.empty());
|
resolveRequiresAndUses((ModuleFinder) null, ModuleFinder.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
public void testResolveRequiresAndUsesWithNull2() {
|
public void testResolveRequiresAndUsesWithNull2() {
|
||||||
resolveRequiresAndUses(ModuleFinder.empty(), (ModuleFinder) null);
|
resolveRequiresAndUses(ModuleFinder.of(), (ModuleFinder) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
|
@ -1493,7 +1493,7 @@ public class ConfigurationTest {
|
||||||
private Configuration resolveRequires(Configuration parent,
|
private Configuration resolveRequires(Configuration parent,
|
||||||
ModuleFinder before,
|
ModuleFinder before,
|
||||||
String... roots) {
|
String... roots) {
|
||||||
return resolveRequires(parent, before, ModuleFinder.empty(), roots);
|
return resolveRequires(parent, before, ModuleFinder.of(), roots);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Configuration resolveRequires(ModuleFinder before,
|
private Configuration resolveRequires(ModuleFinder before,
|
||||||
|
@ -1521,7 +1521,7 @@ public class ConfigurationTest {
|
||||||
private Configuration resolveRequiresAndUses(Configuration parent,
|
private Configuration resolveRequiresAndUses(Configuration parent,
|
||||||
ModuleFinder before,
|
ModuleFinder before,
|
||||||
String... roots) {
|
String... roots) {
|
||||||
return resolveRequiresAndUses(parent, before, ModuleFinder.empty(), roots);
|
return resolveRequiresAndUses(parent, before, ModuleFinder.of(), roots);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Configuration resolveRequiresAndUses(ModuleFinder before,
|
private Configuration resolveRequiresAndUses(ModuleFinder before,
|
||||||
|
|
|
@ -76,9 +76,9 @@ public class ModuleFinderTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ModuleFinder.of with zero entries
|
* Test ModuleFinder.of with no entries
|
||||||
*/
|
*/
|
||||||
public void testOfZeroEntries() {
|
public void testOfNoEntries() {
|
||||||
ModuleFinder finder = ModuleFinder.of();
|
ModuleFinder finder = ModuleFinder.of();
|
||||||
assertTrue(finder.findAll().isEmpty());
|
assertTrue(finder.findAll().isEmpty());
|
||||||
assertFalse(finder.find("java.rhubarb").isPresent());
|
assertFalse(finder.find("java.rhubarb").isPresent());
|
||||||
|
@ -454,18 +454,46 @@ public class ModuleFinderTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ModuleFinder.compose
|
* Test ModuleFinder.compose with no module finders
|
||||||
*/
|
*/
|
||||||
public void testCompose() throws Exception {
|
public void testComposeOfNone() throws Exception {
|
||||||
|
ModuleFinder finder = ModuleFinder.of();
|
||||||
|
assertTrue(finder.findAll().isEmpty());
|
||||||
|
assertFalse(finder.find("java.rhubarb").isPresent());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test ModuleFinder.compose with one module finder
|
||||||
|
*/
|
||||||
|
public void testComposeOfOne() throws Exception {
|
||||||
|
Path dir = Files.createTempDirectory(USER_DIR, "mods");
|
||||||
|
createModularJar(dir.resolve("m1.jar"), "m1");
|
||||||
|
createModularJar(dir.resolve("m2.jar"), "m2");
|
||||||
|
|
||||||
|
ModuleFinder finder1 = ModuleFinder.of(dir);
|
||||||
|
|
||||||
|
ModuleFinder finder = ModuleFinder.compose(finder1);
|
||||||
|
assertTrue(finder.findAll().size() == 2);
|
||||||
|
assertTrue(finder.find("m1").isPresent());
|
||||||
|
assertTrue(finder.find("m2").isPresent());
|
||||||
|
assertFalse(finder.find("java.rhubarb").isPresent());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test ModuleFinder.compose with two module finders
|
||||||
|
*/
|
||||||
|
public void testComposeOfTwo() throws Exception {
|
||||||
Path dir1 = Files.createTempDirectory(USER_DIR, "mods1");
|
Path dir1 = Files.createTempDirectory(USER_DIR, "mods1");
|
||||||
createExplodedModule(dir1.resolve("m1"), "m1@1.0");
|
createModularJar(dir1.resolve("m1.jar"), "m1@1.0");
|
||||||
createExplodedModule(dir1.resolve("m2"), "m2@1.0");
|
createModularJar(dir1.resolve("m2.jar"), "m2@1.0");
|
||||||
|
|
||||||
Path dir2 = Files.createTempDirectory(USER_DIR, "mods2");
|
Path dir2 = Files.createTempDirectory(USER_DIR, "mods2");
|
||||||
createExplodedModule(dir2.resolve("m1"), "m1@2.0");
|
createModularJar(dir2.resolve("m1.jar"), "m1@2.0");
|
||||||
createExplodedModule(dir2.resolve("m2"), "m2@2.0");
|
createModularJar(dir2.resolve("m2.jar"), "m2@2.0");
|
||||||
createExplodedModule(dir2.resolve("m3"), "m3");
|
createModularJar(dir2.resolve("m3.jar"), "m3");
|
||||||
createExplodedModule(dir2.resolve("m4"), "m4");
|
createModularJar(dir2.resolve("m4.jar"), "m4");
|
||||||
|
|
||||||
ModuleFinder finder1 = ModuleFinder.of(dir1);
|
ModuleFinder finder1 = ModuleFinder.of(dir1);
|
||||||
ModuleFinder finder2 = ModuleFinder.of(dir2);
|
ModuleFinder finder2 = ModuleFinder.of(dir2);
|
||||||
|
@ -478,23 +506,65 @@ public class ModuleFinderTest {
|
||||||
assertTrue(finder.find("m4").isPresent());
|
assertTrue(finder.find("m4").isPresent());
|
||||||
assertFalse(finder.find("java.rhubarb").isPresent());
|
assertFalse(finder.find("java.rhubarb").isPresent());
|
||||||
|
|
||||||
// check that m1@1.0 (and not m1@2.0) is found
|
// check that m1@1.0 is found
|
||||||
ModuleDescriptor m1 = finder.find("m1").get().descriptor();
|
ModuleDescriptor m1 = finder.find("m1").get().descriptor();
|
||||||
assertEquals(m1.version().get().toString(), "1.0");
|
assertEquals(m1.version().get().toString(), "1.0");
|
||||||
|
|
||||||
// check that m2@1.0 (and not m2@2.0) is found
|
// check that m2@1.0 is found
|
||||||
ModuleDescriptor m2 = finder.find("m2").get().descriptor();
|
ModuleDescriptor m2 = finder.find("m2").get().descriptor();
|
||||||
assertEquals(m2.version().get().toString(), "1.0");
|
assertEquals(m2.version().get().toString(), "1.0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ModuleFinder.empty
|
* Test ModuleFinder.compose with three module finders
|
||||||
*/
|
*/
|
||||||
public void testEmpty() {
|
public void testComposeOfThree() throws Exception {
|
||||||
ModuleFinder finder = ModuleFinder.empty();
|
Path dir1 = Files.createTempDirectory(USER_DIR, "mods1");
|
||||||
assertTrue(finder.findAll().isEmpty());
|
createModularJar(dir1.resolve("m1.jar"), "m1@1.0");
|
||||||
|
createModularJar(dir1.resolve("m2.jar"), "m2@1.0");
|
||||||
|
|
||||||
|
Path dir2 = Files.createTempDirectory(USER_DIR, "mods2");
|
||||||
|
createModularJar(dir2.resolve("m1.jar"), "m1@2.0");
|
||||||
|
createModularJar(dir2.resolve("m2.jar"), "m2@2.0");
|
||||||
|
createModularJar(dir2.resolve("m3.jar"), "m3@2.0");
|
||||||
|
createModularJar(dir2.resolve("m4.jar"), "m4@2.0");
|
||||||
|
|
||||||
|
Path dir3 = Files.createTempDirectory(USER_DIR, "mods3");
|
||||||
|
createModularJar(dir3.resolve("m3.jar"), "m3@3.0");
|
||||||
|
createModularJar(dir3.resolve("m4.jar"), "m4@3.0");
|
||||||
|
createModularJar(dir3.resolve("m5.jar"), "m5");
|
||||||
|
createModularJar(dir3.resolve("m6.jar"), "m6");
|
||||||
|
|
||||||
|
ModuleFinder finder1 = ModuleFinder.of(dir1);
|
||||||
|
ModuleFinder finder2 = ModuleFinder.of(dir2);
|
||||||
|
ModuleFinder finder3 = ModuleFinder.of(dir3);
|
||||||
|
|
||||||
|
ModuleFinder finder = ModuleFinder.compose(finder1, finder2, finder3);
|
||||||
|
assertTrue(finder.findAll().size() == 6);
|
||||||
|
assertTrue(finder.find("m1").isPresent());
|
||||||
|
assertTrue(finder.find("m2").isPresent());
|
||||||
|
assertTrue(finder.find("m3").isPresent());
|
||||||
|
assertTrue(finder.find("m4").isPresent());
|
||||||
|
assertTrue(finder.find("m5").isPresent());
|
||||||
|
assertTrue(finder.find("m6").isPresent());
|
||||||
assertFalse(finder.find("java.rhubarb").isPresent());
|
assertFalse(finder.find("java.rhubarb").isPresent());
|
||||||
|
|
||||||
|
// check that m1@1.0 is found
|
||||||
|
ModuleDescriptor m1 = finder.find("m1").get().descriptor();
|
||||||
|
assertEquals(m1.version().get().toString(), "1.0");
|
||||||
|
|
||||||
|
// check that m2@1.0 is found
|
||||||
|
ModuleDescriptor m2 = finder.find("m2").get().descriptor();
|
||||||
|
assertEquals(m2.version().get().toString(), "1.0");
|
||||||
|
|
||||||
|
// check that m3@2.0 is found
|
||||||
|
ModuleDescriptor m3 = finder.find("m3").get().descriptor();
|
||||||
|
assertEquals(m3.version().get().toString(), "2.0");
|
||||||
|
|
||||||
|
// check that m4@2.0 is found
|
||||||
|
ModuleDescriptor m4 = finder.find("m4").get().descriptor();
|
||||||
|
assertEquals(m4.version().get().toString(), "2.0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -503,33 +573,45 @@ public class ModuleFinderTest {
|
||||||
*/
|
*/
|
||||||
public void testNulls() {
|
public void testNulls() {
|
||||||
|
|
||||||
|
// ofSystem
|
||||||
try {
|
try {
|
||||||
ModuleFinder.ofSystem().find(null);
|
ModuleFinder.ofSystem().find(null);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
} catch (NullPointerException expected) { }
|
} catch (NullPointerException expected) { }
|
||||||
|
|
||||||
|
// of
|
||||||
|
Path dir = Paths.get("d");
|
||||||
try {
|
try {
|
||||||
ModuleFinder.of().find(null);
|
ModuleFinder.of().find(null);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
} catch (NullPointerException expected) { }
|
} catch (NullPointerException expected) { }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ModuleFinder.empty().find(null);
|
ModuleFinder.of((Path)null);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
} catch (NullPointerException expected) { }
|
} catch (NullPointerException expected) { }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ModuleFinder.of((Path[])null);
|
ModuleFinder.of((Path[])null);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
} catch (NullPointerException expected) { }
|
} catch (NullPointerException expected) { }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ModuleFinder.of((Path)null);
|
ModuleFinder.of(dir, null);
|
||||||
|
assertTrue(false);
|
||||||
|
} catch (NullPointerException expected) { }
|
||||||
|
try {
|
||||||
|
ModuleFinder.of(null, dir);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
} catch (NullPointerException expected) { }
|
} catch (NullPointerException expected) { }
|
||||||
|
|
||||||
// compose
|
// compose
|
||||||
ModuleFinder finder = ModuleFinder.of();
|
ModuleFinder finder = ModuleFinder.of();
|
||||||
|
try {
|
||||||
|
ModuleFinder.compose((ModuleFinder)null);
|
||||||
|
assertTrue(false);
|
||||||
|
} catch (NullPointerException expected) { }
|
||||||
|
try {
|
||||||
|
ModuleFinder.compose((ModuleFinder[])null);
|
||||||
|
assertTrue(false);
|
||||||
|
} catch (NullPointerException expected) { }
|
||||||
try {
|
try {
|
||||||
ModuleFinder.compose(finder, null);
|
ModuleFinder.compose(finder, null);
|
||||||
assertTrue(false);
|
assertTrue(false);
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
import java.lang.module.Configuration;
|
import java.lang.module.Configuration;
|
||||||
import java.lang.module.ModuleDescriptor;
|
import java.lang.module.ModuleDescriptor;
|
||||||
import java.lang.module.ModuleFinder;
|
import java.lang.module.ModuleFinder;
|
||||||
import static java.lang.module.ModuleFinder.empty;
|
|
||||||
import java.lang.reflect.Layer;
|
import java.lang.reflect.Layer;
|
||||||
import java.lang.reflect.LayerInstantiationException;
|
import java.lang.reflect.LayerInstantiationException;
|
||||||
import java.lang.reflect.Module;
|
import java.lang.reflect.Module;
|
||||||
|
@ -358,7 +357,7 @@ public class BasicLayerTest {
|
||||||
ModuleFinder finder = ModuleUtils.finderOf(descriptor);
|
ModuleFinder finder = ModuleUtils.finderOf(descriptor);
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
Configuration cf = parent.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
assertTrue(cf.modules().size() == 1);
|
assertTrue(cf.modules().size() == 1);
|
||||||
|
|
||||||
ClassLoader loader = new ClassLoader() { };
|
ClassLoader loader = new ClassLoader() { };
|
||||||
|
@ -684,7 +683,7 @@ public class BasicLayerTest {
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
|
|
||||||
Configuration cf = parent.resolveRequires(finder, empty(), Set.of("m"));
|
Configuration cf = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m"));
|
||||||
|
|
||||||
ClassLoader loader = new ClassLoader() { };
|
ClassLoader loader = new ClassLoader() { };
|
||||||
|
|
||||||
|
@ -724,13 +723,13 @@ public class BasicLayerTest {
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
|
|
||||||
Configuration cf1 = parent.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf1 = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
Layer layer1 = Layer.boot().defineModules(cf1, mn -> loader);
|
Layer layer1 = Layer.boot().defineModules(cf1, mn -> loader);
|
||||||
|
|
||||||
// attempt to define m2 containing package p to class loader
|
// attempt to define m2 containing package p to class loader
|
||||||
|
|
||||||
Configuration cf2 = parent.resolveRequires(finder, empty(), Set.of("m2"));
|
Configuration cf2 = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m2"));
|
||||||
|
|
||||||
// should throw exception because p already in m1
|
// should throw exception because p already in m1
|
||||||
Layer layer2 = Layer.boot().defineModules(cf2, mn -> loader);
|
Layer layer2 = Layer.boot().defineModules(cf2, mn -> loader);
|
||||||
|
@ -757,7 +756,7 @@ public class BasicLayerTest {
|
||||||
ModuleFinder finder = ModuleUtils.finderOf(md);
|
ModuleFinder finder = ModuleUtils.finderOf(md);
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
Configuration cf = parent.resolveRequires(finder, empty(), Set.of("m"));
|
Configuration cf = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m"));
|
||||||
|
|
||||||
Layer.boot().defineModules(cf, mn -> c.getClassLoader());
|
Layer.boot().defineModules(cf, mn -> c.getClassLoader());
|
||||||
}
|
}
|
||||||
|
@ -777,7 +776,7 @@ public class BasicLayerTest {
|
||||||
ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
|
ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
|
||||||
|
|
||||||
Configuration parent = Layer.boot().configuration();
|
Configuration parent = Layer.boot().configuration();
|
||||||
Configuration cf = parent.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf = parent.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
ClassLoader loader = new ClassLoader() { };
|
ClassLoader loader = new ClassLoader() { };
|
||||||
Layer.empty().defineModules(cf, mn -> loader);
|
Layer.empty().defineModules(cf, mn -> loader);
|
||||||
|
@ -814,7 +813,7 @@ public class BasicLayerTest {
|
||||||
@Test(expectedExceptions = { NullPointerException.class })
|
@Test(expectedExceptions = { NullPointerException.class })
|
||||||
public void testCreateWithNull2() {
|
public void testCreateWithNull2() {
|
||||||
ClassLoader loader = new ClassLoader() { };
|
ClassLoader loader = new ClassLoader() { };
|
||||||
Configuration cf = resolveRequires(Layer.boot().configuration(), empty());
|
Configuration cf = resolveRequires(Layer.boot().configuration(), ModuleFinder.of());
|
||||||
Layer.boot().defineModules(cf, null);
|
Layer.boot().defineModules(cf, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,7 +856,7 @@ public class BasicLayerTest {
|
||||||
private static Configuration resolveRequires(Configuration cf,
|
private static Configuration resolveRequires(Configuration cf,
|
||||||
ModuleFinder finder,
|
ModuleFinder finder,
|
||||||
String... roots) {
|
String... roots) {
|
||||||
return cf.resolveRequires(finder, empty(), Set.of(roots));
|
return cf.resolveRequires(finder, ModuleFinder.of(), Set.of(roots));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Configuration resolveRequires(ModuleFinder finder,
|
private static Configuration resolveRequires(ModuleFinder finder,
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
import java.lang.module.Configuration;
|
import java.lang.module.Configuration;
|
||||||
import java.lang.module.ModuleDescriptor;
|
import java.lang.module.ModuleDescriptor;
|
||||||
import java.lang.module.ModuleFinder;
|
import java.lang.module.ModuleFinder;
|
||||||
import static java.lang.module.ModuleFinder.empty;
|
|
||||||
import java.lang.module.ModuleReference;
|
import java.lang.module.ModuleReference;
|
||||||
import java.lang.reflect.Layer;
|
import java.lang.reflect.Layer;
|
||||||
import java.lang.reflect.LayerInstantiationException;
|
import java.lang.reflect.LayerInstantiationException;
|
||||||
|
@ -71,7 +70,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic test of Layer.createWithOneLoader
|
* Basic test of Layer.defineModulesWithOneLoader
|
||||||
*
|
*
|
||||||
* Test scenario:
|
* Test scenario:
|
||||||
* m1 requires m2 and m3
|
* m1 requires m2 and m3
|
||||||
|
@ -100,7 +99,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic test of Layer.createWithManyLoaders
|
* Basic test of Layer.defineModulesWithManyLoaders
|
||||||
*
|
*
|
||||||
* Test scenario:
|
* Test scenario:
|
||||||
* m1 requires m2 and m3
|
* m1 requires m2 and m3
|
||||||
|
@ -132,7 +131,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic test of Layer.createWithOneLoader where one of the modules
|
* Basic test of Layer.defineModulesWithOneLoader where one of the modules
|
||||||
* is a service provider module.
|
* is a service provider module.
|
||||||
*
|
*
|
||||||
* Test scenario:
|
* Test scenario:
|
||||||
|
@ -173,7 +172,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic test of Layer.createWithManyLoaders where one of the modules
|
* Basic test of Layer.defineModulesWithManyLoaders where one of the modules
|
||||||
* is a service provider module.
|
* is a service provider module.
|
||||||
*
|
*
|
||||||
* Test scenario:
|
* Test scenario:
|
||||||
|
@ -273,7 +272,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
Configuration cf = Layer.boot()
|
Configuration cf = Layer.boot()
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequires(finder, empty(), Set.of("m1", "m2"));
|
.resolveRequires(finder, ModuleFinder.of(), Set.of("m1", "m2"));
|
||||||
|
|
||||||
// cannot define both module m1 and m2 to the same class loader
|
// cannot define both module m1 and m2 to the same class loader
|
||||||
try {
|
try {
|
||||||
|
@ -307,7 +306,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
Configuration cf1 = Layer.boot()
|
Configuration cf1 = Layer.boot()
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequires(finder1, empty(), Set.of("m1", "m2"));
|
.resolveRequires(finder1, ModuleFinder.of(), Set.of("m1", "m2"));
|
||||||
|
|
||||||
Layer layer1 = Layer.boot().defineModulesWithManyLoaders(cf1, null);
|
Layer layer1 = Layer.boot().defineModulesWithManyLoaders(cf1, null);
|
||||||
checkLayer(layer1, "m1", "m2");
|
checkLayer(layer1, "m1", "m2");
|
||||||
|
@ -320,7 +319,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
|
ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
|
||||||
|
|
||||||
Configuration cf2 = cf1.resolveRequires(finder2, empty(), Set.of("m3", "m4"));
|
Configuration cf2 = cf1.resolveRequires(finder2, ModuleFinder.of(), Set.of("m3", "m4"));
|
||||||
|
|
||||||
// package p cannot be supplied by two class loaders
|
// package p cannot be supplied by two class loaders
|
||||||
try {
|
try {
|
||||||
|
@ -351,7 +350,7 @@ public class LayerAndLoadersTest {
|
||||||
checkLayer(layer1, "m1", "m2", "m3");
|
checkLayer(layer1, "m1", "m2", "m3");
|
||||||
|
|
||||||
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
||||||
Configuration cf2 = cf1.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf2 = cf1.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
Layer layer2 = layer1.defineModulesWithOneLoader(cf2, null);
|
Layer layer2 = layer1.defineModulesWithOneLoader(cf2, null);
|
||||||
checkLayer(layer2, "m1", "m2", "m3");
|
checkLayer(layer2, "m1", "m2", "m3");
|
||||||
|
@ -399,7 +398,7 @@ public class LayerAndLoadersTest {
|
||||||
checkLayer(layer1, "m1", "m2", "m3");
|
checkLayer(layer1, "m1", "m2", "m3");
|
||||||
|
|
||||||
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
||||||
Configuration cf2 = cf1.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf2 = cf1.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
Layer layer2 = layer1.defineModulesWithManyLoaders(cf2, null);
|
Layer layer2 = layer1.defineModulesWithManyLoaders(cf2, null);
|
||||||
checkLayer(layer2, "m1", "m2", "m3");
|
checkLayer(layer2, "m1", "m2", "m3");
|
||||||
|
@ -493,7 +492,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
ModuleFinder finder = finderFor("m1", "m3");
|
ModuleFinder finder = finderFor("m1", "m3");
|
||||||
|
|
||||||
Configuration cf2 = cf1.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf2 = cf1.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
Layer layer2 = layer1.defineModulesWithOneLoader(cf2, null);
|
Layer layer2 = layer1.defineModulesWithOneLoader(cf2, null);
|
||||||
checkLayer(layer2, "m1", "m3");
|
checkLayer(layer2, "m1", "m3");
|
||||||
|
@ -529,7 +528,7 @@ public class LayerAndLoadersTest {
|
||||||
|
|
||||||
ModuleFinder finder = finderFor("m1", "m3");
|
ModuleFinder finder = finderFor("m1", "m3");
|
||||||
|
|
||||||
Configuration cf2 = cf1.resolveRequires(finder, empty(), Set.of("m1"));
|
Configuration cf2 = cf1.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
|
||||||
|
|
||||||
Layer layer2 = layer1.defineModulesWithManyLoaders(cf2, null);
|
Layer layer2 = layer1.defineModulesWithManyLoaders(cf2, null);
|
||||||
checkLayer(layer2, "m1", "m3");
|
checkLayer(layer2, "m1", "m3");
|
||||||
|
@ -575,7 +574,7 @@ public class LayerAndLoadersTest {
|
||||||
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
||||||
return Layer.boot()
|
return Layer.boot()
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequires(finder, empty(), Set.of(roots));
|
.resolveRequires(finder, ModuleFinder.of(), Set.of(roots));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -586,7 +585,7 @@ public class LayerAndLoadersTest {
|
||||||
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
ModuleFinder finder = ModuleFinder.of(MODS_DIR);
|
||||||
return Layer.boot()
|
return Layer.boot()
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequiresAndUses(finder, empty(), Set.of(roots));
|
.resolveRequiresAndUses(finder, ModuleFinder.of(), Set.of(roots));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class ProxyClassAccessTest {
|
||||||
Layer bootLayer = Layer.boot();
|
Layer bootLayer = Layer.boot();
|
||||||
Configuration cf = bootLayer
|
Configuration cf = bootLayer
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequiresAndUses(ModuleFinder.empty(), finder, modules);
|
.resolveRequiresAndUses(ModuleFinder.of(), finder, modules);
|
||||||
ClassLoader parentLoader = this.getClass().getClassLoader();
|
ClassLoader parentLoader = this.getClass().getClassLoader();
|
||||||
Layer layer = bootLayer.defineModulesWithOneLoader(cf, parentLoader);
|
Layer layer = bootLayer.defineModulesWithOneLoader(cf, parentLoader);
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class ProxyLayerTest {
|
||||||
Layer bootLayer = Layer.boot();
|
Layer bootLayer = Layer.boot();
|
||||||
Configuration cf = bootLayer
|
Configuration cf = bootLayer
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequiresAndUses(ModuleFinder.empty(), finder, Arrays.asList(modules));
|
.resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ public class ProxyLayerTest {
|
||||||
Layer bootLayer = Layer.boot();
|
Layer bootLayer = Layer.boot();
|
||||||
Configuration cf = bootLayer
|
Configuration cf = bootLayer
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequiresAndUses(ModuleFinder.empty(), finder, Arrays.asList(modules));
|
.resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ public class ProxyLayerTest {
|
||||||
Layer bootLayer = Layer.boot();
|
Layer bootLayer = Layer.boot();
|
||||||
Configuration cf = bootLayer
|
Configuration cf = bootLayer
|
||||||
.configuration()
|
.configuration()
|
||||||
.resolveRequiresAndUses(ModuleFinder.empty(), finder, Arrays.asList(modules));
|
.resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@ public class ServicesTest {
|
||||||
Layer bootLayer = Layer.boot();
|
Layer bootLayer = Layer.boot();
|
||||||
Configuration parent = bootLayer.configuration();
|
Configuration parent = bootLayer.configuration();
|
||||||
Configuration cf
|
Configuration cf
|
||||||
= parent.resolveRequiresAndUses(finder, ModuleFinder.empty(), Set.of());
|
= parent.resolveRequiresAndUses(finder, ModuleFinder.of(), Set.of());
|
||||||
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
ClassLoader scl = ClassLoader.getSystemClassLoader();
|
||||||
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class Main {
|
||||||
|
|
||||||
Configuration cf = Layer.boot().configuration()
|
Configuration cf = Layer.boot().configuration()
|
||||||
.resolveRequiresAndUses(finder,
|
.resolveRequiresAndUses(finder,
|
||||||
ModuleFinder.empty(),
|
ModuleFinder.of(),
|
||||||
Set.of(appModuleName));
|
Set.of(appModuleName));
|
||||||
|
|
||||||
System.out.println("Resolved");
|
System.out.println("Resolved");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue