code: public List<SaneOption> listOptions() throws IOException {
      if (optionTitleMap == null) {
        groups.clear();
        optionTitleMap =
            Maps.uniqueIndex(
                SaneOption.optionsFor(this),
                new Function<SaneOption, String>() {
                  @Override
                  public String apply(SaneOption input) {
                    return input.getName();
                  }
                });
      }
  
      // Maps.uniqueIndex guarantees the order of optionTitleMap.values()
      return ImmutableList.copyOf(optionTitleMap.values());
    }
docs: Returns the list of options applicable to this device.
  
  @return a list of {@link SaneOption} instances
  @throws IOException if a problem occurred talking to the SANE backend