From a3181bb36f1475ae379bd7fabb48af8741142a2e Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 16 Sep 2016 17:58:44 +0200 Subject: [PATCH] show debugger value hints when the documents are committed (EA-88577 - assert: PsiDocumentManagerBase.commitAllDocuments) --- .../evaluate/quick/XQuickEvaluateHandler.java | 27 +++++++++---------- .../quick/common/ValueLookupManager.java | 8 ++++++ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XQuickEvaluateHandler.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XQuickEvaluateHandler.java index 24cb42a2ebf6..9302613abe2b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XQuickEvaluateHandler.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XQuickEvaluateHandler.java @@ -20,7 +20,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.SelectionModel; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiDocumentManager; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XDebuggerManager; import com.intellij.xdebugger.evaluation.ExpressionInfo; @@ -58,22 +57,20 @@ public class XQuickEvaluateHandler extends QuickEvaluateHandler { return null; } - return PsiDocumentManager.getInstance(project).commitAndRunReadAction(() -> { - int offset = AbstractValueHint.calculateOffset(editor, point); - ExpressionInfo expressionInfo = getExpressionInfo(evaluator, project, type, editor, offset); - if (expressionInfo == null) { - return null; - } + int offset = AbstractValueHint.calculateOffset(editor, point); + ExpressionInfo expressionInfo = getExpressionInfo(evaluator, project, type, editor, offset); + if (expressionInfo == null) { + return null; + } - int textLength = editor.getDocument().getTextLength(); - TextRange range = expressionInfo.getTextRange(); - if (range.getStartOffset() > range.getEndOffset() || range.getStartOffset() < 0 || range.getEndOffset() > textLength) { - LOG.error("invalid range: " + range + ", text length = " + textLength + ", evaluator: " + evaluator); - return null; - } + int textLength = editor.getDocument().getTextLength(); + TextRange range = expressionInfo.getTextRange(); + if (range.getStartOffset() > range.getEndOffset() || range.getStartOffset() < 0 || range.getEndOffset() > textLength) { + LOG.error("invalid range: " + range + ", text length = " + textLength + ", evaluator: " + evaluator); + return null; + } - return new XValueHint(project, editor, point, type, expressionInfo, evaluator, session); - }); + return new XValueHint(project, editor, point, type, expressionInfo, evaluator, session); } @Nullable diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java index f04df3abb554..eda1225d50b3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java @@ -30,6 +30,7 @@ import com.intellij.openapi.editor.event.EditorMouseMotionListener; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.registry.Registry; +import com.intellij.psi.PsiDocumentManager; import com.intellij.util.Alarm; import com.intellij.xdebugger.XDebuggerUtil; import com.intellij.xdebugger.impl.DebuggerSupport; @@ -138,6 +139,13 @@ public class ValueLookupManager extends EditorMouseAdapter implements EditorMous } public void showHint(@NotNull QuickEvaluateHandler handler, @NotNull Editor editor, @NotNull Point point, @NotNull ValueHintType type) { + PsiDocumentManager.getInstance(myProject).performWhenAllCommitted(() -> doShowHint(handler, editor, point, type)); + } + + private void doShowHint(@NotNull QuickEvaluateHandler handler, + @NotNull Editor editor, + @NotNull Point point, + @NotNull ValueHintType type) { myAlarm.cancelAllRequests(); if (editor.isDisposed() || !handler.canShowHint(myProject)) { return;