private Collection generateJavadoc()

in src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java [1745:1891]


    private Collection<ArtifactInfo> generateJavadoc(final ApisJarContext ctx,
            final String regionName,
            final JavadocLinks links,
            final File javadocDir,
            final RegionSupport regionSupport,
            final boolean useDependencies)
    throws MojoExecutionException {
        javadocDir.mkdirs();

        final Collection<ArtifactInfo> usedInfos = new ArrayList<>();

        final List<String> sourceDirectories = new ArrayList<>();
        final Set<String> javadocPackages = new HashSet<>();
        for(final ArtifactInfo info : ctx.getArtifactInfos(regionName, useDependencies)) {
            boolean addDirectory = false;
            for(final Clause clause : info.getUsedExportedPackages(regionName)) {
                if ( !ctx.getPackagesWithoutSources().contains(clause.getName()) && !links.getLinkedPackages().contains(clause.getName())) {
                    addDirectory = true;
                    javadocPackages.add(clause.getName());
                }
            }
            if ( addDirectory && info.getSourceDirectory() != null ) {
                usedInfos.add(info);
                sourceDirectories.add(info.getSourceDirectory().getAbsolutePath());
            }
        }

        if (javadocPackages.isEmpty()) {
            return Collections.emptyList();
        }

        // handle additional packages
        if ( !useDependencies) {
            for(final Artifact artifact : ApisUtil.getAdditionalJavadocArtifacts(ctx, regionName) ) {
                final boolean infoExists = ctx.getArtifactInfo(artifact.getId()) != null;
                final ArtifactInfo info = infoExists ?  ctx.getArtifactInfo(artifact.getId()) : ctx.addArtifactInfo(artifact);

                final Set<Clause> exportedPackages = regionSupport.getAllPublicPackages(ctx, artifact, getArtifactFile(artifact.getId()));
                final Iterator<Clause> iter = exportedPackages.iterator();
                final Set<String> exportedPackageNames = new LinkedHashSet<>();
                while ( iter.hasNext() ) {
                    final Clause c = iter.next();
                    if ( javadocPackages.contains(c.getName()) ) {
                        iter.remove();
                    } else {
                        javadocPackages.add(c.getName());
                        exportedPackageNames.add(c.getName());
                    }
                }

                if ( !exportedPackages.isEmpty() ) {
                    info.setUsedExportedPackages(regionName, exportedPackages, "");
                    if ( !infoExists ) {
                        info.setUsedExportedPackages(exportedPackageNames);
                        info.setSourceDirectory(new File(ctx.getDeflatedSourcesDir(), info.getId().toMvnName()));
                    }

                    usedInfos.add(info);
                    sourceDirectories.add(info.getSourceDirectory().getAbsolutePath());
                }
            }
        } else {
            final Collection<ArtifactInfo> infos = ctx.getArtifactInfos(regionName, true);
            for(final ArtifactInfo i : ctx.getArtifactInfos(regionName, false)) {
                if ( !infos.contains(i) ) {
                    boolean addDirectory = false;
                    for(final Clause clause : i.getUsedExportedPackages(regionName)) {
                        if ( !ctx.getPackagesWithoutSources().contains(clause.getName()) && !links.getLinkedPackages().contains(clause.getName())) {
                            addDirectory = true;
                        }
                    }
                    if ( addDirectory && i.getSourceDirectory() != null ) {
                        sourceDirectories.add(i.getSourceDirectory().getAbsolutePath());
                    }
                }
            }
        }

        final JavadocExecutor javadocExecutor = new JavadocExecutor(javadocDir.getParentFile())
                                          .addArgument("-public")
                                          .addArgument("-encoding", false)
                                          .addArgument("UTF-8")
                                          .addArgument("-charset", false)
                                          .addArgument("UTF-8")
                                          .addArgument("-docencoding", false)
                                          .addArgument("UTF-8")
                                          .addArgument("-d", false)
                                          .addArgument(javadocDir.getAbsolutePath())
                                          .addArgument("-sourcepath", false)
                                          .addArgument(String.join(File.pathSeparator, sourceDirectories));

        javadocExecutor.addArgument("-source", false)
                       .addArgument(ctx.getConfig().getJavadocSourceLevel());

        final String versionSuffix = ctx.getConfig().getApiVersion() != null ? ctx.getConfig().getApiVersion() : ctx.getFeatureId().getVersion();

        if (!StringUtils.isBlank(project.getName())) {
            javadocExecutor.addArgument("-doctitle", false)
                           .addQuotedArgument(project.getName().trim().concat(" ").concat(versionSuffix));
        }

        if (!StringUtils.isBlank(project.getDescription())) {
            javadocExecutor.addArgument("-windowtitle", false)
                           .addQuotedArgument(project.getDescription().trim().concat(" ").concat(versionSuffix));
        }

        if (!StringUtils.isBlank(project.getInceptionYear())
                && project.getOrganization() != null
                && !StringUtils.isBlank(project.getOrganization().getName())) {
            javadocExecutor.addArgument("-bottom", false)
                           .addQuotedArgument(String.format("Copyright &copy; %s - %s %s. All Rights Reserved",
                                              project.getInceptionYear().trim(),
                                              Calendar.getInstance().get(Calendar.YEAR),
                                              project.getOrganization().getName().trim()));
        }

        if ( !links.getJavadocLinks().isEmpty()) {
            javadocExecutor.addArguments("-link", links.getJavadocLinks());
        }

        // classpath
        final Collection<String> classpath = ApisUtil.getJavadocClassPath(getLog(), repositorySystem, mavenSession,
                ctx, regionName);
        if (!classpath.isEmpty()) {
            javadocExecutor.addArgument("-classpath", false)
                           .addArgument(classpath, File.pathSeparator);
        }

        // turn off doclint
        javadocExecutor.addArgument("-Xdoclint:none");

        javadocExecutor.addArgument("--allow-script-in-comments");

        if ( !this.javadocIndex ) {
            javadocExecutor.addArgument("-noindex");
        }
        if ( !this.javadocTree ) {
            javadocExecutor.addArgument("-notree");
        }

        // list packages
        javadocExecutor.addArguments(javadocPackages);

        javadocExecutor.execute(javadocDir, getLog(), this.ignoreJavadocErrors);

        return usedInfos;
    }