--- old/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java 2016-10-04 19:46:55.000000000 -0700 +++ new/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java 2016-10-04 19:46:55.000000000 -0700 @@ -483,6 +483,7 @@ } if (options.checkModuleDeps != null && !inputArgs.isEmpty()) { reportError("err.invalid.module.option", inputArgs, "--check"); + return EXIT_CMDERR; } boolean ok = run(); @@ -676,17 +677,29 @@ } private boolean genModuleInfo(JdepsConfiguration config) throws IOException { + // check if any JAR file contains unnamed package + for (String arg : inputArgs) { + Optional classInUnnamedPackage = + ClassFileReader.newInstance(Paths.get(arg)) + .entries().stream() + .filter(n -> n.endsWith(".class")) + .filter(cn -> toPackageName(cn).isEmpty()) + .findFirst(); + + if (classInUnnamedPackage.isPresent()) { + if (classInUnnamedPackage.get().equals("module-info.class")) { + reportError("err.genmoduleinfo.not.jarfile", arg); + } else { + reportError("err.genmoduleinfo.unnamed.package", arg); + } + return false; + } + } + ModuleInfoBuilder builder = new ModuleInfoBuilder(config, inputArgs, options.genModuleInfo); boolean ok = builder.run(); - builder.modules().forEach(module -> { - if (module.packages().contains("")) { - reportError("ERROR: %s contains unnamed package. " + - "module-info.java not generated%n", module.getPathName()); - } - }); - if (!ok && !options.nowarning) { log.println("ERROR: missing dependencies"); builder.visitMissingDeps( @@ -703,6 +716,11 @@ return ok; } + private String toPackageName(String name) { + int i = name.lastIndexOf('/'); + return i > 0 ? name.replace('/', '.').substring(0, i) : ""; + } + /** * Returns a filter used during dependency analysis */