Backtick qualified Kotlin keyword calls

ober

7938918c67d3ce73ea771c6daa98b2a01aa5de1c

diff --git a/lib/jerboa/typed/kotlin/print.ss b/lib/jerboa/typed/kotlin/print.ss
index 1ecc329..a433612 100644
--- a/lib/jerboa/typed/kotlin/print.ss
+++ b/lib/jerboa/typed/kotlin/print.ss
@@ -127,7 +127,19 @@
     (cond
       [(null? parts) '()]
       [(pair? parts)
-       (map kotlin-symbol-name parts)]
+       (if (null? (cdr parts))
+         (list (kotlin-symbol-name (car parts)))
+         (append
+           (map kotlin-qualified-part-name
+                (let loop ([rest parts])
+                  (if (null? (cdr rest))
+                    '()
+                    (cons (car rest) (loop (cdr rest))))))
+           (list (kotlin-member-name
+                   (let loop ([rest parts])
+                     (if (null? (cdr rest))
+                       (car rest)
+                       (loop (cdr rest))))))))]
       [else (list (kotlin-symbol-name parts))]))
 
   (def (qualified-name-parts->strings parts)
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index 2c58b6e..c63752d 100644
--- a/tests/test-typed-kotlin.ss
+++ b/tests/test-typed-kotlin.ss
@@ -53,6 +53,9 @@
 (test "expression keyword name escape"
       (kotlin-expr->string (make-kt-name '(out)))
       "_out")
+(test "qualified expression keyword member is backticked"
+      (kotlin-expr->string (make-kt-name '(FileChannel open)))
+      "FileChannel.`open`")
 (test "member keyword name is backticked"
       (kotlin-expr->string
         (make-kt-member-call