22
22
import org .elasticsearch .painless .lookup .PainlessCast ;
23
23
import org .elasticsearch .painless .lookup .PainlessMethod ;
24
24
import org .elasticsearch .painless .lookup .def ;
25
+ import org .elasticsearch .script .JodaCompatibleZonedDateTime ;
25
26
import org .objectweb .asm .ClassVisitor ;
26
27
import org .objectweb .asm .Label ;
27
28
import org .objectweb .asm .Opcodes ;
30
31
import org .objectweb .asm .commons .Method ;
31
32
32
33
import java .lang .reflect .Modifier ;
34
+ import java .time .ZonedDateTime ;
33
35
import java .util .ArrayDeque ;
34
36
import java .util .ArrayList ;
35
37
import java .util .Arrays ;
71
73
import static org .elasticsearch .painless .WriterConstants .DEF_TO_P_SHORT_IMPLICIT ;
72
74
import static org .elasticsearch .painless .WriterConstants .DEF_TO_STRING_EXPLICIT ;
73
75
import static org .elasticsearch .painless .WriterConstants .DEF_TO_STRING_IMPLICIT ;
76
+ import static org .elasticsearch .painless .WriterConstants .DEF_TO_ZONEDDATETIME ;
74
77
import static org .elasticsearch .painless .WriterConstants .DEF_UTIL_TYPE ;
75
78
import static org .elasticsearch .painless .WriterConstants .INDY_STRING_CONCAT_BOOTSTRAP_HANDLE ;
79
+ import static org .elasticsearch .painless .WriterConstants .JCZDT_TO_ZONEDDATETIME ;
76
80
import static org .elasticsearch .painless .WriterConstants .LAMBDA_BOOTSTRAP_HANDLE ;
77
81
import static org .elasticsearch .painless .WriterConstants .MAX_INDY_STRING_CONCAT_ARGS ;
78
82
import static org .elasticsearch .painless .WriterConstants .PAINLESS_ERROR_TYPE ;
@@ -156,6 +160,9 @@ public void writeCast(PainlessCast cast) {
156
160
invokeStatic (UTILITY_TYPE , CHAR_TO_STRING );
157
161
} else if (cast .originalType == String .class && cast .targetType == char .class ) {
158
162
invokeStatic (UTILITY_TYPE , STRING_TO_CHAR );
163
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
164
+ } else if (cast .originalType == JodaCompatibleZonedDateTime .class && cast .targetType == ZonedDateTime .class ) {
165
+ invokeStatic (UTILITY_TYPE , JCZDT_TO_ZONEDDATETIME );
159
166
} else if (cast .unboxOriginalType != null && cast .boxTargetType != null ) {
160
167
unbox (getType (cast .unboxOriginalType ));
161
168
writeCast (cast .unboxOriginalType , cast .boxTargetType );
@@ -191,6 +198,8 @@ public void writeCast(PainlessCast cast) {
191
198
else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_EXPLICIT );
192
199
else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_EXPLICIT );
193
200
else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_EXPLICIT );
201
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
202
+ else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
194
203
else {
195
204
writeCast (cast .originalType , cast .targetType );
196
205
}
@@ -212,6 +221,8 @@ public void writeCast(PainlessCast cast) {
212
221
else if (cast .targetType == Float .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_FLOAT_IMPLICIT );
213
222
else if (cast .targetType == Double .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_B_DOUBLE_IMPLICIT );
214
223
else if (cast .targetType == String .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_STRING_IMPLICIT );
224
+ // TODO: remove this when the transition from Joda to Java datetimes is completed
225
+ else if (cast .targetType == ZonedDateTime .class ) invokeStatic (DEF_UTIL_TYPE , DEF_TO_ZONEDDATETIME );
215
226
else {
216
227
writeCast (cast .originalType , cast .targetType );
217
228
}
0 commit comments