Skip to content

Commit 8301b2f

Browse files
committed
Painless: Move and Rename Several Methods in the lookup package (#32105)
1 parent 5d9ae0e commit 8301b2f

40 files changed

+467
-406
lines changed

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
package org.elasticsearch.painless;
2121

22-
import org.elasticsearch.painless.lookup.PainlessLookup;
2322
import org.elasticsearch.painless.lookup.PainlessCast;
23+
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
2424
import org.elasticsearch.painless.lookup.def;
2525

2626
import java.util.Objects;
@@ -465,8 +465,9 @@ public static PainlessCast getLegalCast(Location location, Class<?> actual, Clas
465465
(actual.isAssignableFrom(expected) && explicit)) {
466466
return PainlessCast.standard(actual, expected, explicit);
467467
} else {
468-
throw location.createError(new ClassCastException(
469-
"Cannot cast from [" + PainlessLookup.ClassToName(actual) + "] to [" + PainlessLookup.ClassToName(expected) + "]."));
468+
throw location.createError(new ClassCastException("Cannot cast from " +
469+
"[" + PainlessLookupUtility.anyTypeToPainlessTypeName(actual) + "] to " +
470+
"[" + PainlessLookupUtility.anyTypeToPainlessTypeName(expected) + "]."));
470471
}
471472
}
472473

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919

2020
package org.elasticsearch.painless;
2121

22+
import org.elasticsearch.painless.lookup.PainlessClass;
2223
import org.elasticsearch.painless.lookup.PainlessLookup;
24+
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
2325
import org.elasticsearch.painless.lookup.PainlessMethod;
24-
import org.elasticsearch.painless.lookup.PainlessClass;
2526
import org.elasticsearch.painless.lookup.PainlessMethodKey;
2627

2728
import java.lang.invoke.CallSite;
@@ -302,7 +303,7 @@ static MethodHandle lookupMethod(PainlessLookup painlessLookup, MethodHandles.Lo
302303
nestedType,
303304
0,
304305
DefBootstrap.REFERENCE,
305-
PainlessLookup.ClassToName(interfaceType));
306+
PainlessLookupUtility.anyTypeToPainlessTypeName(interfaceType));
306307
filter = nested.dynamicInvoker();
307308
} else {
308309
throw new AssertionError();
@@ -347,7 +348,7 @@ private static MethodHandle lookupReferenceInternal(PainlessLookup painlessLooku
347348
PainlessMethod interfaceMethod = painlessLookup.getPainlessStructFromJavaClass(clazz).functionalMethod;
348349
if (interfaceMethod == null) {
349350
throw new IllegalArgumentException("Cannot convert function reference [" + type + "::" + call + "] " +
350-
"to [" + PainlessLookup.ClassToName(clazz) + "], not a functional interface");
351+
"to [" + PainlessLookupUtility.anyTypeToPainlessTypeName(clazz) + "], not a functional interface");
351352
}
352353
int arity = interfaceMethod.arguments.size() + captures.length;
353354
final MethodHandle handle;

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

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

2222
import org.elasticsearch.painless.lookup.PainlessClass;
2323
import org.elasticsearch.painless.lookup.PainlessLookup;
24+
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
2425
import org.elasticsearch.painless.lookup.PainlessMethod;
2526
import org.elasticsearch.painless.lookup.PainlessMethodKey;
2627
import org.objectweb.asm.Type;
@@ -168,7 +169,7 @@ private static PainlessMethod lookup(PainlessLookup painlessLookup, Class<?> exp
168169
PainlessMethod method = painlessLookup.getPainlessStructFromJavaClass(expected).functionalMethod;
169170
if (method == null) {
170171
throw new IllegalArgumentException("Cannot convert function reference [" + type + "::" + call + "] " +
171-
"to [" + PainlessLookup.ClassToName(expected) + "], not a functional interface");
172+
"to [" + PainlessLookupUtility.anyTypeToPainlessTypeName(expected) + "], not a functional interface");
172173
}
173174

174175
// lookup requested method

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919

2020
package org.elasticsearch.painless;
2121

22+
import org.elasticsearch.painless.ScriptClassInfo.MethodArgument;
2223
import org.elasticsearch.painless.lookup.PainlessLookup;
24+
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
2325
import org.elasticsearch.painless.lookup.PainlessMethod;
2426
import org.elasticsearch.painless.lookup.PainlessMethodKey;
25-
import org.elasticsearch.painless.ScriptClassInfo.MethodArgument;
2627

2728
import java.util.Arrays;
2829
import java.util.Collection;
@@ -292,7 +293,7 @@ public int getSlot() {
292293
@Override
293294
public String toString() {
294295
StringBuilder b = new StringBuilder();
295-
b.append("Variable[type=").append(PainlessLookup.ClassToName(clazz));
296+
b.append("Variable[type=").append(PainlessLookupUtility.anyTypeToPainlessTypeName(clazz));
296297
b.append(",name=").append(name);
297298
b.append(",slot=").append(slot);
298299
if (readonly) {

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

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

2222
import org.elasticsearch.painless.lookup.PainlessLookup;
23+
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
2324

2425
import java.lang.invoke.MethodType;
2526
import java.lang.reflect.Field;
@@ -182,7 +183,7 @@ private MethodArgument methodArgument(PainlessLookup painlessLookup, Class<?> cl
182183

183184
private static Class<?> definitionTypeForClass(PainlessLookup painlessLookup, Class<?> type,
184185
Function<Class<?>, String> unknownErrorMessageSource) {
185-
type = PainlessLookup.ObjectClassTodefClass(type);
186+
type = PainlessLookupUtility.javaObjectTypeToPainlessDefType(type);
186187
Class<?> componentType = type;
187188

188189
while (componentType.isArray()) {

modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/EnhancedPainlessLexer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.antlr.v4.runtime.LexerNoViableAltException;
2424
import org.antlr.v4.runtime.Token;
2525
import org.antlr.v4.runtime.misc.Interval;
26-
import org.elasticsearch.painless.lookup.PainlessLookup;
2726
import org.elasticsearch.painless.Location;
27+
import org.elasticsearch.painless.lookup.PainlessLookup;
2828

2929
/**
3030
* A lexer that is customized for painless. It:

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

+5-203
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package org.elasticsearch.painless.lookup;
2121

22-
import java.util.Arrays;
2322
import java.util.Collection;
2423
import java.util.Collections;
2524
import java.util.Map;
@@ -30,154 +29,6 @@
3029
*/
3130
public final class PainlessLookup {
3231

33-
public static Class<?> getBoxedType(Class<?> clazz) {
34-
if (clazz == boolean.class) {
35-
return Boolean.class;
36-
} else if (clazz == byte.class) {
37-
return Byte.class;
38-
} else if (clazz == short.class) {
39-
return Short.class;
40-
} else if (clazz == char.class) {
41-
return Character.class;
42-
} else if (clazz == int.class) {
43-
return Integer.class;
44-
} else if (clazz == long.class) {
45-
return Long.class;
46-
} else if (clazz == float.class) {
47-
return Float.class;
48-
} else if (clazz == double.class) {
49-
return Double.class;
50-
}
51-
52-
return clazz;
53-
}
54-
55-
public static Class<?> getUnboxedype(Class<?> clazz) {
56-
if (clazz == Boolean.class) {
57-
return boolean.class;
58-
} else if (clazz == Byte.class) {
59-
return byte.class;
60-
} else if (clazz == Short.class) {
61-
return short.class;
62-
} else if (clazz == Character.class) {
63-
return char.class;
64-
} else if (clazz == Integer.class) {
65-
return int.class;
66-
} else if (clazz == Long.class) {
67-
return long.class;
68-
} else if (clazz == Float.class) {
69-
return float.class;
70-
} else if (clazz == Double.class) {
71-
return double.class;
72-
}
73-
74-
return clazz;
75-
}
76-
77-
public static boolean isConstantType(Class<?> clazz) {
78-
return clazz == boolean.class ||
79-
clazz == byte.class ||
80-
clazz == short.class ||
81-
clazz == char.class ||
82-
clazz == int.class ||
83-
clazz == long.class ||
84-
clazz == float.class ||
85-
clazz == double.class ||
86-
clazz == String.class;
87-
}
88-
89-
public Class<?> getClassFromBinaryName(String painlessType) {
90-
return painlessTypesToJavaClasses.get(painlessType.replace('$', '.'));
91-
}
92-
93-
public static Class<?> ObjectClassTodefClass(Class<?> clazz) {
94-
if (clazz.isArray()) {
95-
Class<?> component = clazz.getComponentType();
96-
int dimensions = 1;
97-
98-
while (component.isArray()) {
99-
component = component.getComponentType();
100-
++dimensions;
101-
}
102-
103-
if (component == Object.class) {
104-
char[] braces = new char[dimensions];
105-
Arrays.fill(braces, '[');
106-
107-
String descriptor = new String(braces) + org.objectweb.asm.Type.getType(def.class).getDescriptor();
108-
org.objectweb.asm.Type type = org.objectweb.asm.Type.getType(descriptor);
109-
110-
try {
111-
return Class.forName(type.getInternalName().replace('/', '.'));
112-
} catch (ClassNotFoundException exception) {
113-
throw new IllegalStateException("internal error", exception);
114-
}
115-
}
116-
} else if (clazz == Object.class) {
117-
return def.class;
118-
}
119-
120-
return clazz;
121-
}
122-
123-
public static Class<?> defClassToObjectClass(Class<?> clazz) {
124-
if (clazz.isArray()) {
125-
Class<?> component = clazz.getComponentType();
126-
int dimensions = 1;
127-
128-
while (component.isArray()) {
129-
component = component.getComponentType();
130-
++dimensions;
131-
}
132-
133-
if (component == def.class) {
134-
char[] braces = new char[dimensions];
135-
Arrays.fill(braces, '[');
136-
137-
String descriptor = new String(braces) + org.objectweb.asm.Type.getType(Object.class).getDescriptor();
138-
org.objectweb.asm.Type type = org.objectweb.asm.Type.getType(descriptor);
139-
140-
try {
141-
return Class.forName(type.getInternalName().replace('/', '.'));
142-
} catch (ClassNotFoundException exception) {
143-
throw new IllegalStateException("internal error", exception);
144-
}
145-
}
146-
} else if (clazz == def.class) {
147-
return Object.class;
148-
}
149-
150-
return clazz;
151-
}
152-
153-
public static String ClassToName(Class<?> clazz) {
154-
if (clazz.isLocalClass() || clazz.isAnonymousClass()) {
155-
return null;
156-
} else if (clazz.isArray()) {
157-
Class<?> component = clazz.getComponentType();
158-
int dimensions = 1;
159-
160-
while (component.isArray()) {
161-
component = component.getComponentType();
162-
++dimensions;
163-
}
164-
165-
if (component == def.class) {
166-
StringBuilder builder = new StringBuilder(def.class.getSimpleName());
167-
168-
for (int dimension = 0; dimension < dimensions; dimension++) {
169-
builder.append("[]");
170-
}
171-
172-
return builder.toString();
173-
}
174-
} else if (clazz == def.class) {
175-
return def.class.getSimpleName();
176-
}
177-
178-
return clazz.getCanonicalName().replace('$', '.');
179-
}
180-
18132
public Collection<PainlessClass> getStructs() {
18233
return javaClassesToPainlessStructs.values();
18334
}
@@ -190,6 +41,10 @@ public Collection<PainlessClass> getStructs() {
19041
this.javaClassesToPainlessStructs = Collections.unmodifiableMap(javaClassesToPainlessStructs);
19142
}
19243

44+
public Class<?> getClassFromBinaryName(String painlessType) {
45+
return painlessTypesToJavaClasses.get(painlessType.replace('$', '.'));
46+
}
47+
19348
public boolean isSimplePainlessType(String painlessType) {
19449
return painlessTypesToJavaClasses.containsKey(painlessType);
19550
}
@@ -199,59 +54,6 @@ public PainlessClass getPainlessStructFromJavaClass(Class<?> clazz) {
19954
}
20055

20156
public Class<?> getJavaClassFromPainlessType(String painlessType) {
202-
Class<?> javaClass = painlessTypesToJavaClasses.get(painlessType);
203-
204-
if (javaClass != null) {
205-
return javaClass;
206-
}
207-
int arrayDimensions = 0;
208-
int arrayIndex = painlessType.indexOf('[');
209-
210-
if (arrayIndex != -1) {
211-
int length = painlessType.length();
212-
213-
while (arrayIndex < length) {
214-
if (painlessType.charAt(arrayIndex) == '[' && ++arrayIndex < length && painlessType.charAt(arrayIndex++) == ']') {
215-
++arrayDimensions;
216-
} else {
217-
throw new IllegalArgumentException("invalid painless type [" + painlessType + "].");
218-
}
219-
}
220-
221-
painlessType = painlessType.substring(0, painlessType.indexOf('['));
222-
javaClass = painlessTypesToJavaClasses.get(painlessType);
223-
224-
char braces[] = new char[arrayDimensions];
225-
Arrays.fill(braces, '[');
226-
String descriptor = new String(braces);
227-
228-
if (javaClass == boolean.class) {
229-
descriptor += "Z";
230-
} else if (javaClass == byte.class) {
231-
descriptor += "B";
232-
} else if (javaClass == short.class) {
233-
descriptor += "S";
234-
} else if (javaClass == char.class) {
235-
descriptor += "C";
236-
} else if (javaClass == int.class) {
237-
descriptor += "I";
238-
} else if (javaClass == long.class) {
239-
descriptor += "J";
240-
} else if (javaClass == float.class) {
241-
descriptor += "F";
242-
} else if (javaClass == double.class) {
243-
descriptor += "D";
244-
} else {
245-
descriptor += "L" + javaClass.getName() + ";";
246-
}
247-
248-
try {
249-
return Class.forName(descriptor);
250-
} catch (ClassNotFoundException cnfe) {
251-
throw new IllegalStateException("invalid painless type [" + painlessType + "]", cnfe);
252-
}
253-
}
254-
255-
throw new IllegalArgumentException("invalid painless type [" + painlessType + "]");
57+
return PainlessLookupUtility.painlessTypeNameToPainlessType(painlessType, painlessTypesToJavaClasses);
25658
}
25759
}

0 commit comments

Comments
 (0)