void (XmlElementDescriptor descriptor, ParameterInfoUIContext context, Function<? super String, Boolean> attributePresentFun) { final XmlAttributeDescriptor[] attributes = descriptor != null ? getSortedDescriptors(descriptor) : XmlAttributeDescriptor.EMPTY; StringBuilder buffer = new StringBuilder(); int highlightStartOffset = -1; int highlightEndOffset = -1; if (attributes.length == 0) { buffer.append(XmlBundle.message("xml.tag.info.no.attributes")); } else { StringBuilder text1 = new StringBuilder(" "); StringBuilder text2 = new StringBuilder(" "); StringBuilder text3 = new StringBuilder(" "); for (XmlAttributeDescriptor attribute : attributes) { if (Boolean.TRUE.equals(attributePresentFun.fun(attribute.getName()))) { if (!(text1.toString().equals(" "))) { text1.append(", "); } text1.append(attribute.getName()); } else if (attribute.isRequired()) { if (!(text2.toString().equals(" "))) { text2.append(", "); } text2.append(attribute.getName()); } else { if (!(text3.toString().equals(" "))) { text3.append(", "); } text3.append(attribute.getName()); } } if (!text1.toString().equals(" ") && !text2.toString().equals(" ")) { text1.append(", "); } if (!text2.toString().equals(" ") && !text3.toString().equals(" ")) { text2.append(", "); } if (!text1.toString().equals(" ") && !text3.toString().equals(" ") && text2.toString().equals(" ")) { text1.append(", "); } buffer.append(text1); highlightStartOffset = buffer.length(); buffer.append(text2); highlightEndOffset = buffer.length(); buffer.append(text3); } context.setupUIComponentPresentation(buffer.toString(), highlightStartOffset, highlightEndOffset, false, false, true, context.getDefaultParameterColor()); }