private int doSchemaMapping()

in core/src/main/java/com/twitter/elephantbird/util/ThriftToDynamicProto.java [178:221]


  private int doSchemaMapping(DescriptorProtos.DescriptorProto.Builder desBuilder,
      TStructDescriptor fieldDesc) throws DescriptorValidationException {
    int maxThriftId = 0;
    for (Field tField : fieldDesc.getFields()) {
      maxThriftId = Math.max(tField.getFieldId(), maxThriftId);

      if (supportNestedObjects && tField.isMap()) {
        String typeName = mapProtoMessageType(fieldDesc, tField);
        if (descriptorBuilderMap.get(typeName) == null) {
          DescriptorProtos.DescriptorProto.Builder mapBuilder =
            mapDescriptorProtoBuilder(tField, typeName);

          descriptorBuilderMap.put(typeName, mapBuilder);
          addProtoField(desBuilder, tField.getName(), tField.getFieldId() + 1, typeName, true);
        }
      } else {
        Field field = resolveField(tField);
        Type protoType = thriftTypeToProtoType(field);
        boolean isContainer = isContainer(tField);

        if (supportNestedObjects && protoType == Type.TYPE_MESSAGE) {
          String typeName = resolveMessageTypeName(field.gettStructDescriptor());

          // Protobuf field ids start at 1. Thrift starts at 0.
          addProtoField(desBuilder,
                        tField.getName(),
                        tField.getFieldId() + 1,
                        typeName,
                        isContainer);
        } else if (protoType != null) {
          if (supportNestedObjects
             || (!supportNestedObjects && !hasNestedObject(tField))) {
            addProtoField(desBuilder,
                          tField.getName(),
                          tField.getFieldId() + 1,
                          protoType,
                          isContainer);
          }
        }
      }
    }

    return maxThriftId;
  }