< prev index next >

src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java

Print this page




 498             for (String name : e.getValue()) {
 499                 if (ALL_UNNAMED.equals(name)) {
 500                     Modules.addReadsAllUnnamed(m);
 501                 } else {
 502                     om = bootLayer.findModule(name);
 503                     if (om.isPresent()) {
 504                         Modules.addReads(m, om.get());
 505                     } else {
 506                         warnUnknownModule(ADD_READS, name);
 507                     }
 508                 }
 509             }
 510         }
 511     }
 512 
 513     /**
 514      * Process the --add-exports and --add-opens options to export/open
 515      * additional packages specified on the command-line.
 516      */
 517     private static void addExtraExportsAndOpens(Layer bootLayer) {
 518         IllegalAccessLogger.Builder builder = new IllegalAccessLogger.Builder();
 519 
 520         // --add-exports
 521         String prefix = "jdk.module.addexports.";
 522         Map<String, List<String>> extraExports = decode(prefix);
 523         if (!extraExports.isEmpty()) {
 524             addExtraExportsOrOpens(bootLayer, extraExports, false, builder);
 525         }
 526 
 527         // --add-opens
 528         prefix = "jdk.module.addopens.";
 529         Map<String, List<String>> extraOpens = decode(prefix);
 530         if (!extraOpens.isEmpty()) {
 531             addExtraExportsOrOpens(bootLayer, extraOpens, true, builder);
 532         }
 533 
 534         // --permit-illegal-access
 535         if (getAndRemoveProperty("jdk.module.permitIllegalAccess") != null) {
 536             warn("--permit-illegal-access will be removed in the next major release");


 537             bootLayer.modules().stream().forEach(m -> {
 538                 m.getDescriptor()
 539                  .packages()
 540                  .stream()
 541                  .filter(pn -> !m.isOpen(pn))
 542                  .forEach(pn -> {
 543                      builder.logAccessToOpenPackage(m, pn, "--permit-illegal-access");
 544                      Modules.addOpensToAllUnnamed(m, pn);
 545                  });
 546             });
 547         }
 548 
 549         IllegalAccessLogger.setIllegalAccessLogger(builder.build());
 550     }

 551 
 552     private static void addExtraExportsOrOpens(Layer bootLayer,
 553                                                Map<String, List<String>> map,
 554                                                boolean opens,
 555                                                IllegalAccessLogger.Builder builder)
 556     {
 557         String option = opens ? ADD_OPENS : ADD_EXPORTS;
 558         for (Map.Entry<String, List<String>> e : map.entrySet()) {
 559 
 560             // the key is $MODULE/$PACKAGE
 561             String key = e.getKey();
 562             String[] s = key.split("/");
 563             if (s.length != 2)
 564                 fail(unableToParse(option, "<module>/<package>", key));
 565 
 566             String mn = s[0];
 567             String pn = s[1];
 568             if (mn.isEmpty() || pn.isEmpty())
 569                 fail(unableToParse(option, "<module>/<package>", key));
 570 
 571             // The exporting module is in the boot layer
 572             Module m;
 573             Optional<Module> om = bootLayer.findModule(mn);
 574             if (!om.isPresent()) {
 575                 warnUnknownModule(option, mn);


 583                 continue;
 584             }
 585 
 586             // the value is the set of modules to export to (by name)
 587             for (String name : e.getValue()) {
 588                 boolean allUnnamed = false;
 589                 Module other = null;
 590                 if (ALL_UNNAMED.equals(name)) {
 591                     allUnnamed = true;
 592                 } else {
 593                     om = bootLayer.findModule(name);
 594                     if (om.isPresent()) {
 595                         other = om.get();
 596                     } else {
 597                         warnUnknownModule(option, name);
 598                         continue;
 599                     }
 600                 }
 601                 if (allUnnamed) {
 602                     if (opens) {
 603                         builder.logAccessToOpenPackage(m, pn, option);
 604                         Modules.addOpensToAllUnnamed(m, pn);
 605                     } else {
 606                         builder.logAccessToExportedPackage(m, pn, option);
 607                         Modules.addExportsToAllUnnamed(m, pn);
 608                     }
 609                 } else {
 610                     if (opens) {
 611                         Modules.addOpens(m, pn, other);
 612                     } else {
 613                         Modules.addExports(m, pn, other);
 614                     }
 615                 }
 616 
 617             }
 618         }
 619     }
 620 
 621     /**
 622      * Decodes the values of --add-reads, -add-exports, --add-opens or
 623      * --patch-modules options that are encoded in system properties.
 624      *
 625      * @param prefix the system property prefix
 626      * @praam regex the regex for splitting the RHS of the option value




 498             for (String name : e.getValue()) {
 499                 if (ALL_UNNAMED.equals(name)) {
 500                     Modules.addReadsAllUnnamed(m);
 501                 } else {
 502                     om = bootLayer.findModule(name);
 503                     if (om.isPresent()) {
 504                         Modules.addReads(m, om.get());
 505                     } else {
 506                         warnUnknownModule(ADD_READS, name);
 507                     }
 508                 }
 509             }
 510         }
 511     }
 512 
 513     /**
 514      * Process the --add-exports and --add-opens options to export/open
 515      * additional packages specified on the command-line.
 516      */
 517     private static void addExtraExportsAndOpens(Layer bootLayer) {


 518         // --add-exports
 519         String prefix = "jdk.module.addexports.";
 520         Map<String, List<String>> extraExports = decode(prefix);
 521         if (!extraExports.isEmpty()) {
 522             addExtraExportsOrOpens(bootLayer, extraExports, false);
 523         }
 524 
 525         // --add-opens
 526         prefix = "jdk.module.addopens.";
 527         Map<String, List<String>> extraOpens = decode(prefix);
 528         if (!extraOpens.isEmpty()) {
 529             addExtraExportsOrOpens(bootLayer, extraOpens, true);
 530         }
 531 
 532         // --permit-illegal-access
 533         if (getAndRemoveProperty("jdk.module.permitIllegalAccess") != null) {
 534             warn("--permit-illegal-access will be removed in the next major release");
 535             IllegalAccessLogger.Builder builder = new IllegalAccessLogger.Builder();
 536             Module unnamed = BootLoader.getUnnamedModule();
 537             bootLayer.modules().stream().forEach(m -> {
 538                 m.getDescriptor()
 539                  .packages()
 540                  .stream()
 541                  .filter(pn -> !m.isOpen(pn, unnamed))  // skip if opened by --add-opens
 542                  .forEach(pn -> {
 543                      builder.logAccessToOpenPackage(m, pn, "--permit-illegal-access");
 544                      Modules.addOpensToAllUnnamed(m, pn);
 545                  });
 546             });


 547             IllegalAccessLogger.setIllegalAccessLogger(builder.build());
 548         }
 549     }
 550 
 551     private static void addExtraExportsOrOpens(Layer bootLayer,
 552                                                Map<String, List<String>> map,
 553                                                boolean opens)

 554     {
 555         String option = opens ? ADD_OPENS : ADD_EXPORTS;
 556         for (Map.Entry<String, List<String>> e : map.entrySet()) {
 557 
 558             // the key is $MODULE/$PACKAGE
 559             String key = e.getKey();
 560             String[] s = key.split("/");
 561             if (s.length != 2)
 562                 fail(unableToParse(option, "<module>/<package>", key));
 563 
 564             String mn = s[0];
 565             String pn = s[1];
 566             if (mn.isEmpty() || pn.isEmpty())
 567                 fail(unableToParse(option, "<module>/<package>", key));
 568 
 569             // The exporting module is in the boot layer
 570             Module m;
 571             Optional<Module> om = bootLayer.findModule(mn);
 572             if (!om.isPresent()) {
 573                 warnUnknownModule(option, mn);


 581                 continue;
 582             }
 583 
 584             // the value is the set of modules to export to (by name)
 585             for (String name : e.getValue()) {
 586                 boolean allUnnamed = false;
 587                 Module other = null;
 588                 if (ALL_UNNAMED.equals(name)) {
 589                     allUnnamed = true;
 590                 } else {
 591                     om = bootLayer.findModule(name);
 592                     if (om.isPresent()) {
 593                         other = om.get();
 594                     } else {
 595                         warnUnknownModule(option, name);
 596                         continue;
 597                     }
 598                 }
 599                 if (allUnnamed) {
 600                     if (opens) {

 601                         Modules.addOpensToAllUnnamed(m, pn);
 602                     } else {

 603                         Modules.addExportsToAllUnnamed(m, pn);
 604                     }
 605                 } else {
 606                     if (opens) {
 607                         Modules.addOpens(m, pn, other);
 608                     } else {
 609                         Modules.addExports(m, pn, other);
 610                     }
 611                 }
 612 
 613             }
 614         }
 615     }
 616 
 617     /**
 618      * Decodes the values of --add-reads, -add-exports, --add-opens or
 619      * --patch-modules options that are encoded in system properties.
 620      *
 621      * @param prefix the system property prefix
 622      * @praam regex the regex for splitting the RHS of the option value


< prev index next >