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