585 } |
585 } |
586 return result; |
586 return result; |
587 } |
587 } |
588 |
588 |
589 private Set<PackageElement> computeModulePackages() throws ToolException { |
589 private Set<PackageElement> computeModulePackages() throws ToolException { |
590 final AccessKind accessValue = accessFilter.getAccessValue(ElementKind.PACKAGE); |
590 AccessKind accessValue = accessFilter.getAccessValue(ElementKind.PACKAGE); |
591 final boolean documentAllModulePackages = (accessValue == AccessKind.PACKAGE || |
591 final boolean documentAllModulePackages = (accessValue == AccessKind.PACKAGE || |
592 accessValue == AccessKind.PRIVATE); |
592 accessValue == AccessKind.PRIVATE); |
593 |
593 |
|
594 accessValue = accessFilter.getAccessValue(ElementKind.MODULE); |
|
595 final boolean moduleDetailedMode = (accessValue == AccessKind.PACKAGE || |
|
596 accessValue == AccessKind.PRIVATE); |
594 Set<PackageElement> expandedModulePackages = new LinkedHashSet<>(); |
597 Set<PackageElement> expandedModulePackages = new LinkedHashSet<>(); |
595 |
598 |
596 for (ModuleElement mdle : specifiedModuleElements) { |
599 for (ModuleElement mdle : specifiedModuleElements) { |
597 // add all exported packages belonging to a specified module |
600 if (documentAllModulePackages) { // include all packages |
598 if (specifiedModuleElements.contains(mdle)) { |
601 List<PackageElement> packages = ElementFilter.packagesIn(mdle.getEnclosedElements()); |
|
602 expandedModulePackages.addAll(packages); |
|
603 expandedModulePackages.addAll(getAllModulePackages(mdle)); |
|
604 } else { // selectively include required packages |
599 List<ExportsDirective> exports = ElementFilter.exportsIn(mdle.getDirectives()); |
605 List<ExportsDirective> exports = ElementFilter.exportsIn(mdle.getDirectives()); |
600 for (ExportsDirective export : exports) { |
606 for (ExportsDirective export : exports) { |
601 expandedModulePackages.add(export.getPackage()); |
607 // add if fully exported or add qualified exports only if desired |
|
608 if (export.getTargetModules() == null |
|
609 || documentAllModulePackages || moduleDetailedMode) { |
|
610 expandedModulePackages.add(export.getPackage()); |
|
611 } |
602 } |
612 } |
603 } |
613 } |
604 |
614 |
605 // add all packages specified on the command line |
615 // add all packages specified on the command line |
606 // belonging to this module |
616 // belonging to this module |
610 modpkg.packageName); |
620 modpkg.packageName); |
611 if (pkg != null) { |
621 if (pkg != null) { |
612 expandedModulePackages.add(pkg); |
622 expandedModulePackages.add(pkg); |
613 } |
623 } |
614 } |
624 } |
615 } |
|
616 |
|
617 if (!documentAllModulePackages) { |
|
618 List<ExportsDirective> exports = ElementFilter.exportsIn(mdle.getDirectives()); |
|
619 // check exported packages |
|
620 for (ExportsDirective export : exports) { |
|
621 List<? extends ModuleElement> targetModules = export.getTargetModules(); |
|
622 if (targetModules == null) { // no qualified exports, add 'em all |
|
623 expandedModulePackages.add(export.getPackage()); |
|
624 } else { // qualified export, add only if target module is being considered |
|
625 for (ModuleElement target : targetModules) { |
|
626 if (specifiedModuleElements.contains(target)) { |
|
627 expandedModulePackages.add(export.getPackage()); |
|
628 } |
|
629 } |
|
630 } |
|
631 } |
|
632 } else { // add all exported and module private packages |
|
633 List<PackageElement> packages = ElementFilter.packagesIn(mdle.getEnclosedElements()); |
|
634 expandedModulePackages.addAll(packages); |
|
635 expandedModulePackages.addAll(getAllModulePackages(mdle)); |
|
636 } |
625 } |
637 } |
626 } |
638 return expandedModulePackages; |
627 return expandedModulePackages; |
639 } |
628 } |
640 |
629 |
666 specifiedTypeElements.forEach((klass) -> { |
655 specifiedTypeElements.forEach((klass) -> { |
667 ModuleElement mdle = toolEnv.elements.getModuleOf(klass); |
656 ModuleElement mdle = toolEnv.elements.getModuleOf(klass); |
668 if (!mdle.isUnnamed()) |
657 if (!mdle.isUnnamed()) |
669 imodules.add(mdle); |
658 imodules.add(mdle); |
670 PackageElement pkg = toolEnv.elements.getPackageOf(klass); |
659 PackageElement pkg = toolEnv.elements.getPackageOf(klass); |
671 if (!pkg.isUnnamed()) |
660 ipackages.add(pkg); |
672 ipackages.add(pkg); |
|
673 addAllClasses(iclasses, klass, true); |
661 addAllClasses(iclasses, klass, true); |
674 }); |
662 }); |
675 |
663 |
676 // all done, freeze the collections |
664 // all done, freeze the collections |
677 includedModuleElements = Collections.unmodifiableSet(imodules); |
665 includedModuleElements = Collections.unmodifiableSet(imodules); |