io.protostuff.compiler.model.Field Java Examples

The following examples show how to use io.protostuff.compiler.model.Field. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MessageReadSchema.java    From servicecomb-java-chassis with Apache License 2.0 6 votes vote down vote up
@Override
public void mergeFrom(InputEx input, T message) throws IOException {
  FieldSchema<T> fieldSchema = null;
  try {
    for (int n = input.readFieldNumber(); n != 0; ) {
      fieldSchema = fieldMap.getFieldByNumber(n);
      if (fieldSchema != null) {
        n = fieldSchema.mergeFrom(input, message);
        continue;
      }

      input.handleUnknownField(n);
      n = input.readFieldNumber();
    }
  } catch (Throwable e) {
    Field protoField = fieldSchema.getProtoField();
    LOGGER.error("Failed to mergeFrom, field={}:{}, type={}",
        protoField.getType().getCanonicalName(),
        protoField.getName(),
        protoField.getTypeName(),
        e.getMessage());
    throw e;
  }
}
 
Example #2
Source File: MessageReadSchema.java    From servicecomb-java-chassis with Apache License 2.0 6 votes vote down vote up
private void createFieldMap() {
  DeserializerSchemaManager deserializerSchemaManager = protoMapper.getDeserializerSchemaManager();
  BeanDescriptor beanDescriptor = protoMapper.getBeanDescriptorManager().getOrCreateBeanDescriptor(javaType);

  List<FieldSchema<T>> fieldSchemas = new ArrayList<>();
  for (PropertyDescriptor propertyDescriptor : beanDescriptor.getPropertyDescriptors().values()) {
    Field protoField = message.getField(propertyDescriptor.getName());
    if (protoField == null) {
      LOGGER.info("java field {}:{} not exist in proto message {}, ignore it.",
          beanDescriptor.getJavaType().getRawClass().getName(),
          propertyDescriptor.getName(), message.getCanonicalName());
      continue;
    }
    if (propertyDescriptor.getSetter() == null) {
      LOGGER.info("no setter for java field {}:{} in proto message {}, ignore it.",
          beanDescriptor.getJavaType().getRawClass().getName(),
          propertyDescriptor.getName(), message.getCanonicalName());
      continue;
    }

    FieldSchema<T> fieldSchema = deserializerSchemaManager.createSchemaField(protoField, propertyDescriptor);
    fieldSchemas.add(fieldSchema);
  }

  this.fieldMap = FieldMapEx.createFieldMap(fieldSchemas);
}
 
Example #3
Source File: MessageWriteSchema.java    From servicecomb-java-chassis with Apache License 2.0 6 votes vote down vote up
private FieldMapEx<T> createPojoFields(Type type) {
  SerializerSchemaManager serializerSchemaManager = protoMapper.getSerializerSchemaManager();
  BeanDescriptor beanDescriptor = protoMapper.getBeanDescriptorManager().getOrCreateBeanDescriptor(type);

  List<FieldSchema<T>> fieldSchemas = new ArrayList<>();
  for (Field protoField : message.getFields()) {
    PropertyDescriptor propertyDescriptor = beanDescriptor.getPropertyDescriptors().get(protoField.getName());
    if (propertyDescriptor == null) {
      continue;
    }

    Object getter = propertyDescriptor.getGetter();
    if (getter == null) {
      continue;
    }

    FieldSchema<T> fieldSchema = serializerSchemaManager.createSchemaField(protoField, propertyDescriptor);
    fieldSchemas.add(fieldSchema);
  }

  return FieldMapEx.createFieldMap(fieldSchemas);
}
 
Example #4
Source File: SchemaManager.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public FieldMapEx<Map<Object, Object>> createMapFields(Message message) {
  List<FieldSchema<Map<Object, Object>>> fieldSchemas = new ArrayList<>();
  for (Field protoField : message.getFields()) {
    PropertyDescriptor propertyDescriptor = new PropertyDescriptor();
    propertyDescriptor.setJavaType(ProtoConst.OBJECT_TYPE);
    propertyDescriptor.setGetter(new MapGetter<>(protoField.getName()));
    propertyDescriptor.setSetter(new MapSetter<>(protoField.getName()));

    FieldSchema<Map<Object, Object>> fieldSchema = createSchemaField(protoField, propertyDescriptor);
    fieldSchemas.add(fieldSchema);
  }

  return FieldMapEx.createFieldMap(fieldSchemas);
}
 
Example #5
Source File: MapSchema.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public MapSchema(Field protoField, PropertyDescriptor propertyDescriptor,
    SchemaEx<Entry<Object, Object>> entrySchema) {
  super(protoField, propertyDescriptor.getJavaType());
  this.entrySchema = new MapEntrySchema(entrySchema);
  this.getter = propertyDescriptor.getGetter();
  this.setter = propertyDescriptor.getSetter();
}
 
Example #6
Source File: AbstractWriters.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public AbstractWriters(Field protoField, Class<T[]> arrayClass) {
  this.protoField = protoField;
  int wireType = ProtoUtils.isPacked(protoField) && protoField.isRepeated() ? WireFormat.WIRETYPE_LENGTH_DELIMITED
      : FieldTypeUtils.convert(protoField.getType()).wireType;
  this.tag = WireFormat.makeTag(protoField.getTag(), wireType);
  this.tagSize = ProtobufOutputEx.computeRawVarint32Size(tag);

  if (arrayClass == null) {
    arrayClass = getFieldArgument(this.getClass(), "arrayWriter");
  }
  this.arrayClass = arrayClass;
}
 
Example #7
Source File: StringReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();

  if (char.class.equals(javaType.getRawClass())) {
    return new CharFieldStringSchema<>(protoField, propertyDescriptor);
  }

  if (String.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject() || Character.class
      .equals(javaType.getRawClass())) {
    return new StringSchema<>(protoField, propertyDescriptor);
  }

  ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
  return null;
}
 
Example #8
Source File: UInt32ReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (int.class.equals(javaType.getRawClass())) {
    return new UInt32PrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Integer.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()) {
    return new UInt32Schema<>(protoField, propertyDescriptor);
  }

  ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
  return null;
}
 
Example #9
Source File: RepeatedPrimitiveWriteSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T, PRIMITIVE_ARRAY, PRIMITIVE_WRAPPER> FieldSchema<T> create(Field protoField,
    PropertyDescriptor propertyDescriptor,
    AbstractPrimitiveWriters<PRIMITIVE_ARRAY, PRIMITIVE_WRAPPER> writers) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (writers.primitiveArrayClass == javaType.getRawClass()) {
    return new PrimitiveArraySchema<>(protoField, propertyDescriptor, writers);
  }

  return RepeatedWriteSchemas.create(protoField, propertyDescriptor, writers);
}
 
Example #10
Source File: Int64ReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (long.class.equals(javaType.getRawClass())) {
    return new LongFiledLongPrimitiveSchema<>(protoField, propertyDescriptor);
  }

  return new Int64Schema<>(protoField, propertyDescriptor);
}
 
Example #11
Source File: UserTypeValidationPostProcessor.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
private void checkReservedFieldTags(Message message, List<Field> fields) {
    List<Range> ranges = message.getReservedFieldRanges();
    for (Field field : fields) {
        int tag = field.getTag();
        for (Range range : ranges) {
            if (range.contains(tag)) {
                throw new ParserException(field, "Reserved field tag: %d", tag);
            }
        }
    }
}
 
Example #12
Source File: Fixed32WriteSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  if (int.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new Fixed32PrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Integer.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new Fixed32Schema<>(protoField, propertyDescriptor);
  }

  return new Fixed32Schema<>(protoField, propertyDescriptor);
}
 
Example #13
Source File: ProtoUtils.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static boolean isPacked(Field protoField) {
  DynamicMessage.Value dynamicMessageValue = protoField.getOptions().get("packed");
  if (dynamicMessageValue != null) {
    return dynamicMessageValue.getBoolean();
  }

  return isSupportPacked(protoField);
}
 
Example #14
Source File: BytesReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (byte[].class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()) {
    return new BytesSchema<>(protoField, propertyDescriptor);
  }

  ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
  return null;
}
 
Example #15
Source File: MessageParseListener.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
private Field createMapKeyField(Message map, String keyTypeName, SourceCodeLocation codeLocation) {
    Field keyField = new Field(map);
    keyField.setName(MAP_ENTRY_KEY);
    keyField.setTag(1);
    keyField.setIndex(1);
    keyField.setTypeName(keyTypeName);
    keyField.setModifier(OPTIONAL);
    keyField.setSourceCodeLocation(codeLocation);
    return keyField;
}
 
Example #16
Source File: UserTypeValidationPostProcessor.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
private void checkDuplicateFieldNames(List<Field> fields) {
    Map<String, Field> fieldByName = new HashMap<>();
    for (Field field : fields) {
        String name = field.getName();
        if (fieldByName.containsKey(name)) {
            throw new ParserException(field, "Duplicate field name: '%s'", name);
        }
        fieldByName.put(name, field);
    }
}
 
Example #17
Source File: FloatReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (float.class.equals(javaType.getRawClass())) {
    return new FloatPrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Float.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()) {
    return new FloatSchema<>(protoField, propertyDescriptor);
  }

  ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
  return null;
}
 
Example #18
Source File: SInt64ReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (long.class.equals(javaType.getRawClass())) {
    return new SInt64PrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Long.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()) {
    return new SInt64Schema<>(protoField, propertyDescriptor);
  }

  ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
  return null;
}
 
Example #19
Source File: EnumPackedReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (javaType.isJavaLangObject()) {
    return new EnumIntPackedSchema<>(protoField, propertyDescriptor);
  }

  return RepeatedReadSchemas
      .create(protoField, propertyDescriptor, new EnumPackedReaders(protoField, propertyDescriptor.getJavaType()));
}
 
Example #20
Source File: EnumNotPackedReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (javaType.isJavaLangObject()) {
    return new EnumIntNotPackedSchema<>(protoField, propertyDescriptor);
  }

  return RepeatedReadSchemas
      .create(protoField, propertyDescriptor, new EnumNotPackedReaders(protoField, propertyDescriptor.getJavaType()));
}
 
Example #21
Source File: MessageFieldUtil.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
/**
 * Returns a field getter by index name for proto repeated field.
 */
public static String repeatedGetByIndexMethodName(Field field) {
    if (field.isRepeated()) {
        return GETTER_PREFIX + Formatter.toPascalCase(field.getName());
    }
    throw new IllegalArgumentException(field.toString());
}
 
Example #22
Source File: BytesRepeatedReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public BytesReaders(Field protoField) {
  super(protoField);

  collectionReader = (input, collection) -> {
    while (true) {
      collection.add(input.readByteArray());

      int fieldNumber = input.readFieldNumber();
      if (fieldNumber != this.fieldNumber) {
        return fieldNumber;
      }
    }
  };
}
 
Example #23
Source File: ProtoToStringGenerator.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
private void messageToString(Message message, StringBuilder sb) {
  commentsToString(message.getCommentLines(), sb, 0);
  appendLine(sb, "message %s {", message.getName());
  for (Field field : message.getFields()) {
    sb.append("  ");
    fieldToString(field, field.isRepeated(), sb);
  }
  appendLine(sb, "}\n");
}
 
Example #24
Source File: MessageFieldUtil.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
/**
 * Returns a field setter name for proto repeated field.
 */
public static String getRepeatedFieldSetterName(Field field) {
    if (field.isRepeated()) {
        return SETTER_PREFIX + Formatter.toPascalCase(field.getName());
    }
    throw new IllegalArgumentException(field.toString());
}
 
Example #25
Source File: IntRepeatedReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor,
    AbstractPrimitiveReaders<int[], Integer> readers) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (int[].class.equals(javaType.getRawClass())) {
    return new IntPrimitiveArraySchema<>(protoField, propertyDescriptor, readers);
  }

  return RepeatedReadSchemas.create(protoField, propertyDescriptor, readers);
}
 
Example #26
Source File: DoubleWriteSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  if (double.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new DoublePrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Double.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new DoubleSchema<>(protoField, propertyDescriptor);
  }

  return new DoubleSchema<>(protoField, propertyDescriptor);
}
 
Example #27
Source File: MessageFieldUtil.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
/**
 * Returns "putAll" method name for map field.
 */
public static String getMapFieldAddAllName(Field field) {
    if (field.isMap()) {
        return "putAll" + Formatter.toPascalCase(field.getName());
    }
    throw new IllegalArgumentException(field.toString());
}
 
Example #28
Source File: UInt64WriteSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  if (long.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new UInt64PrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Long.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
    return new UInt64Schema<>(protoField, propertyDescriptor);
  }

  return new UInt64Schema<>(protoField, propertyDescriptor);
}
 
Example #29
Source File: MessageFieldUtil.java    From protostuff-compiler with Apache License 2.0 5 votes vote down vote up
/**
 * Returns a java field getter name for proto repeated field.
 */
public static String getRepeatedFieldGetterName(Field field) {
    if (field.isRepeated()) {
        return GETTER_PREFIX + Formatter.toPascalCase(field.getName()) + GETTER_REPEATED_SUFFIX;
    }
    throw new IllegalArgumentException(field.toString());
}
 
Example #30
Source File: Fixed32ReadSchemas.java    From servicecomb-java-chassis with Apache License 2.0 5 votes vote down vote up
public static <T> FieldSchema<T> create(Field protoField, PropertyDescriptor propertyDescriptor) {
  JavaType javaType = propertyDescriptor.getJavaType();
  if (int.class.equals(javaType.getRawClass())) {
    return new Fixed32PrimitiveSchema<>(protoField, propertyDescriptor);
  }

  if (Integer.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()) {
    return new Fixed32Schema<>(protoField, propertyDescriptor);
  }

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