private static List extractPackages()

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