static String decapitalizeLikeJavaBeans(String propertyName) {
    if (propertyName != null
        && propertyName.length() >= 2
        && Character.isUpperCase(propertyName.charAt(0))
        && Character.isUpperCase(propertyName.charAt(1))) {
      return propertyName;
    }
    return decapitalizeNormally(propertyName);
  }
Returns the {@code propertyName} with its first character in lower case, but leaves it intact
if it starts with two capitals.

<p>For consistency with JavaBeans, a getter called {@code getHTMLPage()} defines a property
called {@code HTMLPage}. The <a
href="https://docs.oracle.com/javase/8/docs/api/java/beans/Introspector.html#decapitalize-java.lang.String-">
rule</a> is: the name of the property is the part after {@code get} or {@code is}, with the
first letter lowercased <i>unless</i> the first two letters are uppercase. This works well for
the {@code HTMLPage} example, but in these more enlightened times we use {@code HtmlPage}
anyway, so the special behaviour is not useful, and of course it behaves poorly with examples
like {@code OAuth}. Nevertheless, we preserve it for compatibility.
value/src/main/java/com/google/auto/value/processor/PropertyNames.java