private static String disambiguate(String name, Collection<String> existingNames) {
    if (!Character.isJavaIdentifierStart(name.codePointAt(0))) {
      // You've defined a getter called get1st(). What were you thinking?
      name = "_" + name;
      if (!existingNames.contains(name)) {
        return name;
      }
    }
    for (int i = 0; ; i++) {
      String candidate = name + i;
      if (!existingNames.contains(candidate)) {
        return candidate;
      }
    }
  }
Modifies the values of the given map to avoid reserved words. If we have a getter called {@code
getPackage()} then we can't use the identifier {@code package} to represent its value since
that's a reserved word.
value/src/main/java/com/google/auto/value/processor/AutoValueishProcessor.java