code: @Override
    public void execute() {
      super.execute();
      if (output == null) {
        System.err.println(
            "Please add an <output> for the <" + getTaskName() + "> at " + this.getLocation());
        return;
      }
  
      // Gather output in a buffer rather than generating a bad file with a valid timestamp.
      StringBuilder sb = new StringBuilder();
  
      // Output the source files that use the helper functions first, so we get the appropriate file
      // overviews and copyright headers.
      for (FileRef input : inputs) {
        try {
          boolean inGeneratedCode = false;
          for (String line : Files.readLines(input.file, Charsets.UTF_8)) {
            // Skip code between generated code markers so that this transformation is idempotent.
            // We can run an old output through this class, and get the latest version out.
            if (inGeneratedCode) {
              if (GENERATED_CODE_END_MARKER.equals(line.trim())) {
                inGeneratedCode = false;
              }
            } else if (GENERATED_CODE_START_MARKER.equals(line.trim())) {
              inGeneratedCode = true;
            } else {
              sb.append(line).append('\n');
            }
          }
        } catch (IOException ex) {
          System.err.println("Failed to read " + input.file);
          ex.printStackTrace();
          return;
        }
      }
  
      // Generate helper functions for escape directives.
      generateCode(availableIdentifiers, sb);
  
      // Output a file now that we know generation hasn't failed.
      try {
        Files.asCharSink(output.file, Charsets.UTF_8).write(sb);
      } catch (IOException ex) {
        // Make sure an abortive write does not leave a file w
        output.file.delete();
      }
    }
docs: Called to actually build the output by Ant.