Add typed Kotlin JSON array readers
ober
20d981990dd725913b9d38e5d66e0ad861d61d2e
--- a/lib/jerboa/typed/checker.ss +++ b/lib/jerboa/typed/checker.ss @@ -500,6 +500,12 @@ (cons 'json-array-get-json-object (make-typed-call-sig (list 'JSONArray 'Int32) 'JSONObject '() 'jvm-json-array-get-json-object '())) + (cons 'json-array-opt-json-object + (make-typed-call-sig (list 'JSONArray 'Int32) (list 'Nullable 'JSONObject) '() + 'jvm-json-array-opt-json-object '())) + (cons 'json-array-opt-string + (make-typed-call-sig (list 'JSONArray 'Int32) 'String '() + 'jvm-json-array-opt-string '())) (cons 'json-array-length (make-typed-call-sig (list 'JSONArray) 'Int32 '() 'jvm-json-array-length '())) --- a/lib/jerboa/typed/core.ss +++ b/lib/jerboa/typed/core.ss @@ -145,6 +145,8 @@ jvm-json-array-put-string jvm-json-array-put-json-object jvm-json-array-get-json-object + jvm-json-array-opt-json-object + jvm-json-array-opt-string jvm-json-array-length jvm-json-array-opt-float32 jvm-json-object-empty --- a/lib/jerboa/typed/kotlin/lower.ss +++ b/lib/jerboa/typed/kotlin/lower.ss @@ -406,6 +406,10 @@ (make-kt-lit 'Unit '()))] [(jvm-json-array-get-json-object) (make-kt-member-call (car args) 'getJSONObject (cdr args))] + [(jvm-json-array-opt-json-object) + (make-kt-member-call (car args) 'optJSONObject (cdr args))] + [(jvm-json-array-opt-string) + (make-kt-member-call (car args) 'optString (cdr args))] [(jvm-json-array-length) (make-kt-member-call (car args) 'length '())] [(jvm-json-array-opt-float32) --- a/tests/test-typed-checker.ss +++ b/tests/test-typed-checker.ss @@ -1009,6 +1009,19 @@ (json-object-opt-json-array json "items"))))) '()) +(test "json-array optional readers accept JSON arrays" + (error-kinds + '(typed-library (body json-array-optional-readers) + (export read-values) + (type JSONObject) + (type JSONArray) + (type Int32) + (def (read-values (items : JSONArray) (index : Int32)) : (Pair String (Nullable JSONObject)) + (pair + (json-array-opt-string items index) + (json-array-opt-json-object items index))))) + '()) + (test "json-object accepts nested object puts" (error-kinds '(typed-library (body json-object-nested) --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -700,6 +700,25 @@ (def (getObject (items : JSONArray) (index : Int32)) : JSONObject (json-array-get-json-object items index)))) "items.getJSONObject(index)") +(test-contains "JSONArray opt JSONObject lowers to nullable optJSONObject" + (typed-library-form->kotlin-string + '(typed-library (sample typed json-array-opt-object) + (export optObject) + (type JSONArray) + (type JSONObject) + (type Int32) + (def (optObject (items : JSONArray) (index : Int32)) : (Nullable JSONObject) + (json-array-opt-json-object items index)))) + "items.optJSONObject(index)") +(test-contains "JSONArray opt String lowers to optString" + (typed-library-form->kotlin-string + '(typed-library (sample typed json-array-opt-string) + (export optName) + (type JSONArray) + (type Int32) + (def (optName (items : JSONArray) (index : Int32)) : String + (json-array-opt-string items index)))) + "items.optString(index)") (test-contains "JSONArray length lowers to method call" json-array-kotlin "items.length()")