docs: private static void reflectionAppend(
          Object lhs,
          Object rhs,
          Class<?> clazz,
          EqualsBuilder builder,
          boolean useTransients,
          String[] excludeFields) {
          Field[] fields = clazz.getDeclaredFields();
          List<String> excludedFieldList = excludeFields != null ? Arrays.asList(excludeFields) : Collections.<String>emptyList();
          AccessibleObject.setAccessible(fields, true);
          for (int i = 0; i < fields.length && builder.isEquals; i++) {
              Field f = fields[i];
              if (!excludedFieldList.contains(f.getName())
                  && (f.getName().indexOf('$') == -1)
                  && (useTransients || !Modifier.isTransient(f.getModifiers()))
                  && (!Modifier.isStatic(f.getModifiers()))) {
                  try {
                      builder.append(f.get(lhs), f.get(rhs));
                  } catch (IllegalAccessException e) {
                      //this can't happen. Would get a Security exception instead
                      //throw a runtime exception in case the impossible happens.
                      throw new InternalError("Unexpected IllegalAccessException");
                  }
              }
          }
      }