void (@NotNull JList<? extends Pair<ColorAndFontDescriptorsProvider, AttributesDescriptor>> list, Pair<ColorAndFontDescriptorsProvider, AttributesDescriptor> value, int index, boolean selected, boolean hasFocus) { TextAttributes ta = colorsScheme.getAttributes(value.second.getKey()); Color fg = ObjectUtils.chooseNotNull(ta.getForegroundColor(), colorsScheme.getDefaultForeground()); Color bg = ObjectUtils.chooseNotNull(ta.getBackgroundColor(), colorsScheme.getDefaultBackground()); SimpleTextAttributes sa = fromTextAttributes(ta); SimpleTextAttributes saOpaque = sa.derive(STYLE_OPAQUE | sa.getStyle(), fg, bg, null); SimpleTextAttributes saSelected = REGULAR_ATTRIBUTES.derive(sa.getStyle(), null, null, null); SimpleTextAttributes saCur = REGULAR_ATTRIBUTES; List<String> split = StringUtil.split(value.first.getDisplayName() + "//" + value.second.getDisplayName(), "//"); for (int i = 0, len = split.size(); i < len; i++) { boolean last = i == len - 1; saCur = !last ? REGULAR_ATTRIBUTES : selected ? saSelected : saOpaque; if (last) append(" ", saCur); append(split.get(i), saCur); if (last) { append(" ", saCur); } else { append(" > ", GRAYED_ATTRIBUTES); } } Color stripeColor = ta.getErrorStripeColor(); boolean addStripe = stripeColor != null && stripeColor != saCur.getBgColor(); boolean addBoxed = ta.getEffectType() == EffectType.BOXED && ta.getEffectColor() != null; if (addBoxed) { append("\u25A2" + (addStripe ? "" : " "), saCur.derive(-1, ta.getEffectColor(), null, null)); } if (addStripe) { append(" ", saCur.derive(STYLE_OPAQUE, null, stripeColor, null)); } }