rules_jvm_external icon indicating copy to clipboard operation
rules_jvm_external copied to clipboard

override_targets doesn't support kotlin extensions

Open dieend opened this issue 2 years ago • 0 comments

When overriding a maven target with local kt_jvm_export bazel target, kotlin extensions failed to compile

exception: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during code generation
File being compiled: /Users/adinata/.cache/bazel/4bb02c6b1fe34f55b10507c9f23bccf7/execroot/brex/libraries/kotlin/core/src/kotlin/brex/query/PaginationModel.kt
The root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:50)
    at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
    at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:235)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.doGenerateFilesInternal(JvmIrCodegenFactory.kt:209)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:62)
    at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:592)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:212)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:155)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    at io.bazel.kotlin.compiler.BazelK2JVMCompiler.exec(BazelK2JVMCompiler.kt:30)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at io.bazel.kotlin.builder.toolchain.KotlinToolchain$KotlinCliToolInvoker.compile(KotlinToolchain.kt:186)
    at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt$compileKotlin$1$2.invoke(compilation_task.kt:299)
    at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt$compileKotlin$1$2.invoke(compilation_task.kt:299)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.executeCompilerTask(CompilationTaskContext.kt:122)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.executeCompilerTask$default(CompilationTaskContext.kt:114)
    at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt.compileKotlin(compilation_task.kt:299)
    at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$1$1$1.invoke(KotlinJvmTaskExecutor.kt:62)
    at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$1$1$1.invoke(KotlinJvmTaskExecutor.kt:60)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:148)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:140)
    at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:60)
    at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:56)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:148)
    at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:140)
    at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor.execute(KotlinJvmTaskExecutor.kt:56)
    at io.bazel.kotlin.builder.tasks.KotlinBuilder.executeJvmTask(KotlinBuilder.kt:232)
    at io.bazel.kotlin.builder.tasks.KotlinBuilder.build(KotlinBuilder.kt:130)
    at io.bazel.kotlin.builder.tasks.CompileKotlin.invoke(CompileKotlin.kt:27)
    at io.bazel.worker.PersistentWorker$compileWork$2$result$1.invoke(PersistentWorker.kt:96)
    at io.bazel.worker.PersistentWorker$compileWork$2$result$1.invoke(PersistentWorker.kt:94)
    at io.bazel.worker.WorkerContext$TaskContext.resultOf(WorkerContext.kt:128)
    at io.bazel.worker.WorkerContext.doTask(WorkerContext.kt:156)
    at io.bazel.worker.PersistentWorker$compileWork$2.invokeSuspend(PersistentWorker.kt:94)
    at io.bazel.worker.PersistentWorker$compileWork$2.invoke(PersistentWorker.kt)
    at io.bazel.worker.PersistentWorker$compileWork$2.invoke(PersistentWorker.kt)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
    at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
    at io.bazel.worker.PersistentWorker.compileWork(PersistentWorker.kt:93)
    at io.bazel.worker.PersistentWorker.access$compileWork(PersistentWorker.kt:45)
    at io.bazel.worker.PersistentWorker$start$1$1$1$1$2$1.invokeSuspend(PersistentWorker.kt:71)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Caused by: java.lang.RuntimeException: Exception while generating code for:
FUN name:toProto visibility:public modality:FINAL <> ($this:brex.query.PaginationModel) 
... (truncated)
Caused by: java.lang.NullPointerException: insnList.first must not be null
    at org.jetbrains.kotlin.codegen.optimization.common.InsnSequence.<init>(Util.kt:48)
    at org.jetbrains.kotlin.codegen.optimization.common.UtilKt.asSequence(Util.kt:64)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.lineNumberRange(inlineCodegenUtils.kt:138)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.getMethodNode(inlineCodegenUtils.kt:129)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.getMethodNode$default(inlineCodegenUtils.kt:83)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegen$Companion.doCreateMethodNodeFromCompiled(InlineCodegen.kt:638)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegen$Companion.getCompiledMethodNodeInner(InlineCodegen.kt:575)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegen$Companion.access$getCompiledMethodNodeInner(InlineCodegen.kt:545)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegen.createInlineMethodNode$backend(InlineCodegen.kt:538)
    at org.jetbrains.kotlin.codegen.inline.InlineCodegen.performInline(InlineCodegen.kt:135)
    ... 73 more

Which is a similar issue with https://discuss.kotlinlang.org/t/solved-extension-functions-not-available-when-exported-to-jar/4939

When using the maven target, it compiles successfully.

kt_jvm_export(
    name = "extension",
    srcs = ["test.kt"],
    maven_coordinates = "com.test.extension:extension:0.0.1",
    visibility = ["//visibility:public"],
    deps = [
    ],
)

maven_install(
        artifacts = [
            maven.artifact("com.test.extension", "extension", "[0.0.1,1.0.0)")
        ],
        repositories = [
            "https://maven.google.com",
            "https://repo1.maven.org/maven2",
            "https://packages.confluent.io/maven/",
            "https://jitpack.io",
            "https://repo.kotlin.link",
            "https://maven.pkg.jetbrains.space/mipt-npm/p/sci/maven",
        ],
        # adding override_targets make compile failed
        override_targets = {
            "com.test.extension:extension": "@//lib:extension",
        },
        maven_install_json = "//:maven_install.json",
        fetch_sources = True,
        fetch_javadoc = True,
        generate_compat_repositories = True,
        version_conflict_policy = "pinned",
)

kt_jvm_library(
    name = "target",
    srcs = glob([
        "source.kt",
    ]),
    visibility = ["//visibility:public"],
    deps = [
        "@maven//:com_test_extension_extension",
    ],
)

dieend avatar May 25 '22 03:05 dieend