private Field()

in core/src/main/java/com/twitter/elephantbird/thrift/TStructDescriptor.java [166:220]


    private Field(TFieldIdEnum fieldIdEnum, FieldMetaData fieldMetaData, String fieldName,
                  Type genericType) {
      this.fieldIdEnum = fieldIdEnum;
      this.fieldMetaData = fieldMetaData;
      this.fieldId = fieldIdEnum == null ? 1 : fieldIdEnum.getThriftFieldId();
      this.fieldName = fieldName;
      this.ttype = getTTypeFromJavaType(genericType);

      Type firstTypeArg = null;
      Type secondTypeArg = null;

      if (genericType instanceof ParameterizedType) {
        Type[] typeArgs = ((ParameterizedType) genericType).getActualTypeArguments();
        firstTypeArg = typeArgs.length > 0 ? typeArgs[0] : null;
        secondTypeArg = typeArgs.length > 1 ? typeArgs[1] : null;
      }

      switch (ttype) {

        case TType.LIST:
          listElemField = new Field(null, null, fieldName + "_list_elem", firstTypeArg);
          break;

        case TType.MAP:
          mapKeyField = new Field(null, null, fieldName + "_map_key", firstTypeArg);
          mapValueField = new Field(null, null, fieldName + "_map_value", secondTypeArg);
          break;

        case TType.SET:
          setElemField = new Field(null, null, fieldName + "_set_elem", firstTypeArg);
          break;

        case TType.ENUM:
          enumClass = (Class<? extends TEnum>)genericType;
          enumMap = extractEnumMap(enumClass);

          ImmutableMap.Builder<Integer, TEnum> builder = ImmutableMap.builder();
          for(TEnum e : enumMap.values()) {
            builder.put(e.getValue(), e);
          }
          enumIdMap = builder.build();
          break;

        case TType.STRUCT:
          tStructDescriptor = getInstance((Class<? extends TBase<?, ?>>) genericType);
          break;

        case TType.STRING:
          isBuffer = !genericType.equals(String.class);
          break;

        default:
          // this is ok. TType.INT, TType.BYTE, etc.
      }
    }