Skip to content

Fix UnsupportedOperationException for generic routes #108

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
Jul 23, 2021
Merged

Fix UnsupportedOperationException for generic routes #108

merged 1 commit into from
Jul 23, 2021

Conversation

darkxanter
Copy link
Contributor

@darkxanter darkxanter commented Jul 23, 2021

Fix UnsupportedOperationException (https://youtrack.jetbrains.com/issue/KT-34051 or may be similar) for generic routes:

inline fun <reified TNodeNew : TreeNodeNew, reified TNode : TreeNodeBase> NormalOpenAPIRoute.treeNodeRoute(
    service: TreeNodeService<TNodeNew, TNode>
) {
    route("{id}").get<PathId, List<TNode>> { params ->
        respond(service.listNodes(params.id))
    }
    route("{id}").delete<PathId, Unit> { params ->
        service.removeNode(params.id)
        pipeline.call.respond(HttpStatusCode.NoContent)
    }
    get<Unit, List<TNode>> {
        respond(service.listNodes(null))
    }
    post<Unit, TNode, TNodeNew> { _, body ->
        respond(service.createNode(body))
    }
    patch<Unit, Unit, TNode> { _, body ->
        service.updateNode(body)
        pipeline.call.respond(HttpStatusCode.NoContent)
    }
}
This function has a reified type parameter and thus can only be inlined at compilation time, not called directly.
java.lang.UnsupportedOperationException: This function has a reified type parameter and thus can only be inlined at compilation time, not called directly.
	at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:207)
	at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:201)
	at kotlin.jvm.internal.Intrinsics.reifiedOperationMarker(Intrinsics.java:211)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$treeNodeRoutePrivate$$inlined$get$default$1.invoke(Functions.kt:104)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$treeNodeRoutePrivate$$inlined$get$default$1.invoke(Functions.kt:103)
	at com.papsign.ktor.openapigen.route.FunctionsKt.preHandle(Functions.kt:162)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$genericRoutesTest$1$2.invoke(GenericRoutesTest.kt:372)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$genericRoutesTest$1$2.invoke(GenericRoutesTest.kt:51)
	at com.papsign.ktor.openapigen.route.RouteConfigKt$apiRouting$1.invoke(RouteConfig.kt:21)
	at com.papsign.ktor.openapigen.route.RouteConfigKt$apiRouting$1.invoke(RouteConfig.kt:17)
	at io.ktor.routing.Routing$Feature.install(Routing.kt:106)
	at io.ktor.routing.Routing$Feature.install(Routing.kt:88)
	at io.ktor.application.ApplicationFeatureKt.install(ApplicationFeature.kt:68)
	at io.ktor.routing.RoutingKt.routing(Routing.kt:129)
	at com.papsign.ktor.openapigen.route.RouteConfigKt.apiRouting(RouteConfig.kt:17)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$genericRoutesTest$1.invoke(GenericRoutesTest.kt:51)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest$genericRoutesTest$1.invoke(GenericRoutesTest.kt:32)
	at io.ktor.server.testing.TestEngineKt$withTestApplication$1.invoke(TestEngine.kt:67)
	at io.ktor.server.testing.TestEngineKt$withTestApplication$1.invoke(TestEngine.kt:66)
	at io.ktor.server.testing.TestEngineKt.withApplication(TestEngine.kt:49)
	at io.ktor.server.testing.TestEngineKt.withApplication$default(TestEngine.kt:41)
	at io.ktor.server.testing.TestEngineKt.withTestApplication(TestEngine.kt:66)
	at com.papsign.ktor.openapigen.routing.GenericRoutesTest.genericRoutesTest(GenericRoutesTest.kt:32)

@Wicpar Wicpar merged commit a89e3f2 into papsign:master Jul 23, 2021
@Wicpar
Copy link
Collaborator

Wicpar commented Jul 23, 2021

God damn that one's a juicy compiler bug...

@darkxanter darkxanter deleted the bugfix/workaround_UnsupportedOperationException branch July 24, 2021 05:58
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants