code: public static Set<Member> getMembers(Class<?> clazz, Filter<Member> filter) {
  		Set<Member> members = new HashSet<Member>();
  		
  		Class<?> cursor = clazz;
  		while(cursor != null && cursor != Object.class) {
  			// get all fields and apply filters			
  			members.addAll(Filter.apply(filter, cursor.getDeclaredFields()));
  			// get all methods and apply filters
  			members.addAll(Filter.apply(filter, cursor.getDeclaredMethods()));
  			// up one step on the hierarchy
  			cursor = cursor.getSuperclass();
  		}		
  		return members;
  	}
docs: Returns the filtered set of fields and/or methods of the given class,
  including those inherited from the super-classes; if provided, complex
  filter criteria can be applied.
  
  @param clazz
  the class whose fields and methods are being retrieved.
  @param filter
  an optional filter; to get all fields pass in a {@code null} value.
  @return
  the set of fields and/or methods from the given class and its
  super-classes.