private void report()

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


    private void report(
            final ApisJarContext ctx,
            final File jarFile,
            final ArtifactType artifactType,
            final RegionSupport regionSupport,
            final ApiRegion apiRegion,
            final boolean omitDependencyArtifacts,
            final List<String> report,
            final JavadocLinks links)
            throws MojoExecutionException {
        final Map.Entry<Set<String>, Set<String>> packageResult =
                ApisUtil.getPackages(ctx, jarFile, artifactType.getContentExtension());
        final Set<String> apiPackages = packageResult.getKey();
        final Set<String> otherPackages = packageResult.getValue();
        if (omitDependencyArtifacts) {
            for (final ArtifactInfo info : ctx.getArtifactInfos(apiRegion.getName(), false)) {
                if (info.isUseAsDependencyPerRegion(apiRegion.getName())) {
                    for (final Clause c : info.getUsedExportedPackages(apiRegion.getName())) {
                        apiPackages.add(c.getName());
                    }
                }
            }
        }
        // make sure no reports for packages not containing java classes
        otherPackages.addAll(ctx.getPackagesWithoutJavaClasses());
        // ignore packages without sources for javadoc?
        if (artifactType == ArtifactType.JAVADOC && !failOnMissingSourcesForJavadoc) {
            otherPackages.addAll(ctx.getPackagesWithoutSources());
        }
        // add packages found in links
        if (links != null) {
            apiPackages.addAll(links.getLinkedPackages());
        }
        final List<ApiExport> missing = new ArrayList<>();

        for (final ApiExport exp :
                regionSupport.getAllExports(apiRegion, ctx.getConfig().getEnabledToggles())) {
            final String packageName = exp.getName();
            if (!apiPackages.remove(packageName) && !otherPackages.remove(packageName)) {
                missing.add(exp);
            }
        }
        // correct remaining packages
        if (links != null) {
            apiPackages.removeAll(links.getLinkedPackages());
        }
        if (artifactType == ArtifactType.JAVADOC && !omitDependencyArtifacts) {
            otherPackages.removeAll(ctx.getPackagesWithoutSources());
            // handle additional artifacts
            for (final Artifact artifact : ApisUtil.getAdditionalJavadocArtifacts(ctx, apiRegion.getName())) {
                final ArtifactInfo info = ctx.getArtifactInfo(artifact.getId());
                if (info != null) {
                    for (final Clause clause : info.getUsedExportedPackages(apiRegion.getName())) {
                        if (!apiPackages.remove(clause.getName())) {
                            final ApiExport export = new ApiExport(clause.getName());
                            missing.add(export);
                        }
                    }
                }
            }
        }
        otherPackages.removeAll(ctx.getPackagesWithoutJavaClasses());

        apiPackages.addAll(otherPackages);
        if (artifactType == ArtifactType.JAVADOC) {
            // jquery and legal might be part of javadoc
            final Collection<String> jqueryPackages = Arrays.asList(
                    "jquery",
                    "jquery.external.jquery",
                    "jquery.images",
                    "jquery.jszip-utils.dist",
                    "jquery.jszip.dist",
                    "resources",
                    "legal");
            apiPackages.removeAll(jqueryPackages);
        }

        if (missing.isEmpty() && apiPackages.isEmpty()) {
            getLog().info("Verified " + artifactType.getId() + " jar for region " + apiRegion.getName());
        } else {
            Collections.sort(missing);
            report.add(artifactType
                    .getId()
                    .concat(" jar for region ")
                    .concat(apiRegion.getName())
                    .concat(" has ")
                    .concat(String.valueOf(missing.size() + apiPackages.size()))
                    .concat(" errors:"));
            for (final ApiExport exp : missing) {
                final List<String> candidates = new ArrayList<>();
                for (final ArtifactInfo info : ctx.getArtifactInfos()) {
                    for (final Clause clause : info.getUsedExportedPackages(apiRegion.getName())) {
                        if (exp.getName().equals(clause.getName())) {
                            candidates.add(info.getId().toMvnName());
                            break;
                        }
                    }
                }
                report.add("- Missing package "
                        .concat(exp.getName())
                        .concat(" from bundle(s) ")
                        .concat(String.join(",", candidates)));
            }
            for (final String m : apiPackages) {
                report.add("- Unwanted package ".concat(m));
            }
        }
    }