19
19
20
20
package org .elasticsearch .painless .lookup ;
21
21
22
- import java .util .Arrays ;
23
22
import java .util .Collection ;
24
23
import java .util .Collections ;
25
24
import java .util .Map ;
30
29
*/
31
30
public final class PainlessLookup {
32
31
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
-
181
32
public Collection <PainlessClass > getStructs () {
182
33
return javaClassesToPainlessStructs .values ();
183
34
}
@@ -190,6 +41,10 @@ public Collection<PainlessClass> getStructs() {
190
41
this .javaClassesToPainlessStructs = Collections .unmodifiableMap (javaClassesToPainlessStructs );
191
42
}
192
43
44
+ public Class <?> getClassFromBinaryName (String painlessType ) {
45
+ return painlessTypesToJavaClasses .get (painlessType .replace ('$' , '.' ));
46
+ }
47
+
193
48
public boolean isSimplePainlessType (String painlessType ) {
194
49
return painlessTypesToJavaClasses .containsKey (painlessType );
195
50
}
@@ -199,59 +54,6 @@ public PainlessClass getPainlessStructFromJavaClass(Class<?> clazz) {
199
54
}
200
55
201
56
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 );
256
58
}
257
59
}
0 commit comments