vscode-java icon indicating copy to clipboard operation
vscode-java copied to clipboard

WIP: enable javac-based compilation

Open fbricon opened this issue 1 year ago • 1 comments

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":

Screenshot 2024-07-10 at 13 35 03

fbricon avatar Apr 03 '24 11:04 fbricon

Daily vscode-javac builds are available from https://github.com/fbricon/vscode-java/releases/tag/javac-prototype

fbricon avatar May 01 '24 23:05 fbricon

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 avatar Nov 05 '24 19:11 viswatejan

@viswatejan Could you attach a project example reproducing the error?

snjeza avatar Nov 05 '24 20:11 snjeza

@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.

viswatejan avatar Nov 05 '24 22:11 viswatejan