private Object getValueForField()

in stetho/src/main/java/com/facebook/stetho/json/ObjectMapper.java [125:169]


  private Object getValueForField(Field field, Object value)
      throws JSONException {
    try {
      if (value != null) {
        if (value == JSONObject.NULL) {
          return null;
        }
        if (value.getClass() == field.getType()) {
          return value;
        }
        if (value instanceof JSONObject) {
          return convertValue(value, field.getType());
        } else {
          if (field.getType().isEnum()) {
            return getEnumValue((String) value, field.getType().asSubclass(Enum.class));
          } else if (value instanceof JSONArray) {
            return convertArrayToList(field, (JSONArray) value);
          } else if (value instanceof Number) {
            // Need to convert value to Number This happens because json treats 1 as an Integer even
            // if the field is supposed to be a Long
            Number numberValue = (Number) value;
            Class<?> clazz = field.getType();
            if (clazz == Integer.class || clazz == int.class) {
              return numberValue.intValue();
            } else if (clazz == Long.class || clazz == long.class) {
              return numberValue.longValue();
            } else if (clazz == Double.class || clazz == double.class) {
              return numberValue.doubleValue();
            } else if (clazz == Float.class || clazz == float.class) {
              return numberValue.floatValue();
            } else if (clazz == Byte.class || clazz == byte.class) {
              return numberValue.byteValue();
            } else if (clazz == Short.class || clazz == short.class) {
              return numberValue.shortValue();
            } else {
              throw new IllegalArgumentException("Not setup to handle class " + clazz.getName());
            }
          }
        }
      }
    } catch (IllegalAccessException e) {
      throw new IllegalArgumentException("Unable to set value for field " + field.getName(), e);
    }
    return value;
  }