Open troelsbjerre opened 1 year ago
Could you share your language server logs? Might be helpful for looking further into your issue 🙂 Unsure on what the issue might be.
I don't know how to enable language server logging. Any hints?
To reproduce the problem:
gradle init
and generate a placeholder kotlin project. build.gradle.kts
to "1.8.0"
.App.kt
in an editor with the kotlin language server attached.The language server logs a lot of information by default, so you shouldn't need to enable anything. How to find the logs will depend on your editor. In Emacs I have a buffer called *lsp-log*
, while VScode has an output option called Kotlin:
Managed to reproduce it. Seems like the error is the same as for other similar issues:
org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate function appHasAGreeting
File being compiled: (10,5) in //Users/marie/Programming/Kotlin/langserver413/app/src/test/kotlin/langserver413/AppTest.kt
The root cause java.lang.IllegalStateException was thrown at: org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$typeMappingConfiguration$1.processErrorType(KotlinTypeMapper.kt:128)
at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:206)
at org.jetbrains.kotlin.codegen.ClassBodyCodegen.generateDeclaration(ClassBodyCodegen.java:168)
at org.jetbrains.kotlin.codegen.ClassBodyCodegen.generateBody(ClassBodyCodegen.java:88)
at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:132)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:305)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:289)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateClassesAndObjectsInFile(PackageCodegenImpl.java:119)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:138)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:70)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generatePackage(CodegenFactory.kt:77)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generateModule(CodegenFactory.kt:62)
at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
at org.javacs.kt.compiler.Compiler.generateCode(Compiler.kt:572)
at org.javacs.kt.SourcePath.save(SourcePath.kt:275)
at org.javacs.kt.SourcePath.saveAllFiles(SourcePath.kt:287)
at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:270)
at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:268)
at org.javacs.kt.util.Debouncer.submitImmediately$lambda-1(Debouncer.kt:27)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalStateException: Error type encountered: [ERROR : Test] (UnresolvedType).
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$typeMappingConfiguration$1.processErrorType(KotlinTypeMapper.kt:128)
at org.jetbrains.kotlin.load.kotlin.DescriptorBasedTypeSignatureMappingKt.mapType(descriptorBasedTypeSignatureMapping.kt:83)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType(KotlinTypeMapper.kt:284)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType$default(KotlinTypeMapper.kt:275)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType(KotlinTypeMapper.kt)
at org.jetbrains.kotlin.codegen.AnnotationCodegen.genAnnotation(AnnotationCodegen.java:386)
at org.jetbrains.kotlin.codegen.AnnotationCodegen.genAnnotations(AnnotationCodegen.java:154)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodAnnotationsIfRequired(FunctionCodegen.java:309)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:226)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:166)
at org.jetbrains.kotlin.codegen.FunctionCodegen.gen(FunctionCodegen.java:137)
at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:200)
... 23 more
org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate expression: KtCallExpression
File being compiled: (14,5) in //Users/marie/Programming/Kotlin/langserver413/app/src/main/kotlin/langserver413/App.kt
The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt.getResolvedCallWithAssert(callUtil.kt:209)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:356)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:481)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1362)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1307)
at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:56)
at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:22)
at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.java:79)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:332)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:481)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:438)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.returnExpression(ExpressionCodegen.java:1866)
at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy$FunctionDefault.doGenerateBody(FunctionGenerationStrategy.java:64)
at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy$CodegenBased.generateBody(FunctionGenerationStrategy.java:86)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:646)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:484)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:261)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:166)
at org.jetbrains.kotlin.codegen.FunctionCodegen.gen(FunctionCodegen.java:137)
at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:200)
at org.jetbrains.kotlin.codegen.PackagePartCodegen.generateBody(PackagePartCodegen.java:98)
at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:132)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:149)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:70)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generatePackage(CodegenFactory.kt:77)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generateModule(CodegenFactory.kt:62)
at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
at org.javacs.kt.compiler.Compiler.generateCode(Compiler.kt:572)
at org.javacs.kt.SourcePath.save(SourcePath.kt:275)
at org.javacs.kt.SourcePath.saveAllFiles(SourcePath.kt:287)
at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:270)
at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:268)
at org.javacs.kt.util.Debouncer.submitImmediately$lambda-1(Debouncer.kt:27)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.AssertionError: No resolved call for 'println(App().greeting)' at (14,5) in //Users/marie/Programming/Kotlin/langserver413/app/src/main/kotlin/langserver413/App.kt
at org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt.getResolvedCallWithAssert(callUtil.kt:209)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:2459)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:125)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitKtElement(CodegenStatementVisitor.java:31)
at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitKtElement(CodegenStatementVisitor.java:22)
at org.jetbrains.kotlin.psi.KtVisitor.visitExpression(KtVisitor.java:182)
at org.jetbrains.kotlin.psi.KtVisitor.visitReferenceExpression(KtVisitor.java:198)
at org.jetbrains.kotlin.psi.KtVisitor.visitCallExpression(KtVisitor.java:278)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:332)
... 37 more
Very unsure on what causes this 😱 One guess I have for now is a bug in the compiler APIs we use or something, and them having trouble reading the newer stdlib jars (???). Maybe there are some issues with versions of Kotlin deviating? (lang server Kotlin version and Jar version). Several issues have lately reported similar issues with stdlib symbols, notably #409.
If there are any bugs in the compiler APIs we use, then a version upgrade (#414) might help.
EDIT: Tried adding a simple for-loop after seeing this issue: https://github.com/fwcd/vscode-kotlin/issues/118. Seems like we get the same error message as in that issue ("... compiled with an incompatible version of Kotlin"). This causes me to believe that the upgrade of the language server to Kotlin 1.8.0 like #414 is doing will fix the issue. Sadly it causes a new issue I discuss in that PR.
Oh, I also saw a "... compiled with an incompatible version of Kotlin"-error while having the build.gradle.kts file open, so it sounds perfectly plausible that #414 would fix it. Thank you for looking into this!
I'm still getting this issue after installing the newest version of the kotlin language server via brew. I'm using VSCode and the associated kotlin VSCode plugin. This occurs after opening a default project made with gradle init
in vscode.
I have the following installed:
kotlinc-jvm 1.8.10 (JRE 19.0.2+7-FR)
openjdk 19.0.2 2023-01-17
OpenJDK Runtime Environment Corretto-19.0.2.7.1 (build 19.0.2+7-FR)
OpenJDK 64-Bit Server VM Corretto-19.0.2.7.1 (build 19.0.2+7-FR, mixed mode, sharing)
Kotlin Language Server: Version 1.3.1
------------------------------------------------------------
Gradle 8.0.1
------------------------------------------------------------
Build time: 2023-02-17 20:09:48 UTC Revision: 68959bf76cef4d28c678f2e2085ee84e8647b77a
Kotlin: 1.8.10 Groovy: 3.0.13 Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021 JVM: 19.0.2 (Amazon.com Inc. 19.0.2+7-FR) OS: Mac OS X 13.0 x86_64
`build.gradle.kts` has the following under `plugins`:
```kts
plugins {
// Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
id("org.jetbrains.kotlin.jvm") version "1.8.10"
// Apply the application plugin to add support for building a CLI application in Java.
application
}
Any help would be appreciated. Would prefer not to use Intellij for Kotlin development.
I'm still getting this issue after installing the newest version of the kotlin language server via brew.
That is expected, as that version is almost a year old, and won't contain any of the recent fixes from PRs. We should probably release a new version soon, and we are working on PRs to automate the process and make it easier for us.
If you want bleeding edge, I suggest building from main and trying that one. It should contain a fix for Kotlin 1.8.10. (this is what I do for almost all language servers I use)
When using
kotlin("jvm") version "1.8.0"
in Gradle, as suggested in https://kotlinlang.org/docs/get-started-with-jvm-gradle-project.html, the kotlin language server fails to find the standard library. This causesUnresolved reference: println kotlin(UNRESOLVED_REFERENCE)
on a Hello-World program to be show as an error in the editor of choice. The same program builds just fine using Gradle from the command line, so it seems to be limited to the language server. However, it is not clear whether this is the fault of the language server or the kotlin distribution.The issue is not present with previous version numbers.