in src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java [654:745]
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 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");
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));
}
}
}