private void reportMessageKind(@NotNull MessageEvent.Kind eventKind,
                                 @NotNull ExecutionNode parentNode,
                                 @NotNull Set<? super ExecutionNode> structureChanged) {
    if (eventKind == MessageEvent.Kind.ERROR || eventKind == MessageEvent.Kind.WARNING || eventKind == MessageEvent.Kind.INFO) {
      ExecutionNode executionNode = parentNode;
      do {
        ExecutionNode updatedRoot = executionNode.reportChildMessageKind(eventKind);
        if (updatedRoot != null) {
          structureChanged.add(updatedRoot);
        }
        else {
          scheduleUpdate(executionNode, false);
        }
      }
      while ((executionNode = executionNode.getParent()) != null);
      scheduleUpdate(getRootElement(), false);
    }
  }
private void reportMessageKind(@NotNull MessageEvent.Kind eventKind,
                                 @NotNull ExecutionNode parentNode,
                                 @NotNull Set<? super ExecutionNode> structureChanged)