Skip to content

Commit 6bf6248

Browse files
authored
Set correct number type in Var.value (#419)
1 parent c9923db commit 6bf6248

File tree

1 file changed

+43
-36
lines changed
  • AndroidSDKCore/src/main/java/com/leanplum

1 file changed

+43
-36
lines changed

AndroidSDKCore/src/main/java/com/leanplum/Var.java

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -294,49 +294,56 @@ public void setOverrideResId(int resId) {
294294
overrideResId = resId;
295295
}
296296

297+
/**
298+
* Applies correct number type to the value member based on defaultValue type.
299+
*/
297300
@SuppressWarnings("unchecked")
301+
private void modifyValue(Number src) {
302+
if (src == null)
303+
return;
304+
305+
if (defaultValue instanceof Byte) {
306+
value = (T) (Byte) src.byteValue();
307+
} else if (defaultValue instanceof Short) {
308+
value = (T) (Short) src.shortValue();
309+
} else if (defaultValue instanceof Integer) {
310+
value = (T) (Integer) src.intValue();
311+
} else if (defaultValue instanceof Long) {
312+
value = (T) (Long) src.longValue();
313+
} else if (defaultValue instanceof Float) {
314+
value = (T) (Float) src.floatValue();
315+
} else if (defaultValue instanceof Double) {
316+
value = (T) (Double) src.doubleValue();
317+
} else if (defaultValue instanceof Character) {
318+
value = (T) (Character) (char) src.intValue();
319+
}
320+
}
321+
322+
/**
323+
* Parses src to initialize numberValue. If not parsable it uses the defaultValue.
324+
*/
325+
private void modifyNumberValue(String src) {
326+
try {
327+
numberValue = Double.valueOf(src);
328+
} catch (NumberFormatException e) {
329+
numberValue = null;
330+
if (defaultValue instanceof Number) {
331+
numberValue = ((Number) defaultValue).doubleValue();
332+
}
333+
}
334+
}
335+
298336
private void cacheComputedValues() {
299337
if (value instanceof String) {
300338
stringValue = (String) value;
301-
try {
302-
numberValue = Double.valueOf(stringValue);
303-
} catch (NumberFormatException e) {
304-
numberValue = null;
305-
if (defaultValue instanceof Short) {
306-
value = (T) (Short) ((Number) defaultValue).shortValue();
307-
numberValue = Double.valueOf(((Number) defaultValue).shortValue());
308-
} else if (defaultValue instanceof Integer) {
309-
value = (T) (Integer) ((Number) defaultValue).intValue();
310-
numberValue = Double.valueOf(((Number) defaultValue).intValue());
311-
} else if (defaultValue instanceof Long) {
312-
value = (T) (Long) ((Number) defaultValue).longValue();
313-
numberValue = Double.valueOf(((Number) defaultValue).longValue());
314-
} else if (defaultValue instanceof Float) {
315-
value = (T) (Float) ((Number) defaultValue).floatValue();
316-
numberValue = Double.valueOf(((Number) defaultValue).floatValue());
317-
} else if (defaultValue instanceof Double) {
318-
value = (T) (Double) ((Number) defaultValue).doubleValue();
319-
numberValue = Double.valueOf(((Number) defaultValue).doubleValue());
320-
}
321-
}
339+
modifyNumberValue(stringValue);
340+
modifyValue(numberValue);
341+
322342
} else if (value instanceof Number) {
323343
stringValue = "" + value;
324344
numberValue = ((Number) value).doubleValue();
325-
if (defaultValue instanceof Byte) {
326-
value = (T) (Byte) ((Number) value).byteValue();
327-
} else if (defaultValue instanceof Short) {
328-
value = (T) (Short) ((Number) value).shortValue();
329-
} else if (defaultValue instanceof Integer) {
330-
value = (T) (Integer) ((Number) value).intValue();
331-
} else if (defaultValue instanceof Long) {
332-
value = (T) (Long) ((Number) value).longValue();
333-
} else if (defaultValue instanceof Float) {
334-
value = (T) (Float) ((Number) value).floatValue();
335-
} else if (defaultValue instanceof Double) {
336-
value = (T) (Double) ((Number) value).doubleValue();
337-
} else if (defaultValue instanceof Character) {
338-
value = (T) (Character) (char) ((Number) value).intValue();
339-
}
345+
modifyValue((Number) value);
346+
340347
} else if (value != null &&
341348
!(value instanceof Iterable<?>) && !(value instanceof Map<?, ?>)) {
342349
stringValue = value.toString();

0 commit comments

Comments
 (0)