Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

C interoperability support? #529

Open
TeamPuzel opened this issue Dec 2, 2023 · 3 comments
Open

C interoperability support? #529

TeamPuzel opened this issue Dec 2, 2023 · 3 comments

Comments

@TeamPuzel
Copy link

TeamPuzel commented Dec 2, 2023

Hi, I'm not getting completion for a lot of imports even though the code compiles and works.

all four lines get highlighted in red:

import cnames.structs.SDL_Window
import cnames.structs.SDL_Event
import kotlinx.cinterop.*
import sdl.*

Is this expected or do I need to configure something?

I wanted to try the language and I find writing a 2d software renderer to be an interesting way to learn new languages.

I could just turn off the extension but code completion would be helpful as I'm not yet entirely sure how kotlin interacts with pointers etc.

@themkat
Copy link
Collaborator

themkat commented Dec 3, 2023

The language server sadly don't have good support for Kotlin Native, or anything other than Kotlin JVM to be honest 🙁 I have not experimented much with Kotlin Native myself, but think that it should be possible to get completion at least (based on my small experience looking into Kotlin Multiplatform projects). Hopefully we can improve the support a bit.

A few question that might help me (or someone else) look into this issue 🙂

  1. Could you create a very small example project that replicates the issue? Just so we have something to experiment with. This can be a zip-file, a github repo or something else you are comfortable sending.
  2. What does the language server logs look like? If you could share them, that would be awesome!
  3. If you have any system info to share, like your JVM type (Temurin, Coretto, something else?) and Java version? Maybe also some minor system specs.

@TeamPuzel
Copy link
Author

Okay, here's the code:

code.zip

It creates a window for a second then closes (although I don't know how to use pointers and structs from kotlin at the moment so the window is never moved to front)

I can't test this on Windows or Linux so if you're not using macOS you will have to change the build.gradle.kts to build for something else.

Logs
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Dec 03, 2023 2:33:21 PM org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint lambda$recursiveFindRpcMethods$2
SEVERE: A delegate object is null, jsonrpc methods of 'public default org.eclipse.lsp4j.services.NotebookDocumentService org.eclipse.lsp4j.services.LanguageServer.getNotebookDocumentService()' are ignored
[Info  - 2:33:21 PM] main      Adding script definitions [null]
[Info  - 2:33:21 PM] main      Kotlin Language Server: Version 1.3.7
[Error - 2:33:21 PM] main      A delegate object is null, jsonrpc methods of 'public default org.eclipse.lsp4j.services.NotebookDocumentService org.eclipse.lsp4j.services.LanguageServer.getNotebookDocumentService()' are ignored
[Info  - 2:33:21 PM] main      Connected to client
[Info  - 2:33:21 PM] async0    Database has the correct version 3 and will be used as-is
[Info  - 2:33:21 PM] async0    Adding workspace folder GameTest
[Info  - 2:33:21 PM] async0    Adding .../GameTest/build.gradle.kts, .../kotlin/main.kt under /Users/teampuzel/Temp/GameTest to source path
[Info  - 2:33:21 PM] async0    Searching for dependencies and Java sources in workspace root /Users/teampuzel/Temp/GameTest
[Info  - 2:33:21 PM] async0    Classpath has not changed. Fetching from cache
[Info  - 2:33:21 PM] async0    Adding [/opt/homebrew/Cellar/kotlin/1.9.21/libexec/lib/kotlin-stdlib.jar] to class path
[Info  - 2:33:21 PM] async0    Update build script path
[Info  - 2:33:21 PM] async0    Build script classpath has not changed. Fetching from cache
[Info  - 2:33:21 PM] async0    Adding 748 files to build script class path
[Info  - 2:33:21 PM] async0    Reinstantiating compiler
[Info  - 2:33:21 PM] async0    Adding script definitions [null]
[Info  - 2:33:21 PM] async0    Configuring Kotlin DSL script templates...
[Info  - 2:33:21 PM] async0    Adding script definitions [null, KotlinInitScript, KotlinSettingsScript, KotlinBuildScript]
[Info  - 2:33:22 PM] client    Updated configuration: {"kotlin":{"java":{"home":"","opts":""},"languageServer":{"enabled":true,"path":"","transport":"stdio","port":0,"debugAttach":{"enabled":false,"port":5005,"autoSuspend":false}},"trace":{"server":"off"},"compiler":{"jvm":{"target":"default"}},"linting":{"debounceTime":250},"indexing":{"enabled":true},"completion":{"snippets":{"enabled":true}},"debugAdapter":{"enabled":true,"path":""},"debounceTime":250,"externalSources":{"useKlsScheme":true,"autoConvertToKotlin":true},"snippetsEnabled":true}}
[Info  - 2:33:24 PM] async3    Find symbols in .../kotlin/main.kt
[Info  - 2:33:24 PM] async3    Finished in 2 ms
[Info  - 2:33:24 PM] async3    Ranged semantic tokens in .../kotlin/main.kt
[Info  - 2:33:24 PM] async3    Found 10 tokens
[Info  - 2:33:24 PM] async3    Finished in 5 ms
[Info  - 2:33:24 PM] async3    Full semantic tokens in .../kotlin/main.kt
[Info  - 2:33:24 PM] async3    Found 15 tokens
[Info  - 2:33:24 PM] async3    Finished in 3 ms
[Info  - 2:33:24 PM] async4    Updating symbol index...
[Info  - 2:33:24 PM] async4    Updated symbol index in 8 ms! (1 symbol(s))
[Info  - 2:33:24 PM] async4    Updating symbol index...
[Info  - 2:33:24 PM] async4    Updated symbol index in 0 ms! (2 symbol(s))
[Info  - 2:33:24 PM] async4    Updating symbol index...
[Info  - 2:33:24 PM] async4    Updated symbol index in 0 ms! (3 symbol(s))
[Error - 2:33:24 PM] org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate function main
File being compiled: (7,1) in //Users/teampuzel/Temp/GameTest/src/nativeMain/kotlin/main.kt
The root cause java.lang.IllegalStateException was thrown at: org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$typeMappingConfiguration$1.processErrorType(KotlinTypeMapper.kt:124)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:206)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.PackagePartCodegen.generateBody(PackagePartCodegen.java:98)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:132)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:167)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:70)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generatePackage(CodegenFactory.kt:143)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.invokeLowerings(CodegenFactory.kt:122)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.CodegenFactory.generateModule(CodegenFactory.kt:44)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:45)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:54)
[Error - 2:33:24 PM] 	at org.javacs.kt.compiler.Compiler.generateCode(Compiler.kt:585)
[Error - 2:33:24 PM] 	at org.javacs.kt.SourcePath.save(SourcePath.kt:277)
[Error - 2:33:24 PM] 	at org.javacs.kt.SourcePath.saveAllFiles(SourcePath.kt:289)
[Error - 2:33:24 PM] 	at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:270)
[Error - 2:33:24 PM] 	at org.javacs.kt.KotlinTextDocumentService$lintAll$1.invoke(KotlinTextDocumentService.kt:268)
[Error - 2:33:24 PM] 	at org.javacs.kt.util.Debouncer.submitImmediately$lambda$1(Debouncer.kt:27)
[Error - 2:33:24 PM] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
[Error - 2:33:24 PM] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[Error - 2:33:24 PM] 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
[Error - 2:33:24 PM] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[Error - 2:33:24 PM] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[Error - 2:33:24 PM] 	at java.base/java.lang.Thread.run(Thread.java:1589)
[Error - 2:33:24 PM] Caused by: java.lang.IllegalStateException: Error type encountered: [Error type: Unresolved type for kotlinx.cinterop.ExperimentalForeignApi] (ErrorType).
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$typeMappingConfiguration$1.processErrorType(KotlinTypeMapper.kt:124)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.load.kotlin.DescriptorBasedTypeSignatureMappingKt.mapType(descriptorBasedTypeSignatureMapping.kt:83)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType(KotlinTypeMapper.kt:276)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType$default(KotlinTypeMapper.kt:267)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapType(KotlinTypeMapper.kt)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.AnnotationCodegen.genAnnotation(AnnotationCodegen.java:385)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.AnnotationCodegen.genAnnotations(AnnotationCodegen.java:153)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodAnnotationsIfRequired(FunctionCodegen.java:309)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:226)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:166)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.FunctionCodegen.gen(FunctionCodegen.java:137)
[Error - 2:33:24 PM] 	at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:200)
[Error - 2:33:24 PM] 	... 21 more
[Info  - 2:33:24 PM] debounce0 Linting .../kotlin/main.kt
[Info  - 2:33:24 PM] async4    Updating full symbol index...
[Info  - 2:33:24 PM] debounce0 Reported 17 diagnostics in .../kotlin/main.kt
[Info  - 2:33:24 PM] async3    Full semantic tokens in .../kotlin/main.kt
[Info  - 2:33:24 PM] async3    Found 30 tokens
[Info  - 2:33:24 PM] async3    Finished in 2 ms

System specs:

M2 Max 32gb
macOS 14.2 Sonoma (developer beta 23C5055b)

Java (output of java --version):

openjdk 19.0.2 2023-01-17
OpenJDK Runtime Environment Zulu19.32+13-CA (build 19.0.2+7)
OpenJDK 64-Bit Server VM Zulu19.32+13-CA (build 19.0.2+7, mixed mode, sharing)

@fwcd
Copy link
Owner

fwcd commented Jan 15, 2024

Kotlin/Native isn't really supported yet (see #11), but if you wish to use the language server anyway, you can now use

{
  "kotlin.diagnostics.enabled": false
}

in your settings to turn off the errors while still getting basic code completion for standard library functions etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants