< prev index next >

src/jdk.jdeps/share/classes/com/sun/tools/jdeps/ModuleInfoBuilder.java

Print this page




 120                 Module normalModule = toNormalModule(m, apiDeps);
 121                 if (normalModule != null) {
 122                     automaticToNormalModule.put(m, normalModule);
 123 
 124                     // generate module-info.java
 125                     System.out.format("writing to %s%n", file);
 126                     writeModuleInfo(file,  normalModule.descriptor());
 127                 } else {
 128                     // find missing dependences
 129                     System.out.format("Missing dependence: %s not generated%n", file);
 130                     missingDeps = true;
 131                 }
 132             }
 133 
 134             return !missingDeps;
 135         } finally {
 136             dependencyFinder.shutdown();
 137         }
 138     }
 139 
 140     boolean notFound(Archive m) {
 141         return m == NOT_FOUND || m == REMOVED_JDK_INTERNALS;
 142     }
 143 
 144     private Module toNormalModule(Module module, Set<Archive> requiresTransitive)
 145         throws IOException
 146     {
 147         // done analysis
 148         module.close();
 149 
 150         if (analyzer.requires(module).anyMatch(this::notFound)) {
 151             // missing dependencies
 152             return null;
 153         }
 154 
 155         Map<String, Boolean> requires = new HashMap<>();
 156         requiresTransitive.stream()
 157             .map(Archive::getModule)
 158             .forEach(m -> requires.put(m.name(), Boolean.TRUE));
 159 
 160         analyzer.requires(module)
 161             .map(Archive::getModule)
 162             .forEach(d -> requires.putIfAbsent(d.name(), Boolean.FALSE));
 163 
 164         return module.toNormalModule(requires);
 165     }
 166 
 167     /**
 168      * Returns the stream of resulting modules
 169      */
 170     Stream<Module> modules() {
 171         return automaticToNormalModule.values().stream();
 172     }
 173 
 174     /**
 175      * Returns the stream of resulting ModuleDescriptors
 176      */
 177     public Stream<ModuleDescriptor> descriptors() {
 178         return automaticToNormalModule.entrySet().stream()
 179                     .map(Map.Entry::getValue)
 180                     .map(Module::descriptor);
 181     }
 182 
 183     void visitMissingDeps(Analyzer.Visitor visitor) {
 184         automaticModules().stream()
 185             .filter(m -> analyzer.requires(m).anyMatch(this::notFound))
 186             .forEach(m -> {
 187                 analyzer.visitDependences(m, visitor, Analyzer.Type.VERBOSE);
 188             });
 189     }
 190 
 191     void writeModuleInfo(Path file, ModuleDescriptor md) {
 192         try {
 193             Files.createDirectories(file.getParent());
 194             try (PrintWriter pw = new PrintWriter(Files.newOutputStream(file))) {
 195                 printModuleInfo(pw, md);
 196             }
 197         } catch (IOException e) {
 198             throw new UncheckedIOException(e);
 199         }
 200     }
 201 
 202     private void printModuleInfo(PrintWriter writer, ModuleDescriptor md) {
 203         writer.format("%smodule %s {%n", open ? "open " : "", md.name());
 204 
 205         Map<String, Module> modules = configuration.getModules();
 206 
 207         // first print requires




 120                 Module normalModule = toNormalModule(m, apiDeps);
 121                 if (normalModule != null) {
 122                     automaticToNormalModule.put(m, normalModule);
 123 
 124                     // generate module-info.java
 125                     System.out.format("writing to %s%n", file);
 126                     writeModuleInfo(file,  normalModule.descriptor());
 127                 } else {
 128                     // find missing dependences
 129                     System.out.format("Missing dependence: %s not generated%n", file);
 130                     missingDeps = true;
 131                 }
 132             }
 133 
 134             return !missingDeps;
 135         } finally {
 136             dependencyFinder.shutdown();
 137         }
 138     }
 139 




 140     private Module toNormalModule(Module module, Set<Archive> requiresTransitive)
 141         throws IOException
 142     {
 143         // done analysis
 144         module.close();
 145 
 146         if (analyzer.requires(module).anyMatch(Analyzer::notFound)) {
 147             // missing dependencies
 148             return null;
 149         }
 150 
 151         Map<String, Boolean> requires = new HashMap<>();
 152         requiresTransitive.stream()
 153             .map(Archive::getModule)
 154             .forEach(m -> requires.put(m.name(), Boolean.TRUE));
 155 
 156         analyzer.requires(module)
 157             .map(Archive::getModule)
 158             .forEach(d -> requires.putIfAbsent(d.name(), Boolean.FALSE));
 159 
 160         return module.toNormalModule(requires);
 161     }
 162 
 163     /**
 164      * Returns the stream of resulting modules
 165      */
 166     Stream<Module> modules() {
 167         return automaticToNormalModule.values().stream();
 168     }
 169 
 170     /**
 171      * Returns the stream of resulting ModuleDescriptors
 172      */
 173     public Stream<ModuleDescriptor> descriptors() {
 174         return automaticToNormalModule.entrySet().stream()
 175                     .map(Map.Entry::getValue)
 176                     .map(Module::descriptor);
 177     }
 178 
 179     void visitMissingDeps(Analyzer.Visitor visitor) {
 180         automaticModules().stream()
 181             .filter(m -> analyzer.requires(m).anyMatch(Analyzer::notFound))
 182             .forEach(m -> {
 183                 analyzer.visitDependences(m, visitor, Analyzer.Type.VERBOSE, Analyzer::notFound);
 184             });
 185     }
 186 
 187     void writeModuleInfo(Path file, ModuleDescriptor md) {
 188         try {
 189             Files.createDirectories(file.getParent());
 190             try (PrintWriter pw = new PrintWriter(Files.newOutputStream(file))) {
 191                 printModuleInfo(pw, md);
 192             }
 193         } catch (IOException e) {
 194             throw new UncheckedIOException(e);
 195         }
 196     }
 197 
 198     private void printModuleInfo(PrintWriter writer, ModuleDescriptor md) {
 199         writer.format("%smodule %s {%n", open ? "open " : "", md.name());
 200 
 201         Map<String, Module> modules = configuration.getModules();
 202 
 203         // first print requires


< prev index next >