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);