Generate SSD import path containment from typed Jerboa

ober

9364653448ba0cc963b26bf4d6cd828a3a3fcadb

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index d11a954..a3293de 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -15554,7 +15554,8 @@
                 truthStoreReadResponseTextLocal
                 truthStoreWriteRemoteTruthLocal
                 truthStoreApplyLearnedGuessesLocal
-                truthStoreSeedBundledTruthLocal)
+                truthStoreSeedBundledTruthLocal
+                truthStoreContainedImportPathLocal)
         (type AssetManager)
         (type Context)
         (type Exception)
@@ -15592,6 +15593,9 @@
         (extern (truthStoreLearnedDir
                   (store : TruthStore)) : File
           (kotlin-member-get learnedDir))
+        (extern (truthStoreReviewsDir
+                  (store : TruthStore)) : File
+          (kotlin-member-get reviewsDir))
         (extern (truthStoreChildFile
                   (parent : File)
                   (name : String)) : File
@@ -16155,7 +16159,34 @@
                 (truthStoreImportZipRaw store input)
                 (truthStoreInputStreamClose input)))
             (catch (error : Exception)
-              (int32 0))))))
+              (int32 0))))
+        (def (truthStoreImportDirectory
+               (store : TruthStore)
+               (kind : Int32)) : File
+          (if (= kind (int32 1))
+            (truthStoreGroundTruthDir store)
+            (if (= kind (int32 2))
+              (truthStoreLearnedDir store)
+              (if (= kind (int32 3))
+                (truthStoreEventsDir store)
+                (if (= kind (int32 4))
+                  (truthStoreReviewsDir store)
+                  (throw
+                    (truthStoreIllegalArgumentException
+                      "Unknown import directory")
+                    File))))))
+        (def (truthStoreContainedImportPathLocal
+               (store : TruthStore)
+               (name : String)) : File
+          (begin
+            (truthStoreRequired
+              (safeImportLeafEntryName name)
+              "Unsafe import path")
+            (truthStoreContainedLeaf
+              (truthStoreImportDirectory
+                store
+                (zipEntryRootKind name #\/))
+              (zipEntryLeafName name #\/))))))
 
     (kotlin-file-lines "com/sfb/ssdreview/TruthStore.kt"
       (
@@ -16206,7 +16237,7 @@
        "    internal val groundTruthDir = File(root, \"ground_truth\")"
        "    internal val learnedDir = File(root, \"learned\")"
        "    internal val eventsDir = File(root, \"events\")"
-       "    private val reviewsDir = File(root, \"reviews\")"
+       "    internal val reviewsDir = File(root, \"reviews\")"
        "    private val remoteConfig: RemoteConfig? by lazy { loadRemoteConfig() }"
        "    @Volatile internal var seedStarted = false"
        "    @Volatile private var truthIndexCacheLoaded = false"
@@ -16848,17 +16879,8 @@
        "        }"
        "    }"
        ""
-       "    private fun containedImportPath(name: String): File {"
-       "        require(safeImportLeafEntryName(name)) { \"Unsafe import path\" }"
-       "        val directory = when (zipEntryRootKind(name, '/')) {"
-       "            1 -> groundTruthDir"
-       "            2 -> learnedDir"
-       "            3 -> eventsDir"
-       "            4 -> reviewsDir"
-       "            else -> throw IllegalArgumentException(\"Unknown import directory\")"
-       "        }"
-       "        return containedLeaf(directory, zipEntryLeafName(name, '/'))"
-       "    }"
+       "    private fun containedImportPath(name: String): File ="
+       "        truthStoreContainedImportPathLocal(this, name)"
        ""
        "    private fun readLocalText(file: File): String ="
        "        truthStoreReadLocalText(file)"