@NotNull
 private Set<Usage> getReadOnlyUsages() {
   final Set<Usage> result = new THashSet<Usage>();
   final Set<Map.Entry<Usage, UsageNode>> usages = myUsageNodes.entrySet();
   for (Map.Entry<Usage, UsageNode> entry : usages) {
     Usage usage = entry.getKey();
     UsageNode node = entry.getValue();
     if (node != null && node != NULL_NODE && !node.isExcluded() && usage.isReadOnly()) {
       result.add(usage);
     }
   }
   return result;
 }
 public UsageNode doAppendUsage(@NotNull Usage usage) {
   // invoke in ReadAction to be be sure that usages are not invalidated while the tree is being
   // built
   ApplicationManager.getApplication().assertReadAccessAllowed();
   if (!usage.isValid()) {
     // because the view is built incrementally, the usage may be already invalid, so need to
     // filter such cases
     return null;
   }
   UsageNode node = myBuilder.appendUsage(usage);
   myUsageNodes.put(usage, node == null ? NULL_NODE : node);
   if (!myIsFirstVisibleUsageFound && node != null) { // first visible usage found;
     myIsFirstVisibleUsageFound = true;
     showNode(node);
   }
   return node;
 }