in src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java [143:189]
public Collection<BindingsValuesProvider> getBindingsValuesProviders(
ScriptEngineFactory scriptEngineFactory, String context) {
final List<BindingsValuesProvider> results = new ArrayList<>();
if (context == null) {
context = DEFAULT_CONTEXT;
}
final ContextBvpCollector bvpc = customizers.get(context);
if (bvpc == null) {
logger.debug("no BindingsValuesProviderCustomizer available for context '{}'", context);
return results;
}
results.addAll(bvpc.getGenericBindingsValuesProviders().values());
logger.debug(
"Generic BindingsValuesProviders added for engine {}: {}", scriptEngineFactory.getNames(), results);
// we load the compatible language ones first so that the most specific
// overrides these
final Map<String, Object> factoryProperties = scriptEngineManager.getServiceProperties(scriptEngineFactory);
if (factoryProperties != null) {
String[] compatibleLangs = Converters.standardConverter()
.convert(factoryProperties.get("compatible.javax.script.name"))
.to(String[].class);
for (final String name : compatibleLangs) {
final Map<ServiceReference<?>, BindingsValuesProvider> langProviders =
bvpc.getLangBindingsValuesProviders().get(name);
if (langProviders != null) {
results.addAll(langProviders.values());
}
}
logger.debug(
"Compatible BindingsValuesProviders added for engine {}: {}",
scriptEngineFactory.getNames(),
results);
}
for (final String name : scriptEngineFactory.getNames()) {
final Map<ServiceReference<?>, BindingsValuesProvider> langProviders =
bvpc.getLangBindingsValuesProviders().get(name);
if (langProviders != null) {
results.addAll(langProviders.values());
}
}
logger.debug("All BindingsValuesProviders added for engine {}: {}", scriptEngineFactory.getNames(), results);
return results;
}