eclipse / lsp4jakarta

Language Server for Jakarta EE

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Various codeAction failures in VS Code

TrevCraw opened this issue · comments

Not sure if the root issue is with the VS Code client or with how LSP4Jakarta is handling these requests. Related LT VS Code issue: OpenLiberty/liberty-tools-vscode#247.

First step may be to test to see if this occurs in other IDEs (Eclipse, IntelliJ)

May 07, 2023 5:57:19 P.M. org.eclipse.lsp4jakarta.commons.JakartaEESnippetRegistryLoader load
INFO: Loading snippets into registry...
May 07, 2023 5:57:19 P.M. org.eclipse.lsp4jakarta.JakartaLanguageServer initialize
INFO: Initializing Jakarta EE server
[Error - 6:00:11 PM] Request textDocument/codeAction failed.
  Message: The request (id: 10, method: 'textDocument/codeAction') has been cancelled
  Code: -32800 
[Error - 6:05:00 PM] Request textDocument/codeAction failed.
  Message: The request (id: 108, method: 'textDocument/codeAction') has been cancelled
  Code: -32800 
[Error - 6:05:11 PM] Request textDocument/codeAction failed.
  Message: The request (id: 130, method: 'textDocument/codeAction') has been cancelled
  Code: -32800 
[Error - 6:07:21 PM] Request textDocument/codeAction failed.
  Message: The request (id: 258, method: 'textDocument/codeAction') has been cancelled
  Code: -32800 
[Error - 6:15:15 PM] Request textDocument/codeAction failed.
  Message: Request jakarta/java/codeaction failed with message: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
  Code: -32603
[Error - 9:53:02 AM] Request textDocument/codeAction failed.

  Message: Request jakarta/java/codeaction failed with message: java.lang.ClassCastException: class org.eclipse.jdt.core.dom.TypeDeclaration cannot be cast to class org.eclipse.jdt.core.dom.MethodDeclaration (org.eclipse.jdt.core.dom.TypeDeclaration and org.eclipse.jdt.core.dom.MethodDeclaration are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @25107054)

  Code: -32603
May 11, 2023 9:59:00 A.M. org.eclipse.lsp4j.jsonrpc.RemoteEndpoint handleCancellation

WARNING: Unmatched cancel notification for request id 829
```  

Also posted in OpenLiberty/liberty-tools-vscode#247

For this error in the "Language Support for Jakarta EE" log....

[Error - 6:15:15 PM] Request textDocument/codeAction failed.
  Message: Request jakarta/java/codeaction failed with message: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
  Code: -32603

...There is a corresponding exception in the "Language Support for Java" log. On initial glance, it looks like there are multiple issues here, but definitely looks like an NPE is occurring due to the CodeActionHandler in the org.eclipse.lsp4jakarta.jdt component.

[Error - 6:20:09 PM] May 15, 2023, 6:20:09 p.m. BadLocationException
null
org.eclipse.jface.text.BadLocationException
	at org.eclipse.jface.text.TreeLineTracker.fail(TreeLineTracker.java:1054)
	at org.eclipse.jface.text.TreeLineTracker.offsetByLine(TreeLineTracker.java:335)
	at org.eclipse.jface.text.TreeLineTracker.getLineOffset(TreeLineTracker.java:1111)
	at org.eclipse.jface.text.AbstractLineTracker.getLineOffset(AbstractLineTracker.java:252)
	at org.eclipse.jface.text.AbstractDocument.getLineOffset(AbstractDocument.java:877)
	at org.eclipse.core.internal.filebuffers.SynchronizableDocument.getLineOffset(SynchronizableDocument.java:323)
	at org.eclipse.jdt.ls.core.internal.handlers.JsonRpcHelpers.toOffset(JsonRpcHelpers.java:85)
	at org.eclipse.jdt.ls.core.internal.handlers.JsonRpcHelpers.toOffset(JsonRpcHelpers.java:69)
	at org.eclipse.jdt.ls.core.internal.corrections.DiagnosticsHelper.getEndOffset(DiagnosticsHelper.java:38)
	at org.eclipse.jdt.ls.core.internal.handlers.CodeActionHandler.getProblemLocationCores(CodeActionHandler.java:304)
	at org.eclipse.jdt.ls.core.internal.handlers.CodeActionHandler.getCodeActionCommands(CodeActionHandler.java:138)
	at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$13(JDTLanguageServer.java:720)
	at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

[Error - 10:50:10 AM] May 16, 2023, 10:50:10 a.m. Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ls.core".
java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at org.eclipse.lsp4jakarta.jdt.internal.core.ls.JakartaDelegateCommandHandlerForJava.executeCommand(JakartaDelegateCommandHandlerForJava.java:52)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220)
	at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:585)
	at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
	at java.base/java.util.ArrayList.addAll(Unknown Source)
	at org.eclipse.lsp4jakarta.jdt.codeAction.CodeActionHandler.codeAction(CodeActionHandler.java:143)
	at org.eclipse.lsp4jakarta.jdt.core.JDTServicesManager.getCodeAction(JDTServicesManager.java:185)
	at org.eclipse.lsp4jakarta.jdt.internal.core.ls.JakartaDelegateCommandHandlerForJava.lambda$2(JakartaDelegateCommandHandlerForJava.java:143)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.helpAsyncBlocker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.helpAsyncBlocker(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.waitingGet(Unknown Source)
	... 14 more

[Error - 10:50:10 AM] May 16, 2023, 10:50:10 a.m. Error in calling delegate command handler
java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at org.eclipse.lsp4jakarta.jdt.internal.core.ls.JakartaDelegateCommandHandlerForJava.executeCommand(JakartaDelegateCommandHandlerForJava.java:52)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220)
	at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:585)
	at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
	at java.base/java.util.ArrayList.addAll(Unknown Source)
	at org.eclipse.lsp4jakarta.jdt.codeAction.CodeActionHandler.codeAction(CodeActionHandler.java:143)
	at org.eclipse.lsp4jakarta.jdt.core.JDTServicesManager.getCodeAction(JDTServicesManager.java:185)
	at org.eclipse.lsp4jakarta.jdt.internal.core.ls.JakartaDelegateCommandHandlerForJava.lambda$2(JakartaDelegateCommandHandlerForJava.java:143)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.helpAsyncBlocker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.helpAsyncBlocker(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.waitingGet(Unknown Source)
	... 14 more

After the changes in #450, I am no longer seeing the following error:

[Error - 6:15:15 PM] Request textDocument/codeAction failed.
  Message: Request jakarta/java/codeaction failed with message: java.lang.NullPointerException: Cannot invoke "java.util.Collection.toArray()" because "<parameter1>" is null
  Code: -32603

However, I still see both of the below errors occur:

[Error - 2:48:56 PM] Request textDocument/codeAction failed.
  Message: The request (id: 57, method: 'textDocument/codeAction') has been cancelled
  Code: -32800
May 17, 2023 2:53:39 P.M. org.eclipse.lsp4j.jsonrpc.RemoteEndpoint handleCancellation
WARNING: Unmatched cancel notification for request id 203

The root cause of the codeAction failed error due to cancellation was in the vscode-languageclient dependency - a fix was only required for Liberty Tools for VS Code: OpenLiberty/liberty-tools-vscode#255

[Error - 2:48:56 PM] Request textDocument/codeAction failed.
  Message: The request (id: 57, method: 'textDocument/codeAction') has been cancelled
  Code: -32800

The unmatched cancel notification warning does not appear to be severe and is most likely also caused by something on the VS Code side. A new issue will be opened in the Liberty Tools for VS Code repo to address. (OpenLiberty/liberty-tools-vscode#256)

May 17, 2023 2:53:39 P.M. org.eclipse.lsp4j.jsonrpc.RemoteEndpoint handleCancellation
WARNING: Unmatched cancel notification for request id 203

The root cause of the ClassCastException appears to be on the Jakarta side. A new issue will be opened in this repo to address. (#455)

[Error - 9:53:02 AM] Request textDocument/codeAction failed.

  Message: Request jakarta/java/codeaction failed with message: java.lang.ClassCastException: class org.eclipse.jdt.core.dom.TypeDeclaration cannot be cast to class org.eclipse.jdt.core.dom.MethodDeclaration (org.eclipse.jdt.core.dom.TypeDeclaration and org.eclipse.jdt.core.dom.MethodDeclaration are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @25107054)

  Code: -32603