in johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java [492:568]
private Object convertTo(final Adapter converter, final JsonValue jsonValue, final JsonPointerTracker jsonPointer,
final Type targetType) {
final JsonValue.ValueType valueType = jsonValue != null ? jsonValue.getValueType() : null;
final AdapterKey key = getAdapterKey(converter);
if (key != null && JsonValue.class == key.getTo()) {
return converter.to(jsonValue);
}
if (jsonValue == null) {
return getNullValue(targetType);
}
if (JsonValue.ValueType.OBJECT == valueType) {
if (JsonObject.class == key.getTo() || JsonStructure.class == key.getTo()) {
return converter.to(jsonValue.asJsonObject());
}
final Object param;
try {
Type to = key.getTo();
param = buildObject(to, JsonObject.class.cast(jsonValue), to instanceof Class, jsonPointer, getSkippedConverters());
} catch (final Exception e) {
throw new MapperException(e);
}
return converter.to(param);
}
if (NULL.equals(valueType)) {
return null;
}
if (STRING.equals(valueType)) {
if (key.getTo() == JsonString.class) {
return converter.to(JsonString.class.cast(jsonValue));
}
return converter.to(JsonString.class.cast(jsonValue).getString());
}
if (TRUE.equals(valueType) || FALSE.equals(valueType)) {
if (key != null) {
if (boolean.class == key.getTo() || Boolean.class == key.getTo()) {
return converter.to(Boolean.parseBoolean(jsonValue.toString()));
}
}
}
if (NUMBER.equals(valueType)) {
if (key != null) {
if (Long.class == key.getTo() || long.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).longValue());
} else if (Integer.class == key.getTo() || int.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).intValue());
} else if (Double.class == key.getTo() || double.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).doubleValue());
} else if (Float.class == key.getTo() || float.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).doubleValue());
} else if (BigInteger.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).bigIntegerValue());
} else if (BigDecimal.class == key.getTo() || Number.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue).bigDecimalValue());
} else if (JsonNumber.class == key.getTo()) {
return converter.to(JsonNumber.class.cast(jsonValue));
}
}
}
if (ARRAY.equals(valueType)) {
if (JsonArray.class == key.getTo() || JsonStructure.class == key.getTo()) {
return converter.to(jsonValue.asJsonObject());
}
if (TypeAwareAdapter.class.isInstance(converter)) {
final TypeAwareAdapter adapter = TypeAwareAdapter.class.cast(converter);
if (adapter.getFrom().equals(targetType)) {
return converter.to(readObject(jsonValue, adapter.getTo()));
}
}
return buildArray(key.getTo(), jsonValue.asJsonArray(), null, null, jsonPointer, null);
}
return converter.to(jsonValue.toString());
}