private void writeType(AnnotatedDescriptor descriptor) { if (descriptor != null && nestingLevel.previous == null && nestingLevel.isFirstField) { missingType = false; nestingLevel.isFirstField = false; if (prettyPrint) { indent(); } jsonOut.append('\"').append("_type").append('\"').append(':'); if (prettyPrint) { jsonOut.append(' '); } String type; if (descriptor instanceof FieldDescriptor) { type = FieldDescriptor.class.cast(descriptor).getTypeName(); } else { type = descriptor.getFullName(); } jsonOut.append('\"').append(type).append('\"'); } }
@Override public void onEnd() { if (nestingLevel.repeatedFieldDescriptor != null) { endArraySlot(); } if (prettyPrint) { nestingLevel.indent--; indent(); } jsonOut.append('}'); nestingLevel = null; if (prettyPrint) { jsonOut.append('\n'); } }
private void startSlot(FieldDescriptor fieldDescriptor) { if (nestingLevel.repeatedFieldDescriptor != null && nestingLevel.repeatedFieldDescriptor != fieldDescriptor) { endArraySlot(); } if (nestingLevel.isFirstField) { nestingLevel.isFirstField = false; } else { jsonOut.append(','); } if (!fieldDescriptor.isRepeated() || nestingLevel.repeatedFieldDescriptor == null) { if (prettyPrint) { indent(); } if (fieldDescriptor.getLabel() == Label.ONE_OF) { jsonOut.append('"').append(JSON_VALUE_FIELD).append("\":"); } else { jsonOut.append('"').append(fieldDescriptor.getName()).append("\":"); } } if (prettyPrint) { jsonOut.append(' '); } if (fieldDescriptor.isRepeated() && nestingLevel.repeatedFieldDescriptor == null) { nestingLevel.repeatedFieldDescriptor = fieldDescriptor; jsonOut.append('['); } }
@Override public void onStartNested(int fieldNumber, FieldDescriptor fieldDescriptor) { if (fieldDescriptor == null) { // unknown field, ignore return; } startSlot(fieldDescriptor); nestingLevel = new JsonNestingLevel(nestingLevel); if (prettyPrint) { indent(); nestingLevel.indent++; } jsonOut.append('{'); }
private void endArraySlot() { if (prettyPrint && nestingLevel.repeatedFieldDescriptor.getType() == Type.MESSAGE) { indent(); } nestingLevel.repeatedFieldDescriptor = null; jsonOut.append(']'); } };
@Override public void onEndNested(int fieldNumber, FieldDescriptor fieldDescriptor) { if (nestingLevel.repeatedFieldDescriptor != null) { endArraySlot(); } if (prettyPrint) { nestingLevel.indent--; indent(); } jsonOut.append('}'); nestingLevel = nestingLevel.previous; }
@Override public void onStart(GenericDescriptor descriptor) { nestingLevel = new JsonNestingLevel(null); if (prettyPrint) { indent(); nestingLevel.indent++; } jsonOut.append('{'); writeType(descriptor); }