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