void (Node node) { UsageNodePresentation presentation = node.getCachedPresentation(); if (presentation == null) { // either: // 1. the node was never updated yet // 2. the usage has dropped the cached presentation by itself // (i.e., it was stored by a soft reference and was gc-ed). // In either case, `myView.updateLater()` will eventually re-update the visible nodes. append(UsageViewBundle.message("loading"), SimpleTextAttributes.GRAY_ATTRIBUTES, true); // Since the "loading..." text is not reflected in the node's cached state, // we must force the node to recalculate its bounds on the next view update node.forceUpdate(); myView.updateLater(); return; } setIcon(presentation.getIcon()); TextChunk[] text = presentation.getText(); for (int i = 0; i < text.length; i++) { TextChunk textChunk = text[i]; SimpleTextAttributes simples = textChunk.getSimpleAttributesIgnoreBackground(); append(textChunk.getText() + (i == 0 ? " " : ""), patchAttrs(node, simples), true); } }