static void disposeAction(JobTreeElement jte) {
   if (jte.isJobInfo()) {
     JobInfo ji = (JobInfo) jte;
     Job job = ji.getJob();
     if (job != null) {
       Object prop = job.getProperty(IProgressConstants.ACTION_PROPERTY);
       if (prop instanceof ActionFactory.IWorkbenchAction) {
         ((ActionFactory.IWorkbenchAction) prop).dispose();
       }
     }
   }
 }
 public void removeErrorJobs() {
   JobTreeElement[] infos = getJobInfos();
   for (int i = 0; i < infos.length; i++) {
     if (infos[i].isJobInfo()) {
       JobInfo info1 = (JobInfo) infos[i];
       Job job = info1.getJob();
       if (job != null) {
         IStatus status = job.getResult();
         if (status != null && status.getSeverity() == IStatus.ERROR) {
           JobTreeElement topElement = (JobTreeElement) info1.getParent();
           if (topElement == null) {
             topElement = info1;
           }
           FinishedJobs.getInstance().remove(topElement);
         }
       }
     }
   }
 }
  /** Returns true if JobInfo indicates that it must be kept. */
  static boolean keep(JobInfo info) {
    Job job = info.getJob();
    if (job != null) {
      Object prop = job.getProperty(ProgressManagerUtil.KEEP_PROPERTY);
      if (prop instanceof Boolean) {
        if (((Boolean) prop).booleanValue()) {
          return true;
        }
      }

      prop = job.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY);
      if (prop instanceof Boolean) {
        if (((Boolean) prop).booleanValue()) {
          return true;
        }
      }

      IStatus status = job.getResult();
      if (status != null && status.getSeverity() == IStatus.ERROR) {
        return true;
      }
    }
    return false;
  }