Function createKType not found

42 Views Asked by At

I am trying to get Custom Elements running with Kotlin/Wasm, but when compiling I encounter this exception:

> Task :compileDevelopmentExecutableKotlinWasm FAILED
e: java.lang.IllegalArgumentException: Function createKType not found
    at org.jetbrains.kotlin.backend.wasm.WasmSymbols.getFunction(WasmSymbols.kt:348)
    at org.jetbrains.kotlin.backend.wasm.WasmSymbols.getInternalFunction(WasmSymbols.kt:358)
    at org.jetbrains.kotlin.backend.wasm.WasmSymbols.access$getInternalFunction(WasmSymbols.kt:30)
    at org.jetbrains.kotlin.backend.wasm.WasmSymbols$WasmReflectionSymbols.<init>(WasmSymbols.kt:50)
    at org.jetbrains.kotlin.backend.wasm.WasmSymbols.<init>(WasmSymbols.kt:67)
    at org.jetbrains.kotlin.backend.wasm.WasmBackendContext.<init>(WasmBackendContext.kt:117)
    at org.jetbrains.kotlin.backend.wasm.CompilerKt.compileToLoweredIr(compiler.kt:65)
    at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:367)
    at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
    at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1486)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1589)

My code:

import kotlinx.browser.window
import org.w3c.dom.Element
import org.w3c.dom.HTMLElement
import kotlin.reflect.KClass

abstract class CustomElement : HTMLElement() {
    init {
        println("Creating custom element")
        textContent = "Hello world"
    }
}

fun <T : Element> defineElement(name: String, constructor: KClass<T>) {
    window.customElements.define(name, constructor.js.unsafeCast<() -> dynamic>())
}

fun main(args: Array<String>) {
    defineElement("custom-element", CustomElement::class)
}

My build.gradle.kts:

import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

group = "de.obenland"
version = "1.0-SNAPSHOT"

plugins {
    kotlin("multiplatform") version "1.8.21"
    kotlin("plugin.spring") version "1.8.21"
}
repositories {
    mavenCentral()
}

kotlin {
    wasm {
        binaries.executable()
        browser { }
    }

    sourceSets {
        val wasmMain by getting {
            dependencies {
                implementation(kotlin("stdlib-js"))
            }
        }
    }
}

With the help of IntelliJ I found createKType in kotlin-stdlib-js's sources. But not in the compiled dependency. kotlin-stdlib-js contains a kotlin.js which contains the JS part of this function.

I thought maybe the plugin org.jetbrains.kotlin.js is missing, but this collides with org.jetbrains.kotlin.multiplatform

0

There are 0 best solutions below