code: private static Class<?> getGenericFieldType(Field field, Class<?> source, int typeIndex,
  			Map<Integer, Integer> typeIndexesPerLevel, int nestingLevel) {
  		return extractType(field.getGenericType(), source, typeIndex, null, typeIndexesPerLevel, nestingLevel, 1);
  	}
docs: Extract the generic type from the given field.
  @param field the field to check the type for
  @param source the source class/interface defining the generic parameter types
  @param typeIndex the index of the type (e.g. 0 for Collections,
  0 for Map keys, 1 for Map values)
  @param nestingLevel the nesting level of the target type
  @return the generic type, or {@code null} if none