Hello, i’m trying to make a compiler plugin for ko...
# compiler
p
Hello, i’m trying to make a compiler plugin for kotlin native that generates
Deferred
return type methods for
suspend
functions e.g.
Copy code
suspend fun foo(): String = "Hello world!"
would generate an additional method
Copy code
fun foo(scope: CoroutineScope): Deferred<String> = scope.async { "Hello world!" }
As i try to hook into ir codegen i’m getting this exception:
Copy code
exception: java.lang.IllegalStateException: The provided plugin com.nfq.NativeSuspendRegistrar is not compatible with this version of compiler
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:203)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:121)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:513)
        at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:57)
        at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:35)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:71)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:39)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:202)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(CLITool.kt:194)
        at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:214)
        at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:205)
        at org.jetbrains.kotlin.konan.util.UtilKt.profileIf(Util.kt:37)
        at org.jetbrains.kotlin.konan.util.UtilKt.profile(Util.kt:31)
        at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:207)
        at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:259)
        at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:16)
Caused by: java.lang.AbstractMethodError
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:195)
        ... 18 more
My build.gradle looks like this:
Copy code
apply plugin: 'org.jetbrains.kotlin.jvm'
apply plugin: 'kotlin-kapt'

repositories {
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
    implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion"

    compileOnly 'com.google.auto.service:auto-service:1.0-rc4'
    kapt 'com.google.auto.service:auto-service:1.0-rc4'
}
And my ComponenRegistrar looks like this:
Copy code
@AutoService(ComponentRegistrar::class)
class NativeSuspendRegistrar : ComponentRegistrar {

    override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
        IrGenerationExtension.registerExtension(project, NativeSuspendIrGenerationExtension())
    }
}
I use Kotlin 1.3.11
c
I just had this exact issue… the solution is to change your dependency on
kotlin-compiler-embeddable
to
kotlin-compiler
in your build.gradle
d
Hi, i'm having the same issue (using
kotlin-compiler
and not
kotlin-compiler-embeddable
), @Paulius Ruminas, did you find a solution?
i solved switching back to the
embeddable
artifact and building directly using gradle and not with intellij