312 Objects.requireNonNull(second);
313
314 return new ModuleFinder() {
315 Set<ModuleReference> allModules;
316
317 @Override
318 public Optional<ModuleReference> find(String name) {
319 Optional<ModuleReference> om = first.find(name);
320 if (!om.isPresent())
321 om = second.find(name);
322 return om;
323 }
324 @Override
325 public Set<ModuleReference> findAll() {
326 if (allModules == null) {
327 allModules = Stream.concat(first.findAll().stream(),
328 second.findAll().stream())
329 .map(a -> a.descriptor().name())
330 .distinct()
331 .map(this::find)
332 .map(Optional::get)
333 .collect(Collectors.toSet());
334 }
335 return allModules;
336 }
337 };
338 }
339
340 /**
341 * Returns an empty module finder. The empty finder does not find any
342 * modules.
343 *
344 * @apiNote This is useful when using methods such as {@link
345 * Configuration#resolveRequires resolveRequires} where two finders are
346 * specified. An alternative is {@code ModuleFinder.of()}.
347 *
348 * @return A {@code ModuleFinder} that does not find any modules
349 */
350 static ModuleFinder empty() {
351 // an alternative implementation of ModuleFinder.of()
352 return new ModuleFinder() {
|
312 Objects.requireNonNull(second);
313
314 return new ModuleFinder() {
315 Set<ModuleReference> allModules;
316
317 @Override
318 public Optional<ModuleReference> find(String name) {
319 Optional<ModuleReference> om = first.find(name);
320 if (!om.isPresent())
321 om = second.find(name);
322 return om;
323 }
324 @Override
325 public Set<ModuleReference> findAll() {
326 if (allModules == null) {
327 allModules = Stream.concat(first.findAll().stream(),
328 second.findAll().stream())
329 .map(a -> a.descriptor().name())
330 .distinct()
331 .map(this::find)
332 .map(Optional::getWhenPresent)
333 .collect(Collectors.toSet());
334 }
335 return allModules;
336 }
337 };
338 }
339
340 /**
341 * Returns an empty module finder. The empty finder does not find any
342 * modules.
343 *
344 * @apiNote This is useful when using methods such as {@link
345 * Configuration#resolveRequires resolveRequires} where two finders are
346 * specified. An alternative is {@code ModuleFinder.of()}.
347 *
348 * @return A {@code ModuleFinder} that does not find any modules
349 */
350 static ModuleFinder empty() {
351 // an alternative implementation of ModuleFinder.of()
352 return new ModuleFinder() {
|