code: protected static boolean isPropertyMethodSuffix(String suffix) {
          if(suffix.length() == 0) return false;
          if(!Character.isJavaIdentifierStart(suffix.charAt(0))) return false;
          if(suffix.length() == 1) return Character.isUpperCase(suffix.charAt(0));
          return Character.isUpperCase(suffix.charAt(0)) || Character.isUpperCase(suffix.charAt(1));
      }
docs: This method is used when interrogating a method name to determine if the
  method represents a property getter.  For example, if a method is named
  <code>getSomeProperty</code>, the value <code>"SomeProperty"</code> could
  be passed to this method to determine that the method should be considered
  a property getter.  Examples of suffixes that would be considered property
  getters:
  <ul>
  <li>SomeProperty</li>
  <li>Word</li>
  <li>aProperty</li>
  <li>S</li>
  <li>X567</li>
  </ul>
  
  Examples of suffixes that would not be considered property getters:
  <ul>
  <li>someProperty</li>
  <li>word</li>
  <li>s</li>
  <li>x567</li>
  <li>2other</li>
  <li>5</li>
  </ul>
  
  A suffix like <code>prop</code> from a method <code>getprop()</code> is
  not recognized as a valid suffix. However Groovy will recognize such a
  method as a property getter but only if a method <code>getProp()</code> or
  a property <code>prop</code> does not also exist. The Java Beans
  specification is unclear on how to treat such method names, it only says
  that "by default" the suffix will start with a capital letter because of
  the camel case style usually used. (See the JavaBeans API specification
  sections 8.3 and 8.8.)
  
  This method assumes that all characters in the name are valid Java identifier
  letters.
  
  @param suffix The suffix to inspect
  @return true if suffix indicates a property name