code: private void introspectMethods(Class type, Set introspectedClasses) {
  		if (type == null || Object.class.equals(type) || introspectedClasses.contains(type)) {
  			return;
  		}
  		introspectedClasses.add(type);
  		Class[] interfaces = type.getInterfaces();
  		for (int i = 0; i < interfaces.length; i++) {
  			introspectMethods(interfaces[i], introspectedClasses);
  		}
  		introspectMethods(type.getSuperclass(), introspectedClasses);
  		Method[] methods = type.getDeclaredMethods();
  		for (int i = 0; i < methods.length; i++) {
  			String methodName = methods[i].getName();
  			if (methodName.startsWith("get") && methods[i].getParameterTypes().length == 0) {
  				readAccessors.put(getPropertyName(methodName, 3), methods[i]);
  			}
  			else if (methodName.startsWith("is") && methods[i].getParameterTypes().length == 0) {
  				readAccessors.put(getPropertyName(methodName, 2), methods[i]);
  			}
  			else if (methodName.startsWith("set") && methods[i].getParameterTypes().length == 1) {
  				writeAccessors.put(getPropertyName(methodName, 3), methods[i]);
  			}
  		}
  	}
docs: Introspect class for accessor methods. This includes methods starting
  with 'get', 'set' and 'is'.
  
  @param type class to introspect.
  @param introspectedClasses set of already inspected classes.