in src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java [143:182]
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 = PropertiesUtil.toStringArray(factoryProperties.get("compatible.javax.script.name"), new String[0]);
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;
}