in src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java [231:270]
private static List<PackageInfo> extractPackages(
final Manifest m, final String headerName, final String defaultVersion, final boolean checkOptional) {
final String pckInfo = m.getMainAttributes().getValue(headerName);
if (pckInfo != null) {
final Clause[] clauses = Parser.parseHeader(pckInfo);
final List<PackageInfo> pcks = new ArrayList<>();
for (final Clause entry : clauses) {
Object versionObj = entry.getAttribute("version");
final String version;
if (versionObj == null) {
version = defaultVersion;
} else {
version = versionObj.toString();
}
boolean optional = false;
if (checkOptional) {
final String resolution = entry.getDirective("resolution");
optional = "optional".equalsIgnoreCase(resolution);
}
Set<String> uses = new HashSet<>();
String usesAttribute = entry.getDirective("uses");
if (usesAttribute != null && !usesAttribute.isEmpty()) {
StringTokenizer tokenizer = new StringTokenizer(usesAttribute, ",");
while (tokenizer.hasMoreTokens()) {
String usePackage = tokenizer.nextToken();
uses.add(usePackage);
}
}
final PackageInfo pck = new PackageInfo(entry.getName(), version, optional, uses);
pcks.add(pck);
}
return pcks;
}
return Collections.emptyList();
}