protected FieldSchema createRepeatedSchema()

in foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/DeserializerSchemaManager.java [185:261]


  protected <T> FieldSchema<T> createRepeatedSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
    boolean packed = ProtoUtils.isPacked(protoField);
    if (protoField.getType().isEnum()) {
      return packed ? EnumPackedReadSchemas.create(protoField, propertyDescriptor) :
          EnumNotPackedReadSchemas.create(protoField, propertyDescriptor);
    }

    if (protoField.getType().isScalar()) {
      switch ((ScalarFieldType) protoField.getType()) {
        case INT32:
          return packed ? Int32PackedReadSchemas.create(protoField, propertyDescriptor) :
              Int32NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case UINT32:
          return packed ? UInt32PackedReadSchemas.create(protoField, propertyDescriptor) :
              UInt32NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case SINT32:
          return packed ? SInt32PackedReadSchemas.create(protoField, propertyDescriptor) :
              SInt32NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case FIXED32:
          return packed ? Fixed32PackedReadSchemas.create(protoField, propertyDescriptor) :
              Fixed32NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case SFIXED32:
          return packed ? SFixed32PackedReadSchemas.create(protoField, propertyDescriptor) :
              SFixed32NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case INT64:
          return packed ? Int64PackedReadSchemas.create(protoField, propertyDescriptor) :
              Int64NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case UINT64:
          return packed ? UInt64PackedReadSchemas.create(protoField, propertyDescriptor) :
              UInt64NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case SINT64:
          return packed ? SInt64PackedReadSchemas.create(protoField, propertyDescriptor) :
              SInt64NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case FIXED64:
          return packed ? Fixed64PackedReadSchemas.create(protoField, propertyDescriptor) :
              Fixed64NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case SFIXED64:
          return packed ? SFixed64PackedReadSchemas.create(protoField, propertyDescriptor) :
              SFixed64NotPackedReadSchemas.create(protoField, propertyDescriptor);
        case FLOAT:
          return packed ? FloatPackedReadSchemas.create(protoField, propertyDescriptor) :
              FloatNotPackedReadSchemas.create(protoField, propertyDescriptor);
        case DOUBLE:
          return packed ? DoublePackedReadSchemas.create(protoField, propertyDescriptor) :
              DoubleNotPackedReadSchemas.create(protoField, propertyDescriptor);
        case BOOL:
          return packed ? BoolPackedReadSchemas.create(protoField, propertyDescriptor) :
              BoolNotPackedReadSchemas.create(protoField, propertyDescriptor);
        case STRING:
          return StringRepeatedReadSchemas.create(protoField, propertyDescriptor);
        case BYTES:
          return BytesRepeatedReadSchemas.create(protoField, propertyDescriptor);
        default:
          ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
      }
    }

    if (ProtoUtils.isAnyField(protoField)) {
      AnyEntrySchema anyEntrySchema = new AnyEntrySchema(protoMapper, null);
      return AnyRepeatedReadSchemas.create(protoField, propertyDescriptor, anyEntrySchema);
    }

    if (protoField.getType().isMessage()) {
      JavaType contentType = propertyDescriptor.getJavaType().getContentType();
      if (contentType == null) {
        contentType = ProtoConst.OBJECT_TYPE;
      }
      SchemaEx<Object> contentSchema = createMessageSchema((Message) protoField.getType(), contentType);
      if (isWrapProperty((Message) protoField.getType())) {
        return PropertyWrapperRepeatedReadSchemas.create(protoField, propertyDescriptor, contentSchema);
      }

      return MessageRepeatedReadSchemas.create(protoField, propertyDescriptor, contentSchema);
    }
    ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
    return null;
  }