void () { List<CaretRectangle> caretPoints = new ArrayList<>(); for (Caret caret : getCaretModel().getAllCarets()) { boolean isRtl = caret.isAtRtlLocation(); VisualPosition caretPosition = caret.getVisualPosition(); Point2D pos1 = visualPositionToPoint2D(caretPosition.leanRight(!isRtl)); Point2D pos2 = visualPositionToPoint2D(new VisualPosition(caretPosition.line, Math.max(0, caretPosition.column + (isRtl ? -1 : 1)), isRtl)); float width = (float)Math.abs(pos2.getX() - pos1.getX()); if (!isRtl && myInlayModel.hasInlineElementAt(caretPosition)) { width = Math.min(width, (float)Math.ceil(myView.getPlainSpaceWidth())); } caretPoints.add(new CaretRectangle(pos1, width, caret, isRtl)); } myCaretCursor.setPositions(caretPoints.toArray(new CaretRectangle[0])); }