void (boolean canShrink) { boolean leftPainterOnDemand = myLeftFreePaintersAreaState == EditorGutterFreePainterAreaState.ON_DEMAND; myLeftFreePaintersAreaShown = myLeftFreePaintersAreaState == EditorGutterFreePainterAreaState.SHOW; boolean rightPainterOnDemand = myRightFreePaintersAreaState == EditorGutterFreePainterAreaState.ON_DEMAND; myRightFreePaintersAreaShown = myRightFreePaintersAreaState == EditorGutterFreePainterAreaState.SHOW; if (leftPainterOnDemand || rightPainterOnDemand) { processRangeHighlighters(0, myEditor.getDocument().getTextLength(), highlighter -> { LineMarkerRenderer lineMarkerRenderer = highlighter.getLineMarkerRenderer(); if (lineMarkerRenderer != null) { LineMarkerRendererEx.Position position = getLineMarkerPosition(lineMarkerRenderer); if (leftPainterOnDemand && position == LineMarkerRendererEx.Position.LEFT && isLineMarkerVisible(highlighter)) { myLeftFreePaintersAreaShown = true; } if (rightPainterOnDemand && position == LineMarkerRendererEx.Position.RIGHT && isLineMarkerVisible(highlighter)) { myRightFreePaintersAreaShown = true; } } }); } int minWidth = areIconsShown() ? EditorUIUtil.scaleWidth(myStartIconAreaWidth, myEditor) : 0; myIconsAreaWidth = canShrink ? minWidth : Math.max(myIconsAreaWidth, minWidth); for (Int2ObjectMap.Entry<List<GutterMark>> entry : processGutterRenderers()) { int width = 1; List<GutterMark> renderers = entry.getValue(); for (int i = 0; i < renderers.size(); i++) { GutterMark renderer = renderers.get(i); if (!checkDumbAware(renderer)) continue; if (isMergedWithLineNumbers(renderer)) continue; width += scaleIcon(renderer.getIcon()).getIconWidth(); if (i > 0) width += getGapBetweenIcons(); } if (myIconsAreaWidth < width) { myIconsAreaWidth = width + 1; } } myHasInlaysWithGutterIcons = false; myEditor.getInlayModel().getBlockElementsInRange(0, myEditor.getDocument().getTextLength()).forEach(inlay -> { GutterIconRenderer iconRenderer = inlay.getGutterIconRenderer(); if (shouldBeShown(iconRenderer) && checkDumbAware(iconRenderer) && !EditorUtil.isInlayFolded(inlay)) { Icon icon = scaleIcon(iconRenderer.getIcon()); if (icon.getIconHeight() <= inlay.getHeightInPixels()) { myHasInlaysWithGutterIcons = true; myIconsAreaWidth = Math.max(myIconsAreaWidth, icon.getIconWidth()); } } }); if (isDumbMode()) { myIconsAreaWidth = Math.max(myIconsAreaWidth, myLastNonDumbModeIconAreaWidth); } else { myLastNonDumbModeIconAreaWidth = myIconsAreaWidth; } }