< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java

Print this page

        

*** 72,81 **** --- 72,82 ---- import java.util.Map; import java.util.MissingResourceException; import java.util.Optional; import java.util.ResourceBundle; import java.util.Set; + import java.util.TreeSet; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.jar.JarEntry;
*** 495,504 **** --- 496,506 ---- try (InputStream in = miSupplier.get()) { ModuleInfoExtender extender = ModuleInfoExtender.newExtender(in); // Add (or replace) the Packages attribute if (packages != null) { + validatePackages(descriptor, packages); extender.packages(packages); } // --main-class if (mainClass != null)
*** 528,537 **** --- 530,557 ---- // write the (possibly extended or modified) module-info.class out.writeEntry(extender.toByteArray(), Section.CLASSES, MODULE_INFO); } } + private void validatePackages(ModuleDescriptor descriptor, Set<String> packages) { + Set<String> nonExistPackages = new TreeSet<>(); + descriptor.exports().stream() + .map(Exports::source) + .filter(pn -> !packages.contains(pn)) + .forEach(nonExistPackages::add); + + descriptor.opens().stream() + .map(Opens::source) + .filter(pn -> !packages.contains(pn)) + .forEach(nonExistPackages::add); + + if (!nonExistPackages.isEmpty()) { + throw new CommandException("err.missing.export.or.open.packages", + descriptor.name(), nonExistPackages); + } + } + /* * Hasher resolves a module graph using the --hash-modules PATTERN * as the roots. * * The jmod file is being created and does not exist in the
< prev index next >