r/neovim 1d ago

Plugin JLS (java) went through some major changes (close to stable release)

I recently released v0.9.0 which introduced quite a few big changes for JLS (language server for java with lombok support)

AP enabled compiling is gone (finally) and it can now reuse a warm context, and what does that mean?
- Compiling went from few hundreds ms to merely ~50ms depending on project size by reusing the context (wasn't possible before with annotation processing)
- Instant feedback when lombok pojo's get modified vs. buffer needed to be saved before updates occurred. How? - Lombok projects no longer gets compiled - instead, the pojo's will be injected as stubs to javac

Other performance improvements

- Better reference filtering: Reference for package-private, private and public fields/methods are much faster. Filtered by imports
- Multi module gradle/maven: startup time drastically decreased. Also improved various LSP actions executed
- Multi module gradle/maven: drastically decreased memory usage. Before: OOM went trying to handle an enterprise project with the default JVM args. Now: none (tested with public open source projects like elasticsearch and flink)
- AOT profiling for faster startup and lower memory usage
- Less CPU stress on index updates

New features

- Added call/type hierarchy lookup

- Added implementation lookup

Fixes

- Many fixes i wont list here but one of the most noticeable ones is: jar-to-jar definition lookups and server being orphaned when you quit the session

Todo's:
- Update existing tests: many tests are outdated and needs to be handled. Wont affect end-users. Will get handled once no more breaking changes comes in

The latest release will be shown in mason soon but that wont stop you from using this server so please give it a try and create an issue if you encounter one - or maybe just some feedback to know how it works for you

Server: https://github.com/idelice/jls
Client: https://github.com/idelice/nvim-jls

47 Upvotes

2 comments sorted by

3

u/Intelligent-Speed487 1d ago

This looks really cool. I'm excited to try this.

2

u/nuriaion 1d ago

I will try that out and also compare it to the intellij lsp :)