eclipse.jdt.ls
eclipse.jdt.ls copied to clipboard
```java.lang.StackOverflowError``` on textDocument/completion
Trying to invoke textDocument/completion request on https://github.com/mikemybytes/junit5-formatted-source, file junit5-formatted-source/src/main/java/com/mikemybytes/junit5/formatted/FormattedSourceData.java after making several changes through textDocument/didChange raises a java.lang.StackOverflowError, and crashes, displaying "Internal server error -32603" to the client.
I am trying to investigate what might be the cause here, and will attempt with a higher -Xss. The machine resources shouldn't have been a problem.
My jdt.ls launch command:
cmd = f"export syntaxserver=false\ncd {repository_root_path}\n" + ' '.join([
jre_path,
'--add-modules=ALL-SYSTEM',
'--add-opens', 'java.base/java.util=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.base/sun.nio.fs=ALL-UNNAMED',
'-Declipse.application=org.eclipse.jdt.ls.core.id1',
'-Dosgi.bundles.defaultStartLevel=4',
'-Declipse.product=org.eclipse.jdt.ls.core.product',
'-Djava.import.generatesMetadataFilesAtProjectRoot=false',
'-Dfile.encoding=utf8',
'-noverify',
'-XX:+UseParallelGC', '-XX:GCTimeRatio=4', '-XX:AdaptiveSizePolicyWeight=90',
'-Dsun.zip.disableMemoryMapping=true',
'-Djava.lsp.joinOnCompletion=true',
'-Xmx3G', '-Xms100m', '-Xlog:disable',
'-Dlog.level=ALL',
f"-javaagent:{lombok_jar_path}",
f"-Djdt.core.sharedIndexLocation={shared_cache_location}",
'-jar', jdtls_launcher_jar,
'-configuration', jdtls_config_path,
'-data', data_dir
])
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:67)
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.request(GenericEndpoint.java:120)
at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.handleRequest(RemoteEndpoint.java:261)
at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.consume(RemoteEndpoint.java:190)
at org.eclipse.jdt.ls.core.internal.ParentProcessWatcher.lambda$1(ParentProcessWatcher.java:144)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:194)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:94)
at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:65)
... 12 more
Caused by: java.util.concurrent.CompletionException: java.lang.StackOverflowError
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source)
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.StackOverflowError
at org.eclipse.jdt.internal.core.JavaModelCache.getInfo(JavaModelCache.java:131)
at org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:2164)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:326)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314)
at org.eclipse.jdt.internal.core.JavaProject.getModuleDescription(JavaProject.java:3917)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:355)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
...
"at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)"x1018
...
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
"at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)"x1018
...
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findPackagesFromRequires(SearchableEnvironment.java:367)
Some bad recursive call happens. Which position did you trigger the completion in that file?
I tried changing to -Xss50m
, and receive the same stack overflow. So I do agree that it must be a bad recursion
I have shared the log trace with you. In the log trace, I have logged all the steps involved in reaching this state.
After launching the server, I am able to go over several iterations of textDocument/didChange
and textDocument/completion
and on a particular invocation, I receive the above stack overflow