diff --git a/core/src/main/java/org/elasticsearch/plugins/ScriptPlugin.java b/core/src/main/java/org/elasticsearch/plugins/ScriptPlugin.java index c74344578d606..88af291983af8 100644 --- a/core/src/main/java/org/elasticsearch/plugins/ScriptPlugin.java +++ b/core/src/main/java/org/elasticsearch/plugins/ScriptPlugin.java @@ -18,8 +18,10 @@ */ package org.elasticsearch.plugins; +import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.ScriptContext; @@ -31,9 +33,11 @@ public interface ScriptPlugin { /** - * Returns a {@link ScriptEngine} instance or null if this plugin doesn't add a new script engine + * Returns a {@link ScriptEngine} instance or null if this plugin doesn't add a new script engine. + * @param settings Node settings + * @param contexts The contexts that {@link ScriptEngine#compile(String, String, ScriptContext, Map)} may be called with */ - default ScriptEngine getScriptEngine(Settings settings) { + default ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return null; } diff --git a/core/src/main/java/org/elasticsearch/script/ScriptModule.java b/core/src/main/java/org/elasticsearch/script/ScriptModule.java index ecf3dc5ded935..cc098c14359a5 100644 --- a/core/src/main/java/org/elasticsearch/script/ScriptModule.java +++ b/core/src/main/java/org/elasticsearch/script/ScriptModule.java @@ -61,7 +61,9 @@ public ScriptModule(Settings settings, List scriptPlugins) { throw new IllegalArgumentException("Context name [" + context.name + "] defined twice"); } } - ScriptEngine engine = plugin.getScriptEngine(settings); + } + for (ScriptPlugin plugin : scriptPlugins) { + ScriptEngine engine = plugin.getScriptEngine(settings, contexts.values()); if (engine != null) { ScriptEngine existing = engines.put(engine.getType(), engine); if (existing != null) { diff --git a/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java b/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java index a5a7e587c7418..5dde216eabb71 100644 --- a/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java +++ b/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java @@ -70,7 +70,7 @@ public class ExplainableScriptIT extends ESIntegTestCase { public static class ExplainableScriptPlugin extends Plugin implements ScriptPlugin { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new ScriptEngine() { @Override public String getType() { diff --git a/core/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java b/core/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java index 3747fef68255e..51a652e4ce0b6 100644 --- a/core/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java +++ b/core/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java @@ -1009,7 +1009,7 @@ protected Collection> nodePlugins() { public static class DummyTemplatePlugin extends Plugin implements ScriptPlugin { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new DummyTemplateScriptEngine(); } } diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionPlugin.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionPlugin.java index 071e5cf666d0c..fd80c56cdbe8a 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionPlugin.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionPlugin.java @@ -19,15 +19,18 @@ package org.elasticsearch.script.expression; +import java.util.Collection; + import org.elasticsearch.common.settings.Settings; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.ScriptPlugin; +import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; public class ExpressionPlugin extends Plugin implements ScriptPlugin { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new ExpressionScriptEngine(settings); } } diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java index 105fa3f6f803b..c05a88e9351db 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java @@ -33,16 +33,18 @@ import org.elasticsearch.plugins.SearchPlugin; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; +import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.function.Supplier; public class MustachePlugin extends Plugin implements ScriptPlugin, ActionPlugin, SearchPlugin { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection>contexts) { return new MustacheScriptEngine(); } diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java index 62ea89acb06e2..0007b92314202 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java @@ -24,9 +24,11 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.ScriptPlugin; +import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import java.util.Arrays; +import java.util.Collection; import java.util.List; /** @@ -40,7 +42,7 @@ public final class PainlessPlugin extends Plugin implements ScriptPlugin { } @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new PainlessScriptEngine(settings); } diff --git a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java index 756dba6b688c4..ccb8d37dd5ad1 100644 --- a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java +++ b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.UncheckedIOException; +import java.util.Collection; import java.util.Map; import java.util.function.Function; @@ -45,7 +46,7 @@ public class ExpertScriptPlugin extends Plugin implements ScriptPlugin { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new MyExpertScriptEngine(); } diff --git a/test/framework/src/main/java/org/elasticsearch/script/MockScriptPlugin.java b/test/framework/src/main/java/org/elasticsearch/script/MockScriptPlugin.java index ff022e1d73173..cd951a3b53f5c 100644 --- a/test/framework/src/main/java/org/elasticsearch/script/MockScriptPlugin.java +++ b/test/framework/src/main/java/org/elasticsearch/script/MockScriptPlugin.java @@ -23,6 +23,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.ScriptPlugin; +import java.util.Collection; import java.util.Map; import java.util.function.Function; @@ -34,7 +35,7 @@ public abstract class MockScriptPlugin extends Plugin implements ScriptPlugin { public static final String NAME = MockScriptEngine.NAME; @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new MockScriptEngine(pluginScriptLang(), pluginScripts()); } diff --git a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java index f7f641c6a292c..256227779aa0e 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java @@ -94,6 +94,7 @@ import org.elasticsearch.plugins.ScriptPlugin; import org.elasticsearch.script.MockScriptEngine; import org.elasticsearch.script.Script; +import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; @@ -1195,7 +1196,7 @@ public static TestAnalysis createTestAnalysis(IndexSettings indexSettings, Setti public static ScriptModule newTestScriptModule() { return new ScriptModule(Settings.EMPTY, singletonList(new ScriptPlugin() { @Override - public ScriptEngine getScriptEngine(Settings settings) { + public ScriptEngine getScriptEngine(Settings settings, Collection> contexts) { return new MockScriptEngine(MockScriptEngine.NAME, Collections.singletonMap("1", script -> "1")); } }));