@Override
  public void addMessage(
      final int type,
      @NotNull final String[] text,
      @Nullable final String groupName,
      @Nullable final Navigatable navigatable,
      @Nullable final String exportTextPrefix,
      @Nullable final String rendererTextPrefix,
      @Nullable final UUID sessionId) {

    myViewUpdater.execute(
        new Runnable() {
          @Override
          public void run() {
            final ErrorViewStructure structure = myPanel.getErrorViewStructure();
            final GroupingElement group = structure.lookupGroupingElement(groupName);
            if (group != null && !sessionId.equals(group.getData())) {
              structure.removeElement(group);
            }
            if (navigatable != null) {
              myPanel.addMessage(
                  type,
                  text,
                  groupName,
                  navigatable,
                  exportTextPrefix,
                  rendererTextPrefix,
                  sessionId);
            } else {
              myPanel.addMessage(type, text, null, -1, -1, sessionId);
            }
            updateIcon(true);
          }
        });
  }
 @Override
 public void clearOldMessages(
     @Nullable final CompileScope scope, @NotNull final UUID currentSessionId) {
   myViewUpdater.execute(
       new Runnable() {
         @Override
         public void run() {
           updateIcon(
               !cleanupChildrenRecursively(
                   myPanel.getErrorViewStructure().getRootElement(), scope, currentSessionId));
           myPanel.reload();
         }
       });
 }
 @Override
 protected void processQueue() {
   if (myProcessingEnabled.get()) {
     super.processQueue();
   }
 }
 public void startProcessing() {
   if (!myProcessingEnabled.getAndSet(true)) {
     super.processQueue();
   }
 }