void (boolean firstTime, boolean isInBulkMode) { for (int infoIndex = 0; infoIndex < myUpdateList.size(); infoIndex++) { InlayUpdateInfo info = myUpdateList.get(infoIndex); String oldText = info.oldText; String newText = info.newText; InlayUpdateInfo.Action action = info.action(); if (action == InlayUpdateInfo.Action.ADD) { boolean useAnimation = !myForceImmediateUpdate && !firstTime && !isSameHintRemovedNear(newText, infoIndex) && !isInBulkMode; Inlay<?> inlay = myHintsManager.addHint(myEditor, info.offset, info.relatesToPrecedingText, newText, info.widthAdjustment, useAnimation); if (inlay != null && !isInBulkMode) { VisualPosition inlayPosition = inlay.getVisualPosition(); VisualPosition visualPosition = new VisualPosition(inlayPosition.line, inlayPosition.column + (info.relatesToPrecedingText ? 1 : 0)); Caret caret = myEditor.getCaretModel().getCaretAt(visualPosition); if (caret != null) caret.moveToVisualPosition(new VisualPosition(inlayPosition.line, inlayPosition.column + (info.relatesToPrecedingText ? 0 : 1))); } } else if (action == InlayUpdateInfo.Action.DELETE) { boolean useAnimation = !myForceImmediateUpdate && oldText != null && !isSameHintAddedNear(oldText, infoIndex) && !isInBulkMode; myHintsManager.deleteHint(myEditor, info.inlay, useAnimation); } else if (action == InlayUpdateInfo.Action.REPLACE) { myHintsManager.replaceHint(myEditor, info.inlay, newText, info.widthAdjustment, !myForceImmediateUpdate); } } }