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;
}