boolean (@NotNull PresentationData presentation, @Nullable PresentationData before) { setIcon(presentation.getIcon(false)); // If the node has both plain and colored text, the plain one takes priority for myName because it's also supposed to be plain, // and it can be used, e.g. for sorting, while the colored version may contain information not needed for sorting such as inplace comments. myName = presentation.getPresentableText(); if (myName == null) { myName = getColoredTextAsPlainText(presentation); } myColor = presentation.getForcedTextForeground(); boolean updated = !presentation.equals(before); var updatedPresentation = myUpdatedPresentation; if (updatedPresentation == null) { updatedPresentation = createPresentation(); } else { updatedPresentation = updatedPresentation.clone(); } updatedPresentation.copyFrom(presentation); final var templatePresentation = myTemplatePresentation; if (templatePresentation != null) { updatedPresentation.applyFrom(templatePresentation); } updated |= updatedPresentation.isChanged(); updatedPresentation.setChanged(false); myUpdatedPresentation = updatedPresentation; return updated; }