private static Object fixValue(String type, Object value)
{
if (value == null) {
return null;
}
TypeSignature signature = parseTypeSignature(type);
if (signature.getBase().equals("array")) {
List<Object> fixedValue = new ArrayList<>();
for (Object object : List.class.cast(value)) {
fixedValue.add(fixValue(signature.getParameters().get(0).toString(), object));
}
return fixedValue;
}
if (signature.getBase().equals("map")) {
String keyType = signature.getParameters().get(0).toString();
String valueType = signature.getParameters().get(1).toString();
Map<Object, Object> fixedValue = new HashMap<>();
for (Map.Entry<?, ?> entry : (Set<Map.Entry<?, ?>>) Map.class.cast(value).entrySet()) {
fixedValue.put(fixValue(keyType, entry.getKey()), fixValue(valueType, entry.getValue()));
}
return fixedValue;