code: protected void setupPropertyDescs() {
          final Method[] methods = beanClass.getMethods();
          for (int i = 0; i < methods.length; i++) {
              final Method method = methods[i];
              if (LdiMethodUtil.isBridgeMethod(method) || LdiMethodUtil.isSyntheticMethod(method)) {
                  continue;
              }
              final String methodName = method.getName();
              if (methodName.startsWith("get")) {
                  if (method.getParameterTypes().length != 0 || methodName.equals("getClass") || method.getReturnType() == void.class) {
                      continue;
                  }
                  final String propertyName = decapitalizePropertyName(methodName.substring(3));
                  setupReadMethod(method, propertyName);
              } else if (methodName.startsWith("is")) {
                  if (method.getParameterTypes().length != 0
                          || !method.getReturnType().equals(Boolean.TYPE) && !method.getReturnType().equals(Boolean.class)) {
                      continue;
                  }
                  final String propertyName = decapitalizePropertyName(methodName.substring(2));
                  setupReadMethod(method, propertyName);
              } else if (methodName.startsWith("set")) {
                  if (method.getParameterTypes().length != 1 || methodName.equals("setClass") || method.getReturnType() != void.class) {
                      continue;
                  }
                  final String propertyName = decapitalizePropertyName(methodName.substring(3));
                  setupWriteMethod(method, propertyName);
              }
          }
          for (Iterator<?> i = invalidPropertyNames.iterator(); i.hasNext();) {
              propertyDescCache.remove(i.next());
          }
          invalidPropertyNames.clear();
      }
docs: ===============