Skip to content

Commit 2a1a28f

Browse files
authored
Painless: Separate PainlessLookup into PainlessLookup and PainlessLookupBuilder (#32054)
1 parent b1479bb commit 2a1a28f

29 files changed

+847
-722
lines changed

modules/lang-painless/src/main/java/org/elasticsearch/painless/AnalyzerCaster.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.elasticsearch.painless.lookup.PainlessLookup;
2323
import org.elasticsearch.painless.lookup.PainlessCast;
24-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
24+
import org.elasticsearch.painless.lookup.def;
2525

2626
import java.util.Objects;
2727

modules/lang-painless/src/main/java/org/elasticsearch/painless/MethodWriter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless;
2121

2222
import org.elasticsearch.painless.lookup.PainlessCast;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.objectweb.asm.ClassVisitor;
2525
import org.objectweb.asm.Label;
2626
import org.objectweb.asm.Opcodes;

modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessScriptEngine.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.elasticsearch.common.component.AbstractComponent;
2525
import org.elasticsearch.common.settings.Settings;
2626
import org.elasticsearch.painless.Compiler.Loader;
27-
import org.elasticsearch.painless.lookup.PainlessLookup;
27+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2828
import org.elasticsearch.painless.spi.Whitelist;
2929
import org.elasticsearch.script.ExecutableScript;
3030
import org.elasticsearch.script.ScriptContext;
@@ -102,9 +102,11 @@ public PainlessScriptEngine(Settings settings, Map<ScriptContext<?>, List<Whitel
102102
for (Map.Entry<ScriptContext<?>, List<Whitelist>> entry : contexts.entrySet()) {
103103
ScriptContext<?> context = entry.getKey();
104104
if (context.instanceClazz.equals(SearchScript.class) || context.instanceClazz.equals(ExecutableScript.class)) {
105-
contextsToCompilers.put(context, new Compiler(GenericElasticsearchScript.class, new PainlessLookup(entry.getValue())));
105+
contextsToCompilers.put(context, new Compiler(GenericElasticsearchScript.class,
106+
new PainlessLookupBuilder(entry.getValue()).build()));
106107
} else {
107-
contextsToCompilers.put(context, new Compiler(context.instanceClazz, new PainlessLookup(entry.getValue())));
108+
contextsToCompilers.put(context, new Compiler(context.instanceClazz,
109+
new PainlessLookupBuilder(entry.getValue()).build()));
108110
}
109111
}
110112

modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookup.java

+3-689
Large diffs are not rendered by default.

modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookupBuilder.java

+774
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.elasticsearch.painless.lookup;
21+
22+
/** Marker class for def type to be used during type analysis. */
23+
public final class def {
24+
25+
private def() {
26+
27+
}
28+
}

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EAssignment.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.elasticsearch.painless.AnalyzerCaster;
2424
import org.elasticsearch.painless.DefBootstrap;
2525
import org.elasticsearch.painless.lookup.PainlessCast;
26-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
26+
import org.elasticsearch.painless.lookup.def;
2727
import org.elasticsearch.painless.Globals;
2828
import org.elasticsearch.painless.Locals;
2929
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EBinary.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.painless.AnalyzerCaster;
2323
import org.elasticsearch.painless.DefBootstrap;
2424
import org.elasticsearch.painless.lookup.PainlessLookup;
25-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
25+
import org.elasticsearch.painless.lookup.def;
2626
import org.elasticsearch.painless.Globals;
2727
import org.elasticsearch.painless.Locals;
2828
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/ECapturingFunctionRef.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.painless.AnalyzerCaster;
2323
import org.elasticsearch.painless.DefBootstrap;
2424
import org.elasticsearch.painless.lookup.PainlessLookup;
25-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
25+
import org.elasticsearch.painless.lookup.def;
2626
import org.elasticsearch.painless.FunctionRef;
2727
import org.elasticsearch.painless.Globals;
2828
import org.elasticsearch.painless.Locals;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EComp.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.painless.AnalyzerCaster;
2323
import org.elasticsearch.painless.DefBootstrap;
2424
import org.elasticsearch.painless.lookup.PainlessLookup;
25-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
25+
import org.elasticsearch.painless.lookup.def;
2626
import org.elasticsearch.painless.Globals;
2727
import org.elasticsearch.painless.Locals;
2828
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/ELambda.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.painless.AnalyzerCaster;
2323
import org.elasticsearch.painless.lookup.PainlessLookup;
2424
import org.elasticsearch.painless.lookup.PainlessMethod;
25-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
25+
import org.elasticsearch.painless.lookup.def;
2626
import org.elasticsearch.painless.FunctionRef;
2727
import org.elasticsearch.painless.Globals;
2828
import org.elasticsearch.painless.Locals;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EListInit.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.elasticsearch.painless.lookup.PainlessMethod;
2323
import org.elasticsearch.painless.lookup.PainlessMethodKey;
24-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
24+
import org.elasticsearch.painless.lookup.def;
2525
import org.elasticsearch.painless.Globals;
2626
import org.elasticsearch.painless.Locals;
2727
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EMapInit.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.elasticsearch.painless.lookup.PainlessMethod;
2323
import org.elasticsearch.painless.lookup.PainlessMethodKey;
24-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
24+
import org.elasticsearch.painless.lookup.def;
2525
import org.elasticsearch.painless.Globals;
2626
import org.elasticsearch.painless.Locals;
2727
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/EUnary.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.painless.AnalyzerCaster;
2323
import org.elasticsearch.painless.DefBootstrap;
2424
import org.elasticsearch.painless.lookup.PainlessLookup;
25-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
25+
import org.elasticsearch.painless.lookup.def;
2626
import org.elasticsearch.painless.Globals;
2727
import org.elasticsearch.painless.Locals;
2828
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PBrace.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless.node;
2121

2222
import org.elasticsearch.painless.lookup.PainlessLookup;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.elasticsearch.painless.Globals;
2525
import org.elasticsearch.painless.Locals;
2626
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PCallInvoke.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.elasticsearch.painless.lookup.PainlessMethod;
2424
import org.elasticsearch.painless.lookup.PainlessMethodKey;
2525
import org.elasticsearch.painless.lookup.PainlessClass;
26-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
26+
import org.elasticsearch.painless.lookup.def;
2727
import org.elasticsearch.painless.Globals;
2828
import org.elasticsearch.painless.Locals;
2929
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PField.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.elasticsearch.painless.lookup.PainlessField;
2424
import org.elasticsearch.painless.lookup.PainlessMethod;
2525
import org.elasticsearch.painless.lookup.PainlessClass;
26-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
26+
import org.elasticsearch.painless.lookup.def;
2727
import org.elasticsearch.painless.Globals;
2828
import org.elasticsearch.painless.Locals;
2929
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PSubDefArray.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless.node;
2121

2222
import org.elasticsearch.painless.DefBootstrap;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.elasticsearch.painless.Globals;
2525
import org.elasticsearch.painless.Locals;
2626
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PSubDefCall.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless.node;
2121

2222
import org.elasticsearch.painless.DefBootstrap;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.elasticsearch.painless.Globals;
2525
import org.elasticsearch.painless.Locals;
2626
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/PSubDefField.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless.node;
2121

2222
import org.elasticsearch.painless.DefBootstrap;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.elasticsearch.painless.Globals;
2525
import org.elasticsearch.painless.Locals;
2626
import org.elasticsearch.painless.Location;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/SEach.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.elasticsearch.painless.node;
2121

2222
import org.elasticsearch.painless.lookup.PainlessLookup;
23-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
23+
import org.elasticsearch.painless.lookup.def;
2424
import org.elasticsearch.painless.Globals;
2525
import org.elasticsearch.painless.Locals;
2626
import org.elasticsearch.painless.Locals.Variable;

modules/lang-painless/src/main/java/org/elasticsearch/painless/node/SSubEachIterable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.elasticsearch.painless.lookup.PainlessCast;
2626
import org.elasticsearch.painless.lookup.PainlessMethod;
2727
import org.elasticsearch.painless.lookup.PainlessMethodKey;
28-
import org.elasticsearch.painless.lookup.PainlessLookup.def;
28+
import org.elasticsearch.painless.lookup.def;
2929
import org.elasticsearch.painless.Globals;
3030
import org.elasticsearch.painless.Locals;
3131
import org.elasticsearch.painless.Locals.Variable;

modules/lang-painless/src/test/java/org/elasticsearch/painless/BaseClassTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Map;
2525

2626
import org.elasticsearch.painless.lookup.PainlessLookup;
27+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2728
import org.elasticsearch.painless.spi.Whitelist;
2829

2930
import static java.util.Collections.emptyMap;
@@ -37,7 +38,7 @@
3738
*/
3839
public class BaseClassTests extends ScriptTestCase {
3940

40-
private final PainlessLookup painlessLookup = new PainlessLookup(Whitelist.BASE_WHITELISTS);
41+
private final PainlessLookup painlessLookup = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
4142

4243
public abstract static class Gets {
4344

modules/lang-painless/src/test/java/org/elasticsearch/painless/DebugTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.elasticsearch.common.io.stream.BytesStreamOutput;
2424
import org.elasticsearch.common.io.stream.StreamInput;
2525
import org.elasticsearch.painless.lookup.PainlessLookup;
26+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2627
import org.elasticsearch.painless.spi.Whitelist;
2728
import org.elasticsearch.script.ScriptException;
2829

@@ -36,7 +37,7 @@
3637
import static org.hamcrest.Matchers.not;
3738

3839
public class DebugTests extends ScriptTestCase {
39-
private final PainlessLookup painlessLookup = new PainlessLookup(Whitelist.BASE_WHITELISTS);
40+
private final PainlessLookup painlessLookup = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
4041

4142
public void testExplain() {
4243
// Debug.explain can explain an object

modules/lang-painless/src/test/java/org/elasticsearch/painless/Debugger.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
package org.elasticsearch.painless;
2121

22-
import org.elasticsearch.painless.lookup.PainlessLookup;
22+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2323
import org.elasticsearch.painless.spi.Whitelist;
2424
import org.objectweb.asm.util.Textifier;
2525

@@ -40,7 +40,7 @@ static String toString(Class<?> iface, String source, CompilerSettings settings)
4040
PrintWriter outputWriter = new PrintWriter(output);
4141
Textifier textifier = new Textifier();
4242
try {
43-
new Compiler(iface, new PainlessLookup(Whitelist.BASE_WHITELISTS))
43+
new Compiler(iface, new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build())
4444
.compile("<debugging>", source, settings, textifier);
4545
} catch (RuntimeException e) {
4646
textifier.print(outputWriter);

modules/lang-painless/src/test/java/org/elasticsearch/painless/DefBootstrapTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@
2828
import java.util.HashMap;
2929

3030
import org.elasticsearch.painless.lookup.PainlessLookup;
31+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
3132
import org.elasticsearch.painless.spi.Whitelist;
3233
import org.elasticsearch.test.ESTestCase;
3334

3435
public class DefBootstrapTests extends ESTestCase {
35-
private final PainlessLookup painlessLookup = new PainlessLookup(Whitelist.BASE_WHITELISTS);
36+
private final PainlessLookup painlessLookup = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
3637

3738
/** calls toString() on integers, twice */
3839
public void testOneType() throws Throwable {

modules/lang-painless/src/test/java/org/elasticsearch/painless/PainlessDocGenerator.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@
2020
package org.elasticsearch.painless;
2121

2222
import org.apache.logging.log4j.Logger;
23-
import org.elasticsearch.core.internal.io.IOUtils;
2423
import org.elasticsearch.common.io.PathUtils;
2524
import org.elasticsearch.common.logging.ESLoggerFactory;
26-
import org.elasticsearch.painless.lookup.PainlessLookup;
25+
import org.elasticsearch.core.internal.io.IOUtils;
26+
import org.elasticsearch.painless.lookup.PainlessClass;
2727
import org.elasticsearch.painless.lookup.PainlessField;
28+
import org.elasticsearch.painless.lookup.PainlessLookup;
29+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2830
import org.elasticsearch.painless.lookup.PainlessMethod;
29-
import org.elasticsearch.painless.lookup.PainlessClass;
31+
import org.elasticsearch.painless.spi.Whitelist;
32+
3033
import java.io.IOException;
3134
import java.io.PrintStream;
3235
import java.lang.reflect.Modifier;
@@ -42,14 +45,13 @@
4245

4346
import static java.util.Comparator.comparing;
4447
import static java.util.stream.Collectors.toList;
45-
import static org.elasticsearch.painless.spi.Whitelist.BASE_WHITELISTS;
4648

4749
/**
4850
* Generates an API reference from the method and type whitelists in {@link PainlessLookup}.
4951
*/
5052
public class PainlessDocGenerator {
5153

52-
private static final PainlessLookup PAINLESS_LOOKUP = new PainlessLookup(BASE_WHITELISTS);
54+
private static final PainlessLookup PAINLESS_LOOKUP = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
5355
private static final Logger logger = ESLoggerFactory.getLogger(PainlessDocGenerator.class);
5456
private static final Comparator<PainlessField> FIELD_NAME = comparing(f -> f.name);
5557
private static final Comparator<PainlessMethod> METHOD_NAME = comparing(m -> m.name);

modules/lang-painless/src/test/java/org/elasticsearch/painless/ScriptTestCase.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.elasticsearch.common.settings.Settings;
2626
import org.elasticsearch.painless.antlr.Walker;
2727
import org.elasticsearch.painless.lookup.PainlessLookup;
28+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2829
import org.elasticsearch.painless.spi.Whitelist;
2930
import org.elasticsearch.script.ExecutableScript;
3031
import org.elasticsearch.script.ScriptContext;
@@ -91,7 +92,7 @@ public Object exec(String script, Map<String, Object> vars, boolean picky) {
9192
public Object exec(String script, Map<String, Object> vars, Map<String,String> compileParams, Scorer scorer, boolean picky) {
9293
// test for ambiguity errors before running the actual script if picky is true
9394
if (picky) {
94-
PainlessLookup painlessLookup = new PainlessLookup(Whitelist.BASE_WHITELISTS);
95+
PainlessLookup painlessLookup = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
9596
ScriptClassInfo scriptClassInfo = new ScriptClassInfo(painlessLookup, GenericElasticsearchScript.class);
9697
CompilerSettings pickySettings = new CompilerSettings();
9798
pickySettings.setPicky(true);

modules/lang-painless/src/test/java/org/elasticsearch/painless/node/NodeToStringTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.elasticsearch.painless.lookup.PainlessLookup;
2424
import org.elasticsearch.painless.lookup.PainlessCast;
2525
import org.elasticsearch.painless.lookup.PainlessField;
26+
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
2627
import org.elasticsearch.painless.lookup.PainlessMethod;
2728
import org.elasticsearch.painless.lookup.PainlessMethodKey;
2829
import org.elasticsearch.painless.lookup.PainlessClass;
@@ -48,7 +49,7 @@
4849
* Tests {@link Object#toString} implementations on all extensions of {@link ANode}.
4950
*/
5051
public class NodeToStringTests extends ESTestCase {
51-
private final PainlessLookup painlessLookup = new PainlessLookup(Whitelist.BASE_WHITELISTS);
52+
private final PainlessLookup painlessLookup = new PainlessLookupBuilder(Whitelist.BASE_WHITELISTS).build();
5253

5354
public void testEAssignment() {
5455
assertToString(

0 commit comments

Comments
 (0)