class Builder {

    private final ImmutableList.Builder<String> files = ImmutableList.builder();
    private final RangeSet<Integer> lines = TreeRangeSet.create();
    private final ImmutableList.Builder<Integer> offsets = ImmutableList.builder();
    private final ImmutableList.Builder<Integer> lengths = ImmutableList.builder();
    private boolean inPlace = false;
    private boolean aosp = false;
    private boolean version = false;
    private boolean help = false;
    private boolean stdin = false;
    private boolean fixImportsOnly = false;
    private boolean sortImports = true;
    private boolean removeUnusedImports = true;
    private boolean dryRun = false;
    private boolean setExitIfChanged = false;
    private Optional<String> assumeFilename = Optional.empty();
    private boolean reflowLongStrings = true;
    private boolean formatJavadoc = true;

    ImmutableList.Builder<String> filesBuilder() {
      return files;
    }

    Builder inPlace(boolean inPlace) {
      this.inPlace = inPlace;
      return this;
    }

    RangeSet<Integer> linesBuilder() {
      return lines;
    }

    Builder addOffset(Integer offset) {
      offsets.add(offset);
      return this;
    }

    Builder addLength(Integer length) {
      lengths.add(length);
      return this;
    }

    Builder aosp(boolean aosp) {
      this.aosp = aosp;
      return this;
    }

    Builder version(boolean version) {
      this.version = version;
      return this;
    }

    Builder help(boolean help) {
      this.help = help;
      return this;
    }

    Builder stdin(boolean stdin) {
      this.stdin = stdin;
      return this;
    }

    Builder fixImportsOnly(boolean fixImportsOnly) {
      this.fixImportsOnly = fixImportsOnly;
      return this;
    }

    Builder sortImports(boolean sortImports) {
      this.sortImports = sortImports;
      return this;
    }

    Builder removeUnusedImports(boolean removeUnusedImports) {
      this.removeUnusedImports = removeUnusedImports;
      return this;
    }

    Builder dryRun(boolean dryRun) {
      this.dryRun = dryRun;
      return this;
    }

    Builder setExitIfChanged(boolean setExitIfChanged) {
      this.setExitIfChanged = setExitIfChanged;
      return this;
    }

    Builder assumeFilename(String assumeFilename) {
      this.assumeFilename = Optional.of(assumeFilename);
      return this;
    }

    Builder reflowLongStrings(boolean reflowLongStrings) {
      this.reflowLongStrings = reflowLongStrings;
      return this;
    }

    Builder formatJavadoc(boolean formatJavadoc) {
      this.formatJavadoc = formatJavadoc;
      return this;
    }

    CommandLineOptions build() {<FILL_FUNCTION_BODY>}
  }

      return new CommandLineOptions(
          files.build(),
          inPlace,
          ImmutableRangeSet.copyOf(lines),
          offsets.build(),
          lengths.build(),
          aosp,
          version,
          help,
          stdin,
          fixImportsOnly,
          sortImports,
          removeUnusedImports,
          dryRun,
          setExitIfChanged,
          assumeFilename,
          reflowLongStrings,
          formatJavadoc);
    
<no_super_class>