String (@NotNull RefGroup group, @NotNull FontMetrics fontMetrics, int availableWidth) { if (!group.isExpanded()) { return shortenRefName(group.getName(), fontMetrics, availableWidth); } StringBuilder text = new StringBuilder(); String remainder = ", ..."; String separator = ", "; int remainderWidth = fontMetrics.stringWidth(remainder); int separatorWidth = fontMetrics.stringWidth(separator); for (int i = 0; i < group.getRefs().size(); i++) { boolean lastRef = i == group.getRefs().size() - 1; boolean firstRef = i == 0; int width = availableWidth - (lastRef ? 0 : remainderWidth) - (firstRef ? 0 : separatorWidth); String refName = shortenRefName(group.getRefs().get(i).getName(), fontMetrics, width); int refNameWidth = fontMetrics.stringWidth(refName); if (width - refNameWidth < 0 && !firstRef) { text.append(remainder); break; } else { text.append(firstRef ? "" : separator).append(refName); availableWidth -= (firstRef ? 0 : separatorWidth) + refNameWidth; } } return text.toString(); }