private void processRequiredResourceTypes()

in src/main/java/org/apache/sling/scriptingbundle/plugin/processor/FileProcessor.java [138:163]


    private void processRequiredResourceTypes(@NotNull Path requiresFile, @NotNull Set<RequiredResourceTypeCapability> requiredCapabilities,
                           List<String> requiredResourceTypes) {
        for (String requiredResourceType : requiredResourceTypes) {
            Parameters parameters = OSGiHeader.parseHeader(requiredResourceType);
            if (parameters.size() != 1) {
                throw new IllegalArgumentException(String.format("Each line in file '%s' must contain one clause only (not multiple ones separated by ',')",
                        requiresFile));
            }
            Entry<String, Attrs> requiresParameter = parameters.entrySet().iterator().next();
            for (String attributeName : requiresParameter.getValue().keySet()) {
                if (!REQUIRES_ALLOWED_ATTRIBUTE_NAMES.contains(attributeName)) {
                    throw new IllegalArgumentException(String.format("Found unsupported attribute/directive '%s' in file '%s'. Only the following attributes or directives may be used in the requires file: %s", attributeName,
                            requiresFile, String.join(",", REQUIRES_ALLOWED_ATTRIBUTE_NAMES)));
                }
            }
            String resourceType = FilenameUtils.normalize(requiresParameter.getKey(), true);
            boolean isOptional = aQute.bnd.osgi.Constants.OPTIONAL.equals(requiresParameter.getValue().get(aQute.bnd.osgi.Constants.RESOLUTION_DIRECTIVE));
            RequiredResourceTypeCapability.Builder requiredBuilder =
                    RequiredResourceTypeCapability.builder().withResourceType(resourceType);
            if (isOptional) {
                requiredBuilder.withIsOptional();
            }
            extractVersionRange(requiresFile, requiredBuilder, requiresParameter.getValue().getVersion());
            requiredCapabilities.add(requiredBuilder.build());
        }
    }