Skip to content

bug: Formatter fails when lombok imports are present #413

@vchernetskyi993

Description

@vchernetskyi993

Did you check docs and existing issues?

  • I have read all the plugin docs
  • I have searched the existing issues
  • I have searched the existing issues of plugins related to this issue

Neovim version (nvim -v)

v0.12.0-dev

Operating system/version

Ubuntu 24.04.2 LTS

Describe the bug

Trying to format some of the Java files fails with errors like:

[ERROR][2025-08-10 16:27:23] ...p/_transport.lua:36	"rpc"	"java"	"stderr"	"Aug 10, 2025 4:27:23 PM org.eclipse.lsp4j.jsonrpc.RemoteEndpoint fallbackResponseError
SEVERE: Internal error: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 64
java.util.concurrent.CompletionException: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 64
\tat java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
\tat java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
\tat java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:649)
\tat java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483)
\tat java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
\tat java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
\tat java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
\tat java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
\tat java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 64
\tat java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
\tat java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
\tat java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
\tat java.base/java.util.Objects.checkIndex(Objects.java:385)
\tat java.base/java.util.ArrayList.get(ArrayList.java:427)
\tat org.eclipse.jdt.internal.formatter.TokenManager.get(TokenManager.java:78)
\tat org.eclipse.jdt.internal.formatter.TokenManager.findIndex(TokenManager.java:172)
\tat org.eclipse.jdt.internal.formatter.TokenManager.lastIndexIn(TokenManager.java:205)
\tat org.eclipse.jdt.internal.formatter.LineBreaksPreparator.handleBracedCode(LineBreaksPreparator.java:664)
\tat org.eclipse.jdt.internal.formatter.LineBreaksPreparator.visit(LineBreaksPreparator.java:229)
\tat org.eclipse.jdt.core.dom.MethodDeclaration.accept0(MethodDeclaration.java:652)
\tat org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3312)
\tat org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:3383)
\tat org.eclipse.jdt.core.dom.TypeDeclaration.accept0(TypeDeclaration.java:497)
\tat org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3312)
\tat org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:3383)
\tat org.eclipse.jdt.core.dom.CompilationUnit.accept0(CompilationUnit.java:257)
\tat org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3312)
\tat org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareLineBreaks(DefaultCodeFormatter.java:418)
\tat org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareFormattedCode(DefaultCodeFormatter.java:229)
\tat org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:185)
\tat org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:169)
\tat org.eclipse.jdt.ls.core.internal.handlers.FormatterHandler.format(FormatterHandler.java:120)
\tat org.eclipse.jdt.ls.core.internal.handlers.FormatterHandler.format(FormatterHandler.java:107)
\tat org.eclipse.jdt.ls.core.internal.handlers.FormatterHandler.formatting(FormatterHandler.java:78)
\tat org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$19(JDTLanguageServer.java:840)
\tat org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
\tat java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
\t... 6 more"

Removing/commenting parts of the code I've figured out that if I delete/comment lombok imports formatting starts working again.

Steps To Reproduce

I've created minimum reproducible example, using Spring Initializr: DemoApplication.java.

With import lombok.AllArgsConstructor; trying to format this file produces error above for me. When I comment this line - formatting works again.

Expected Behavior

Java files are formatted without an error. The same file formatting works in VS Code, so I assume this is not an issue with a language server itself (maybe an issue with server version though).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions