eclipse.jdt.ls icon indicating copy to clipboard operation
eclipse.jdt.ls copied to clipboard

```java.lang.StackOverflowError``` on textDocument/completion

Open LakshyAAAgrawal opened this issue 1 year ago • 3 comments

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)

LakshyAAAgrawal avatar May 10 '23 23:05 LakshyAAAgrawal

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

jdneo avatar May 11 '23 00:05 jdneo

I tried changing to -Xss50m, and receive the same stack overflow. So I do agree that it must be a bad recursion

LakshyAAAgrawal avatar May 11 '23 04:05 LakshyAAAgrawal

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

LakshyAAAgrawal avatar May 11 '23 05:05 LakshyAAAgrawal