Ejemplo n.º 1
0
  /**
   * Add a new <code>SourceJob</code> for the <code>Source source</code>, with AST <code>ast</code>.
   * A new job will be created if needed. If the <code>Source source</code> has already been
   * processed, and its job discarded to release resources, then <code>null</code> will be returned.
   */
  public SourceJob addJob(Source source, Node ast) {
    Object o = jobs.get(source);
    SourceJob job = null;
    if (o == COMPLETED_JOB) {
      // the job has already been completed.
      // We don't need to add a job
      return null;
    } else if (o == null) {
      // No appropriate job yet exists, we will create one.

      job = this.createSourceJob(source, ast);

      // record the job in the map and the worklist.
      jobs.put(source, job);
      worklist.addLast(job);

      if (Report.should_report(Report.frontend, 3)) {
        Report.report(3, "Adding job for " + source + " at the " + "request of job " + currentJob);
      }
    } else {
      job = (SourceJob) o;
    }

    // if the current source job caused this job to load, record the
    // dependency.
    if (currentJob instanceof SourceJob) {
      ((SourceJob) currentJob).addDependency(source);
    }

    return job;
  }