From f53ef178d97bb105e3c79e67b1de5afa323a3af1 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 18 Jun 2018 15:25:58 +0300 Subject: [PATCH] IDEA-194054 Misplaced gutter icons in folded region preview popup --- .../editor/impl/EditorGutterComponentImpl.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index be9ab884bd7a..b58053c4e52b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -118,6 +118,7 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse private final EditorImpl myEditor; private final FoldingAnchorsOverlayStrategy myAnchorsDisplayStrategy; @Nullable private TIntObjectHashMap> myLineToGutterRenderers; + private boolean myLineToGutterRenderersCacheForLogicalLines; private int myStartIconAreaWidth = START_ICON_AREA_WIDTH; private int myIconsAreaWidth; private int myLineNumberAreaWidth; @@ -743,11 +744,17 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse } } + private boolean logicalLinesMatchVisualOnes() { + return myEditor.getSoftWrapModel().getSoftWrapsIntroducedLinesNumber() == 0 && + ArrayUtil.isEmpty(myEditor.getFoldingModel().fetchTopLevel()); + } + void clearLineToGutterRenderersCache() { myLineToGutterRenderers = null; } private void buildGutterRenderersCache() { + myLineToGutterRenderersCacheForLogicalLines = logicalLinesMatchVisualOnes(); myLineToGutterRenderers = new TIntObjectHashMap<>(); processRangeHighlighters(0, myEditor.getDocument().getTextLength(), highlighter -> { GutterMark renderer = highlighter.getGutterIconRenderer(); @@ -824,14 +831,14 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse @Nullable private List getGutterRenderers(int line) { - if (myLineToGutterRenderers == null) { + if (myLineToGutterRenderers == null || myLineToGutterRenderersCacheForLogicalLines != logicalLinesMatchVisualOnes()) { buildGutterRenderersCache(); } return myLineToGutterRenderers.get(line); } private void processGutterRenderers(@NotNull TIntObjectProcedure> processor) { - if (myLineToGutterRenderers == null) { + if (myLineToGutterRenderers == null || myLineToGutterRenderersCacheForLogicalLines != logicalLinesMatchVisualOnes()) { buildGutterRenderersCache(); } myLineToGutterRenderers.forEachEntry(processor);