private Collection generateJavadoc()

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


    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;
    }