@@ -157,81 +157,84 @@ public void writeLoopCounter(int slot, Location location) {
157
157
}
158
158
159
159
public void writeCast (PainlessCast cast ) {
160
- if (cast != null ) {
161
- if (cast .originalType == char .class && cast .targetType == String .class ) {
162
- invokeStatic (UTILITY_TYPE , CHAR_TO_STRING );
163
- } else if (cast .originalType == String .class && cast .targetType == char .class ) {
164
- invokeStatic (UTILITY_TYPE , STRING_TO_CHAR );
165
- // TODO: remove this when the transition from Joda to Java datetimes is completed
166
- } else if (cast .originalType == JodaCompatibleZonedDateTime .class && cast .targetType == ZonedDateTime .class ) {
167
- invokeStatic (UTILITY_TYPE , JCZDT_TO_ZONEDDATETIME );
168
- } else if (cast .unboxOriginalType != null && cast .boxTargetType != null ) {
169
- unbox (getType (cast .unboxOriginalType ));
170
- writeCast (cast .unboxOriginalType , cast .boxTargetType );
171
- box (getType (cast .boxTargetType ));
172
- } else if (cast .unboxOriginalType != null ) {
173
- unbox (getType (cast .unboxOriginalType ));
174
- writeCast (cast .originalType , cast .targetType );
175
- } else if (cast .unboxTargetType != null ) {
176
- writeCast (cast .originalType , cast .targetType );
177
- unbox (getType (cast .unboxTargetType ));
178
- } else if (cast .boxOriginalType != null ) {
179
- box (getType (cast .boxOriginalType ));
180
- writeCast (cast .originalType , cast .targetType );
181
- } else if (cast .boxTargetType != null ) {
182
- writeCast (cast .originalType , cast .targetType );
183
- box (getType (cast .boxTargetType ));
184
- } else if (cast .originalType == def .class ) {
185
- if (cast .explicitCast ) {
186
- if (cast .targetType == boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BOOLEAN );
187
- else if (cast .targetType == byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BYTE_EXPLICIT );
188
- else if (cast .targetType == short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_SHORT_EXPLICIT );
189
- else if (cast .targetType == char .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_CHAR_EXPLICIT );
190
- else if (cast .targetType == int .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_INT_EXPLICIT );
191
- else if (cast .targetType == long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_LONG_EXPLICIT );
192
- else if (cast .targetType == float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_FLOAT_EXPLICIT );
193
- else if (cast .targetType == double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_DOUBLE_EXPLICIT );
194
- else if (cast .targetType == Boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BOOLEAN );
195
- else if (cast .targetType == Byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BYTE_EXPLICIT );
196
- else if (cast .targetType == Short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_SHORT_EXPLICIT );
197
- else if (cast .targetType == Character .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_CHARACTER_EXPLICIT );
198
- else if (cast .targetType == Integer .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_INTEGER_EXPLICIT );
199
- else if (cast .targetType == Long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_LONG_EXPLICIT );
200
- else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_EXPLICIT );
201
- else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_EXPLICIT );
202
- else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_EXPLICIT );
203
- // TODO: remove this when the transition from Joda to Java datetimes is completed
204
- else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
205
- else {
206
- writeCast (cast .originalType , cast .targetType );
207
- }
208
- } else {
209
- if (cast .targetType == boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BOOLEAN );
210
- else if (cast .targetType == byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BYTE_IMPLICIT );
211
- else if (cast .targetType == short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_SHORT_IMPLICIT );
212
- else if (cast .targetType == char .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_CHAR_IMPLICIT );
213
- else if (cast .targetType == int .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_INT_IMPLICIT );
214
- else if (cast .targetType == long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_LONG_IMPLICIT );
215
- else if (cast .targetType == float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_FLOAT_IMPLICIT );
216
- else if (cast .targetType == double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_DOUBLE_IMPLICIT );
217
- else if (cast .targetType == Boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BOOLEAN );
218
- else if (cast .targetType == Byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BYTE_IMPLICIT );
219
- else if (cast .targetType == Short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_SHORT_IMPLICIT );
220
- else if (cast .targetType == Character .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_CHARACTER_IMPLICIT );
221
- else if (cast .targetType == Integer .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_INTEGER_IMPLICIT );
222
- else if (cast .targetType == Long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_LONG_IMPLICIT );
223
- else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_IMPLICIT );
224
- else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_IMPLICIT );
225
- else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_IMPLICIT );
226
- // TODO: remove this when the transition from Joda to Java datetimes is completed
227
- else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
228
- else {
229
- writeCast (cast .originalType , cast .targetType );
230
- }
160
+ if (cast == null ) {
161
+ return ;
162
+ }
163
+ if (cast .converter != null ) {
164
+ invokeStatic (Type .getType (cast .converter .getDeclaringClass ()), Method .getMethod (cast .converter ));
165
+ } else if (cast .originalType == char .class && cast .targetType == String .class ) {
166
+ invokeStatic (UTILITY_TYPE , CHAR_TO_STRING );
167
+ } else if (cast .originalType == String .class && cast .targetType == char .class ) {
168
+ invokeStatic (UTILITY_TYPE , STRING_TO_CHAR );
169
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
170
+ } else if (cast .originalType == JodaCompatibleZonedDateTime .class && cast .targetType == ZonedDateTime .class ) {
171
+ invokeStatic (UTILITY_TYPE , JCZDT_TO_ZONEDDATETIME );
172
+ } else if (cast .unboxOriginalType != null && cast .boxTargetType != null ) {
173
+ unbox (getType (cast .unboxOriginalType ));
174
+ writeCast (cast .unboxOriginalType , cast .boxTargetType );
175
+ box (getType (cast .boxTargetType ));
176
+ } else if (cast .unboxOriginalType != null ) {
177
+ unbox (getType (cast .unboxOriginalType ));
178
+ writeCast (cast .originalType , cast .targetType );
179
+ } else if (cast .unboxTargetType != null ) {
180
+ writeCast (cast .originalType , cast .targetType );
181
+ unbox (getType (cast .unboxTargetType ));
182
+ } else if (cast .boxOriginalType != null ) {
183
+ box (getType (cast .boxOriginalType ));
184
+ writeCast (cast .originalType , cast .targetType );
185
+ } else if (cast .boxTargetType != null ) {
186
+ writeCast (cast .originalType , cast .targetType );
187
+ box (getType (cast .boxTargetType ));
188
+ } else if (cast .originalType == def .class ) {
189
+ if (cast .explicitCast ) {
190
+ if (cast .targetType == boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BOOLEAN );
191
+ else if (cast .targetType == byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BYTE_EXPLICIT );
192
+ else if (cast .targetType == short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_SHORT_EXPLICIT );
193
+ else if (cast .targetType == char .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_CHAR_EXPLICIT );
194
+ else if (cast .targetType == int .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_INT_EXPLICIT );
195
+ else if (cast .targetType == long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_LONG_EXPLICIT );
196
+ else if (cast .targetType == float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_FLOAT_EXPLICIT );
197
+ else if (cast .targetType == double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_DOUBLE_EXPLICIT );
198
+ else if (cast .targetType == Boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BOOLEAN );
199
+ else if (cast .targetType == Byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BYTE_EXPLICIT );
200
+ else if (cast .targetType == Short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_SHORT_EXPLICIT );
201
+ else if (cast .targetType == Character .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_CHARACTER_EXPLICIT );
202
+ else if (cast .targetType == Integer .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_INTEGER_EXPLICIT );
203
+ else if (cast .targetType == Long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_LONG_EXPLICIT );
204
+ else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_EXPLICIT );
205
+ else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_EXPLICIT );
206
+ else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_EXPLICIT );
207
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
208
+ else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
209
+ else {
210
+ writeCast (cast .originalType , cast .targetType );
231
211
}
232
212
} else {
233
- writeCast (cast .originalType , cast .targetType );
213
+ if (cast .targetType == boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BOOLEAN );
214
+ else if (cast .targetType == byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_BYTE_IMPLICIT );
215
+ else if (cast .targetType == short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_SHORT_IMPLICIT );
216
+ else if (cast .targetType == char .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_CHAR_IMPLICIT );
217
+ else if (cast .targetType == int .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_INT_IMPLICIT );
218
+ else if (cast .targetType == long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_LONG_IMPLICIT );
219
+ else if (cast .targetType == float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_FLOAT_IMPLICIT );
220
+ else if (cast .targetType == double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_P_DOUBLE_IMPLICIT );
221
+ else if (cast .targetType == Boolean .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BOOLEAN );
222
+ else if (cast .targetType == Byte .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_BYTE_IMPLICIT );
223
+ else if (cast .targetType == Short .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_SHORT_IMPLICIT );
224
+ else if (cast .targetType == Character .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_CHARACTER_IMPLICIT );
225
+ else if (cast .targetType == Integer .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_INTEGER_IMPLICIT );
226
+ else if (cast .targetType == Long .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_LONG_IMPLICIT );
227
+ else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_IMPLICIT );
228
+ else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_IMPLICIT );
229
+ else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_IMPLICIT );
230
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
231
+ else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
232
+ else {
233
+ writeCast (cast .originalType , cast .targetType );
234
+ }
234
235
}
236
+ } else {
237
+ writeCast (cast .originalType , cast .targetType );
235
238
}
236
239
}
237
240
0 commit comments