From 9956b7bbe5d05d45c852904947cbaf751b1e3941 Mon Sep 17 00:00:00 2001 From: Jack Conradson Date: Thu, 30 Aug 2018 07:48:09 -0700 Subject: [PATCH] Painless: Fix Bindings Bug --- .../main/java/org/elasticsearch/painless/BindingTest.java | 4 ++-- .../painless/lookup/PainlessLookupBuilder.java | 2 +- .../org/elasticsearch/painless/spi/org.elasticsearch.txt | 2 +- .../test/java/org/elasticsearch/painless/BindingsTests.java | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/BindingTest.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/BindingTest.java index 1dcbce037b264..fc2a10891f623 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/BindingTest.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/BindingTest.java @@ -26,7 +26,7 @@ public BindingTest(int state0, int state1) { this.state = state0 + state1; } - public int testAddWithState(int stateless) { - return stateless + state; + public int testAddWithState(int istateless, double dstateless) { + return istateless + state + (int)dstateless; } } diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookupBuilder.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookupBuilder.java index 7adc816252059..a64814f866113 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookupBuilder.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookupBuilder.java @@ -908,7 +908,7 @@ public void addPainlessBinding(Class targetClass, String methodName, Class int methodTypeParametersSize = javaMethod.getParameterCount(); for (int typeParameterIndex = 0; typeParameterIndex < methodTypeParametersSize; ++typeParameterIndex) { - Class typeParameter = typeParameters.get(typeParameterIndex); + Class typeParameter = typeParameters.get(constructorTypeParametersSize + typeParameterIndex); if (isValidType(typeParameter) == false) { throw new IllegalArgumentException("type parameter [" + typeToCanonicalTypeName(typeParameter) + "] not found " + diff --git a/modules/lang-painless/src/main/resources/org/elasticsearch/painless/spi/org.elasticsearch.txt b/modules/lang-painless/src/main/resources/org/elasticsearch/painless/spi/org.elasticsearch.txt index 65f50bbc3834c..444234384c6d3 100644 --- a/modules/lang-painless/src/main/resources/org/elasticsearch/painless/spi/org.elasticsearch.txt +++ b/modules/lang-painless/src/main/resources/org/elasticsearch/painless/spi/org.elasticsearch.txt @@ -177,5 +177,5 @@ class org.elasticsearch.painless.FeatureTest no_import { # for testing static { - int testAddWithState(int, int, int) bound_to org.elasticsearch.painless.BindingTest + int testAddWithState(int, int, int, double) bound_to org.elasticsearch.painless.BindingTest } \ No newline at end of file diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/BindingsTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/BindingsTests.java index c6d4e1974c14b..4bcc557d3dcff 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/BindingsTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/BindingsTests.java @@ -28,11 +28,11 @@ public class BindingsTests extends ScriptTestCase { public void testBasicBinding() { - assertEquals(15, exec("testAddWithState(4, 5, 6)")); + assertEquals(15, exec("testAddWithState(4, 5, 6, 0.0)")); } public void testRepeatedBinding() { - String script = "testAddWithState(4, 5, params.test)"; + String script = "testAddWithState(4, 5, params.test, 0.0)"; Map params = new HashMap<>(); ExecutableScript.Factory factory = scriptEngine.compile(null, script, ExecutableScript.CONTEXT, Collections.emptyMap()); ExecutableScript executableScript = factory.newInstance(params); @@ -48,7 +48,7 @@ public void testRepeatedBinding() { } public void testBoundBinding() { - String script = "testAddWithState(4, params.bound, params.test)"; + String script = "testAddWithState(4, params.bound, params.test, 0.0)"; Map params = new HashMap<>(); ExecutableScript.Factory factory = scriptEngine.compile(null, script, ExecutableScript.CONTEXT, Collections.emptyMap()); ExecutableScript executableScript = factory.newInstance(params);