kotlin 当我在Route中使用泛型方法时,我收到编译器后端内部错误:在Ktor中降低利率期间出现异常

5lhxktic  于 2022-11-30  发布在  Kotlin
关注(0)|答案(1)|浏览(120)

我尝试基于用户定义的数据类模型创建动态服务,它们注册了DataModels()方法应用程序数据模块()它应该在路由器服务中自动创建所有基于的方法。当我试图在这些方法中使用泛型时,我得到了一个编译器错误。是否有其他更好的方法来动态创建路由方法,例如由开发人员定义数据模型,然后自动创建服务创建的?

org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: */api/AppConfigService.kt
The root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:47)

File is unknown
The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.codegen.coroutines.CoroutineTransformerMethodVisitor.spillVariables(CoroutineTransformerMethodVisitor.kt:636)

fun Application.registerDataModels() {
  appDataModule<M1>()
  appDataModule<M2>()
  appDataModule<M3>()
}

inline fun <reified T: DBModel> Application.appDataModule() {
  routing {
    createAppData<T>()
    updateAppData<T>()
    deleteAppData<T>()
  }
}

inline fun <reified T: DBModel> Route.createAppData() {
  put("/api/data/${getName<T>()}/create") {
    authenticated {
      create<T>{}
    }
  }
}

inline fun <reified T: DBModel> Route.updateAppData() {
  put("/api/data/${getName<T>()}/update") {
    authenticated {
      update<T>{}
    }
  }
}

inline fun <reified T: DBModel> Route.deleteAppData() {
  put("/api/data/${getName<T>()}/delete") {
    authenticated {
      delete<T>{}
    }
  }
}
pepwfjgg

pepwfjgg1#

您正在将inline函数与reified配合使用。
长话短说,inline函数被编译并“复制”到它们被使用的位置,已经有了一个固定的类(这就是物化所做的)。

inline fun <reified T> foo(t: T): T { ... }

你可以这样称呼它:

val myVal = foo("test").uppercase()

那么在编译调用代码行时,T的类型已知为String,目标代码行被相应地编译,因此在运行时你知道你的函数中的类型T是什么。(对于这一调用代码行)就好像这个函数是这样开始的:

fun foo(t: String): String { ... }

然而,因为你想动态编译这些类,这个过程失败了,因为这个类显然还不存在。这仅仅是由于reified的性质。如果你能以某种方式删除它,它可能会工作。
我同意编译器的错误信息在这里更能说明问题。也许你可以在kotlin的问题跟踪平台上提出一个任务?:https://youtrack.jetbrains.com/issues/kt?_gl=15r6x4d_gaMTQyMDYxMjc2MS4xNjMzMzQwMzk5_ga_9J976DJZ68*MTY2OTM1NjM1MS4yMS4xLjE2NjkzNTYzNTcuMC4wLjA.&_ga=2.265829455.1332696793.1669356352-1420612761.1633340399

相关问题