private Map<Object, Object> verifyMap(
Object value,
TypeName keyTypeName,
FieldType valueType,
boolean valueTypeNullable,
String fieldName) {
if (!(value instanceof Map)) {
throw new IllegalArgumentException(
String.format(
"For field name %s and map type expected Map class. Instead "
+ "class type was %s.",
fieldName, value.getClass()));
}
Map<Object, Object> valueMap = (Map<Object, Object>) value;
Map<Object, Object> verifiedMap = Maps.newHashMapWithExpectedSize(valueMap.size());
for (Entry<Object, Object> kv : valueMap.entrySet()) {
if (kv.getValue() == null) {
if (!valueTypeNullable) {
throw new IllegalArgumentException(
String.format("%s is not nullable in Map field %s", valueType, fieldName));
}
verifiedMap.put(verifyPrimitiveType(kv.getKey(), keyTypeName, fieldName), null);
} else {
verifiedMap.put(
verifyPrimitiveType(kv.getKey(), keyTypeName, fieldName),
verify(kv.getValue(), valueType, fieldName));
}
}
return verifiedMap;
}