docs: public void update(List<UninstallationProgressEvent> events) {
          if (!isVisible()) {
              if ((System.currentTimeMillis() - startTime) >= MS_TO_WAIT_BEFORE_SHOW) {
                  if (!done && !setVisibleInvoked) {
                      setVisibleInvoked = true;
                      EventQueue.invokeLater(new Runnable() {
  
                          @Override
                          public void run() {
                              if (!done) {
                                  UninstallationProgressDialogue.super.setVisible(true);
                              }
                          }
                      });
                  }
              }
          }
  
          int totalAmount = 0;
          AddOn addOn = null;
  
          for (UninstallationProgressEvent event : events) {
              totalAmount += event.getAmount();
              if (UninstallationProgressEvent.Type.FINISHED_ADD_ON == event.getType()) {
                  for (AddOnUninstallListener listener : listeners) {
                      failedUninstallations = !event.isUninstalled();
                      listener.addOnUninstalled(currentAddOn, update, event.isUninstalled());
                  }
              } else if (UninstallationProgressEvent.Type.ADD_ON == event.getType()) {
                  addOn = event.getAddOn();
                  currentAddOn = addOn;
                  update = event.isUpdate();
  
                  for (AddOnUninstallListener listener : listeners) {
                      listener.uninstallingAddOn(addOn, update);
                  }
              }
          }
  
          UninstallationProgressEvent last = events.get(events.size() - 1);
  
          if (addOn != null) {
              setCurrentAddOn(addOn);
          }
  
          if (totalAmount != 0) {
              incrementProgress(totalAmount);
          }
  
          if (currentType != last.getType()) {
              String keyMessage;
              switch (last.getType()) {
              case FILE:
                  keyMessage = "cfu.uninstallation.progress.dialogue.uninstallingFile";
                  break;
              case ACTIVE_RULE:
                  keyMessage = "cfu.uninstallation.progress.dialogue.uninstallingActiveScanner";
                  break;
              case PASSIVE_RULE:
                  keyMessage = "cfu.uninstallation.progress.dialogue.uninstallingPassiveScanner";
                  break;
              case EXTENSION:
                  keyMessage = "cfu.uninstallation.progress.dialogue.uninstallingExtension";
                  break;
              default:
                  keyMessage = "";
                  break;
              }
              currentType = last.getType();
              keyBaseStatusMessage = keyMessage;
          }
  
          if (keyBaseStatusMessage.isEmpty()) {
              setCustomMessage("");
          } else {
              setCustomMessage(
                      Constant.messages
                              .getString(keyBaseStatusMessage, last.getValue(), last.getMax()));
          }
      }