WIP: enable javac-based compilation
Requires building eclipse.jdt.ls against dom-with-javac branch of the JDT fork Requires running with Java 23 at the moment.
First build the server jars with:
npm run build-server
then generate the vsix with:
npx @vscode/vsce package
Enable with "java.jdt.ls.javac.enabled":"on" in vscode settings
You can enabled the more experimental DOM-based completion with "java.completion.engine": "dom":
Daily vscode-javac builds are available from https://github.com/fbricon/vscode-java/releases/tag/javac-prototype
I wanted to try Javac and DOM but I was getting the following error.
!ENTRY org.eclipse.jdt.core 4 0 2024-11-05 13:28:32.326
!MESSAGE Internal failure while parsing or converting AST for unit /helloworld-service/src/main/java/com/hello/HelloWorld.java
!ENTRY org.eclipse.jdt.core 4 0 2024-11-05 13:28:32.333
!MESSAGE startPos = -1 and length is 3.
This breaks the rule that length must be 0 if startPosition is negative. Affected Node:
class org.eclipse.jdt.core.dom.SimpleName: com
!STACK 0
java.lang.IllegalArgumentException: startPos = -1 and length is 3.
This breaks the rule that length must be 0 if startPosition is negative. Affected Node:
class org.eclipse.jdt.core.dom.SimpleName: com
at lombok.eclipse.agent.PatchDiagnostics.setSourceRangeCheck(PatchDiagnostics.java:43)
at org.eclipse.jdt.core.dom.ASTNode.setSourceRange(ASTNode.java)
at org.eclipse.jdt.core.dom.JavacConverter.convertToType(JavacConverter.java:2880)
at org.eclipse.jdt.core.dom.JavacConverter.convertToType(JavacConverter.java:2898)
at org.eclipse.jdt.core.dom.JavacConverter.convertToType(JavacConverter.java:2898)
at org.eclipse.jdt.core.dom.JavacConverter.convertToType(JavacConverter.java:2898)
at org.eclipse.jdt.core.dom.JavacConverter.convertToType(JavacConverter.java:2898)
at org.eclipse.jdt.core.dom.JavacConverter.convertStatement(JavacConverter.java:2373)
at org.eclipse.jdt.core.dom.JavacConverter.convertBlock(JavacConverter.java:2716)
at org.eclipse.jdt.core.dom.JavacConverter.convertMethodDecl(JavacConverter.java:995)
at org.eclipse.jdt.core.dom.JavacConverter.convertBodyDeclaration(JavacConverter.java:773)
at org.eclipse.jdt.core.dom.JavacConverter.convertClassDecl(JavacConverter.java:625)
at org.eclipse.jdt.core.dom.JavacConverter.convertClassDecl(JavacConverter.java:545)
at org.eclipse.jdt.core.dom.JavacConverter.convertBodyDeclaration(JavacConverter.java:776)
at org.eclipse.jdt.core.dom.JavacConverter.lambda$populateCompilationUnit$2(JavacConverter.java:196)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:636)
at org.eclipse.jdt.core.dom.JavacConverter.populateCompilationUnit(JavacConverter.java:198)
at org.eclipse.jdt.core.dom.JavacCompilationUnitResolver.parse(JavacCompilationUnitResolver.java:722)
at org.eclipse.jdt.core.dom.JavacCompilationUnitResolver.toCompilationUnit(JavacCompilationUnitResolver.java:537)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateASTCached(ASTParser.java:1299)
at org.eclipse.jdt.core.dom.ASTParser.lambda$1(ASTParser.java:1178)
at org.eclipse.jdt.internal.core.JavaModelManager.cacheZipFiles(JavaModelManager.java:5692)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1178)
at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:918)
at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:184)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:246)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:569)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:292)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:278)
at org.eclipse.jdt.internal.core.Openable.getBuffer(Openable.java:276)
at org.eclipse.jdt.ls.core.internal.JDTUtils.findElementsAtSelection(JDTUtils.java:1059)
at org.eclipse.jdt.ls.core.internal.JDTUtils.findElementAtSelection(JDTUtils.java:1045)
at org.eclipse.jdt.ls.core.internal.handlers.NavigateToDefinitionHandler.computeDefinitionNavigation(NavigateToDefinitionHandler.java:83)
at org.eclipse.jdt.ls.core.internal.handlers.NavigateToDefinitionHandler.definition(NavigateToDefinitionHandler.java:73)
at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$7(JDTLanguageServer.java:681)
at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:690)
at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:527)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:507)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1458)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2034)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:189)
Is this feature available to try or do we need to wait for some future vscode-java releases with right eclipse JDT core?
@viswatejan Could you attach a project example reproducing the error?
@snjeza , I could not reproduce the same issue with a sample project but I see some other issues related to the autocompletion with the eclipse lombok agent.
Delomboking and removing the Lombok dependency in my project loaded the project fine in the Java Project Explorer.