From aa629f8539442c1f49d9f4dd2975e2505da36e6c Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 23 Aug 2017 14:18:28 +0300 Subject: [PATCH] fix hint update procedure in ParameterHintsPass make sure resulting hints have correct 'relatesToPrecedingText' flag state --- .../codeInsight/hints/ParameterHintsUpdater.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsUpdater.java b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsUpdater.java index d213956ef1eb..dce62984fb7b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsUpdater.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsUpdater.java @@ -73,7 +73,8 @@ public class ParameterHintsUpdater { editorHints.forEach(editorHint -> { int offset = editorHint.getOffset(); String presentationText = presentationManager.getHintText(editorHint); - ParameterHintsPass.HintData newHint = findAndRemoveMatchingHint(offset, presentationText, myNewHints); + ParameterHintsPass.HintData newHint = findAndRemoveMatchingHint(offset, presentationText, editorHint.isRelatedToPrecedingText(), + myNewHints); String newText = newHint == null ? null : newHint.presentationText; if (!myForceImmediateUpdate && delayRemoval(editorHint)) { myEditor.putUserData(HINT_REMOVAL_DELAYED, Boolean.TRUE); @@ -98,14 +99,16 @@ public class ParameterHintsUpdater { } @Nullable - private static ParameterHintsPass.HintData findAndRemoveMatchingHint(int offset, String presentationText, + private static ParameterHintsPass.HintData findAndRemoveMatchingHint(int offset, String presentationText, boolean relatesToPrecedingText, TIntObjectHashMap> data) { List newHintList = data.get(offset); ParameterHintsPass.HintData newHint = null; if (newHintList != null) { ParameterHintsPass.HintData lastHint = null; for (Iterator iterator = newHintList.iterator(); iterator.hasNext(); ) { - lastHint = iterator.next(); + ParameterHintsPass.HintData hint = iterator.next(); + if (hint.relatesToPrecedingText != relatesToPrecedingText) continue; + lastHint = hint; if (Objects.equals(lastHint.presentationText, presentationText)) { newHint = lastHint; iterator.remove();