in lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java [329:381]
private JsonNode getDefault(FieldDescriptor f) {
if (f.isRequired()) // no default
return null;
if (f.isRepeated()) // empty array as repeated fields' default value
return NODES.arrayNode();
if (f.hasDefaultValue()) { // parse spec'd default value
Object value = f.getDefaultValue();
switch (f.getType()) {
case ENUM:
value = ((EnumValueDescriptor) value).getName();
break;
}
String json = toString(value);
try {
return MAPPER.readTree(FACTORY.createParser(json));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
switch (f.getType()) { // generate default for type
case BOOL:
return NODES.booleanNode(false);
case FLOAT:
return NODES.numberNode(0.0F);
case DOUBLE:
return NODES.numberNode(0.0D);
case INT32:
case UINT32:
case SINT32:
case FIXED32:
case SFIXED32:
case INT64:
case UINT64:
case SINT64:
case FIXED64:
case SFIXED64:
return NODES.numberNode(0);
case STRING:
case BYTES:
return NODES.textNode("");
case ENUM:
return NODES.textNode(f.getEnumType().getValues().get(0).getName());
case MESSAGE:
return NODES.nullNode();
case GROUP: // groups are deprecated
default:
throw new RuntimeException("Unexpected type: " + f.getType());
}
}