redhat-developer / redhat-developer/vscode-java
Extension hangs with org.eclipse.jface.text.BadLocationException
还没有人认领这个 Issue。
- 主要语言
- TypeScript
- 星标
- 2.3k
- 派生
- 546
- 平均合并
- 20 小时 1 分钟
- 30 天内合并 PR
- 11
描述
Pretty often when I am refactoring my code and there (one or two files contain pretty broken code) - extension hangs and all it's features stop working.
Restarting VSCode fixes the issue.
My project is super simple (5 classes), has rudimentary pom.xml.
Output window for Language Support for Java shows this error:
[Error - 9:07:53 PM] Aug 1, 2018 9:07:02 PM
null
org.eclipse.jface.text.BadLocationException
at org.eclipse.jface.text.TreeLineTracker.fail(TreeLineTracker.java:1051)
at org.eclipse.jface.text.TreeLineTracker.lineByOffset(TreeLineTracker.java:265)
at org.eclipse.jface.text.TreeLineTracker.getLineNumberOfOffset(TreeLineTracker.java:1119)
at org.eclipse.jface.text.AbstractLineTracker.getLineNumberOfOffset(AbstractLineTracker.java:151)
at org.eclipse.jface.text.AbstractDocument.getLineOfOffset(AbstractDocument.java:868)
at org.eclipse.core.internal.filebuffers.SynchronizableDocument.getLineOfOffset(SynchronizableDocument.java:331)
at org.eclipse.jdt.ls.core.internal.handlers.JsonRpcHelpers.toLine(JsonRpcHelpers.java:60)
at org.eclipse.jdt.ls.core.internal.JDTUtils.toRange(JDTUtils.java:466)
at org.eclipse.jdt.ls.core.internal.JDTUtils.toLocation(JDTUtils.java:380)
at org.eclipse.jdt.ls.core.internal.JDTUtils.toLocation(JDTUtils.java:342)
at org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.collectChildren(DocumentSymbolHandler.java:75)
at org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.collectChildren(DocumentSymbolHandler.java:68)
at org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.getOutline(DocumentSymbolHandler.java:52)
at org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.documentSymbol(DocumentSymbolHandler.java:44)
at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$12(JDTLanguageServer.java:532)
at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$23(JDTLanguageServer.java:732)
at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Same error and stack dump can be found in the log that I open with "Java: Open Java Language Server log file".
(related?) Dev Tools console log contains quite a lot copies of this warning:
WARN Error: listener failed
at workbench.main.js:sourcemap:4061
at Object.g [as _notify] (workbench.main.js:sourcemap:150)
at Object.enter (workbench.main.js:sourcemap:154)
at n.Class.derive._oncancel._run (workbench.main.js:sourcemap:155)
at n.Class.derive._oncancel._completed (workbench.main.js:sourcemap:155)
at e.resolveOk (workbench.main.js:sourcemap:3060)
at e._receiveReply (workbench.main.js:sourcemap:3127)
at e._receiveOneMessage (workbench.main.js:sourcemap:3126)
at workbench.main.js:sourcemap:3125
at workbench.main.js:sourcemap:3128
at e.fire (workbench.main.js:sourcemap:171)
at c (workbench.main.js:sourcemap:302)
at Socket.<anonymous> (workbench.main.js:sourcemap:303)
at emitOne (events.js:96)
at Socket.emit (events.js:191)
at readableAddChunk (_stream_readable.js:178)
at Socket.Readable.push (_stream_readable.js:136)
at Pipe.onread (net.js:560)
I was experiencing the same issue with the previous version of the extension.
When extension hangs, VSCode status bar usually says "Validating document - 0%"
Environment
- Operating System: Win10 v1803
- JDK version: 1.8.0_181
- Visual Studio Code version: 1.25.1
- Java extension version: 0.29.0
Steps To Reproduce
Not quite sure about the pattern or repro yet, but happens like every hour (=pretty often).
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
先检查 DocumentSymbolHandler、JDTUtils 和 JsonRpcHelpers 中的堆栈跟踪条目,然后使用损坏的 Java 文件重现挂起,并检查 Java Language Server 日志。当文档验证和扩展功能能够继续工作且不会因 BadLocationException 而挂起时,问题就解决了。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- java
- 领域
- developer-experience, tooling
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100