in fractions/swagger/src/main/java/org/wildfly/swarm/swagger/runtime/SwaggerArchivePreparer.java [208:283]
private Set<String> getPackagesForScanning(WARArchive deployment) {
final Set<String> packages = new TreeSet<>();
if (indexView != null) {
DotName dotName = DotName.createSimple(Api.class.getName());
Collection<AnnotationInstance> instances = indexView.getAnnotations(dotName);
instances.forEach(ai -> {
AnnotationTarget target = ai.target();
if (target.kind() == AnnotationTarget.Kind.CLASS) {
extractAndAddPackageInfo(target.asClass(), packages, indexView);
}
});
// Scan for all top level resources.
dotName = DotName.createSimple(Path.class.getName());
instances = indexView.getAnnotations(dotName);
instances.forEach(ai -> {
AnnotationTarget target = ai.target();
switch (target.kind()) {
case CLASS:
extractAndAddPackageInfo(target.asClass(), packages, indexView);
break;
case METHOD:
extractAndAddPackageInfo(target.asMethod().declaringClass(), packages, indexView);
break;
default:
// Do nothing. Probably log something here?
}
});
// Reduce the packages to just about what is required.
Set<String> tmp = new HashSet<>(packages);
Iterator<String> itr = packages.iterator();
while (itr.hasNext()) {
String current = itr.next();
boolean remove = false;
if (current.startsWith("org.wildfly.swarm")) {
remove = true;
} else {
// Search through the list to see if a parent package has already been included in the list.
for (String s : tmp) {
if (s.length() < current.length() && current.startsWith(s)) {
remove = true;
break;
}
}
}
if (remove) {
itr.remove();
}
}
} else {
//
// Existing default behavior.
//
String packageName = null;
for (Map.Entry<ArchivePath, Node> entry : deployment.getContent().entrySet()) {
final ArchivePath key = entry.getKey();
if (key.get().endsWith(".class")) {
String parentPath = key.getParent().get();
parentPath = parentPath.replaceFirst("/", "");
String parentPackage = parentPath.replaceFirst(".*/classes/", "");
parentPackage = parentPackage.replaceAll("/", ".");
if (parentPackage.startsWith("org.wildfly.swarm")) {
SwaggerMessages.MESSAGES.ignoringPackage(parentPackage);
} else {
packageName = parentPackage;
break;
}
}
}
packages.add(packageName);
}
return packages;
}