private MethodSpec messageAdapterEncode(NameAllocator nameAllocator, MessageType type, TypeName javaType, boolean useBuilder) { MethodSpec.Builder result = MethodSpec.methodBuilder("encode") .addAnnotation(Override.class) .addModifiers(PUBLIC) .addParameter(ProtoWriter.class, "writer") .addParameter(javaType, "value") .addException(IOException.class); for (Field field : type.fieldsAndOneOfFields()) { int fieldTag = field.tag(); CodeBlock adapter = adapterFor(field); result.addCode("$L.encodeWithTag(writer, $L, ", adapter, fieldTag) .addCode((useBuilder ? "value.$L" : "$L(value)"), nameAllocator.get(field)) .addCode(");\n"); } if (useBuilder) { result.addStatement("writer.writeBytes(value.unknownFields())"); } return result.build(); }
public ProtoAdapter<Object> get(ProtoType protoType) { if (protoType.isMap()) throw new UnsupportedOperationException("map types not supported"); ProtoAdapter<?> result = adapterMap.get(protoType); if (result != null) { return (ProtoAdapter<Object>) result; } Type type = schema.getType(protoType); if (type == null) { throw new IllegalArgumentException("unknown type: " + protoType); } if (type instanceof EnumType) { EnumAdapter enumAdapter = new EnumAdapter((EnumType) type); adapterMap.put(protoType, enumAdapter); return enumAdapter; } if (type instanceof MessageType) { MessageAdapter messageAdapter = new MessageAdapter(includeUnknown); // Put the adapter in the map early to mitigate the recursive calls to get() made below. adapterMap.put(protoType, messageAdapter); for (com.squareup.wire.schema.Field field : ((MessageType) type).fields()) { Field fieldAdapter = new Field( field.name(), field.tag(), field.isRepeated(), get(field.type())); messageAdapter.fieldsByName.put(field.name(), fieldAdapter); messageAdapter.fieldsByTag.put(field.tag(), fieldAdapter); } return (ProtoAdapter) messageAdapter; } throw new IllegalArgumentException("unexpected type: " + protoType); }
private MethodSpec messageAdapterEncodedSize(NameAllocator nameAllocator, MessageType type, TypeName javaType, boolean useBuilder) { MethodSpec.Builder result = MethodSpec.methodBuilder("encodedSize") .addAnnotation(Override.class) .addModifiers(PUBLIC) .returns(int.class) .addParameter(javaType, "value"); result.addCode("$["); String leading = "return"; for (Field field : type.fieldsAndOneOfFields()) { int fieldTag = field.tag(); String fieldName = nameAllocator.get(field); CodeBlock adapter = adapterFor(field); result.addCode("$L $L.encodedSizeWithTag($L, ", leading, adapter, fieldTag) .addCode((useBuilder ? "value.$L" : "$L(value)"), fieldName) .addCode(")"); leading = "\n+"; } if (useBuilder) { result.addCode("$L value.unknownFields().size()", leading); } result.addCode(";$]\n", leading); return result.build(); }
Multimap<String, Field> nameToField = LinkedHashMultimap.create(); for (Field field : fields) { int tag = field.tag(); if (!Util.isValidTag(tag)) { withContext(field).addError("tag is out of range: %s", tag);
@Test public void messsageAndExtensionNameCollision() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "message Message {\n" + " optional string a = 1;\n" + "}\n") .add("extend.proto", "" + "package p;\n" + "import \"message.proto\";\n" + "extend Message {\n" + " optional string a = 2;\n" + "}\n") .schema(); MessageType messageType = (MessageType) schema.getType("Message"); assertThat(messageType.field("a").tag()).isEqualTo(1); assertThat(messageType.extensionField("p.a").tag()).isEqualTo(2); }
int fieldTag = field.tag();
private AnnotationSpec wireFieldAnnotation(Field field) { AnnotationSpec.Builder result = AnnotationSpec.builder(WireField.class); int tag = field.tag(); result.addMember("tag", String.valueOf(tag)); if (field.type().isMap()) { result.addMember("keyAdapter", "$S", adapterString(field.type().keyType())); result.addMember("adapter", "$S", adapterString(field.type().valueType())); } else { result.addMember("adapter", "$S", adapterString(field.type())); } if (!field.isOptional()) { if (field.isPacked()) { result.addMember("label", "$T.PACKED", WireField.Label.class); } else if (field.label() != null) { result.addMember("label", "$T.$L", WireField.Label.class, field.label()); } } if (field.isRedacted()) { result.addMember("redacted", "true"); } return result.build(); }
private MethodSpec messageAdapterEncode(NameAllocator nameAllocator, MessageType type, TypeName javaType) { MethodSpec.Builder result = MethodSpec.methodBuilder("encode") .addAnnotation(Override.class) .addModifiers(PUBLIC) .addParameter(ProtoWriter.class, "writer") .addParameter(javaType, "value") .addException(IOException.class); for (Field field : type.fieldsAndOneOfFields()) { int fieldTag = field.tag(); String fieldName = nameAllocator.get(field); CodeBlock adapter = adapterFor(field); if (!field.isRequired() && !field.isRepeated() && !field.type().isMap()) { result.addCode("if (value.$L != null) ", fieldName); } result.addStatement("$L.encodeWithTag(writer, $L, value.$L)", adapter, fieldTag, fieldName); } result.addStatement("writer.writeBytes(value.unknownFields())"); return result.build(); }
public ProtoAdapter<Object> get(ProtoType protoType) { if (protoType.isMap()) throw new UnsupportedOperationException("map types not supported"); ProtoAdapter<?> result = adapterMap.get(protoType); if (result != null) { return (ProtoAdapter<Object>) result; } Type type = schema.getType(protoType); if (type == null) { throw new IllegalArgumentException("unknown type: " + protoType); } if (type instanceof EnumType) { EnumAdapter enumAdapter = new EnumAdapter((EnumType) type); adapterMap.put(protoType, enumAdapter); return enumAdapter; } if (type instanceof MessageType) { MessageAdapter messageAdapter = new MessageAdapter(includeUnknown); // Put the adapter in the map early to mitigate the recursive calls to get() made below. adapterMap.put(protoType, messageAdapter); for (com.squareup.wire.schema.Field field : ((MessageType) type).fields()) { Field fieldAdapter = new Field( field.name(), field.tag(), field.isRepeated(), get(field.type())); messageAdapter.fieldsByName.put(field.name(), fieldAdapter); messageAdapter.fieldsByTag.put(field.tag(), fieldAdapter); } return (ProtoAdapter) messageAdapter; } throw new IllegalArgumentException("unexpected type: " + protoType); }
public ProtoAdapter<Object> get(ProtoType protoType) { if (protoType.isMap()) throw new UnsupportedOperationException("map types not supported"); ProtoAdapter<?> result = adapterMap.get(protoType); if (result != null) { return (ProtoAdapter<Object>) result; } Type type = schema.getType(protoType); if (type == null) { throw new IllegalArgumentException("unknown type: " + protoType); } if (type instanceof EnumType) { EnumAdapter enumAdapter = new EnumAdapter((EnumType) type); adapterMap.put(protoType, enumAdapter); return enumAdapter; } if (type instanceof MessageType) { MessageAdapter messageAdapter = new MessageAdapter(includeUnknown); // Put the adapter in the map early to mitigate the recursive calls to get() made below. adapterMap.put(protoType, messageAdapter); for (com.squareup.wire.schema.Field field : ((MessageType) type).fields()) { Field fieldAdapter = new Field( field.name(), field.tag(), field.isRepeated(), get(field.type())); messageAdapter.fieldsByName.put(field.name(), fieldAdapter); messageAdapter.fieldsByTag.put(field.tag(), fieldAdapter); } return (ProtoAdapter) messageAdapter; } throw new IllegalArgumentException("unexpected type: " + protoType); }
Multimap<String, Field> nameToField = LinkedHashMultimap.create(); for (Field field : fields) { int tag = field.tag(); if (!Util.isValidTag(tag)) { withContext(field).addError("tag is out of range: %s", tag);
Multimap<String, Field> nameToField = LinkedHashMultimap.create(); for (Field field : fields) { int tag = field.tag(); if (!Util.isValidTag(tag)) { withContext(field).addError("tag is out of range: %s", tag);
private MethodSpec messageAdapterEncodedSize(NameAllocator nameAllocator, MessageType type, TypeName javaType) { MethodSpec.Builder result = MethodSpec.methodBuilder("encodedSize") .addAnnotation(Override.class) .addModifiers(PUBLIC) .returns(int.class) .addParameter(javaType, "value"); result.addCode("$["); String leading = "return"; for (Field field : type.fieldsAndOneOfFields()) { int fieldTag = field.tag(); String fieldName = nameAllocator.get(field); CodeBlock adapter = adapterFor(field); if (field.isRequired() || field.isRepeated() || field.type().isMap()) { result.addCode("$L $L.encodedSizeWithTag($L, value.$L)", leading, adapter, fieldTag, fieldName); } else { result.addCode("$1L (value.$4L != null ? $2L.encodedSizeWithTag($3L, value.$4L) : 0)", leading, adapter, fieldTag, fieldName); } leading = "\n+"; } result.addCode("$L value.unknownFields().size();$]\n", leading); return result.build(); }
int fieldTag = field.tag(); String fieldName = nameAllocator.get(field); CodeBlock adapter = singleAdapterFor(field);
private AnnotationSpec wireFieldAnnotation(Field field, ImmutableList<OneOf> oneOVES) { AnnotationSpec.Builder result = AnnotationSpec.builder(RaptorField.class); ProtoType type = field.type(); result.addMember("fieldType", "$S", getTypeString(type)); if (type.isMap()) { result.addMember("keyType", "$S", getTypeString(type.keyType())); } int tag = field.tag(); result.addMember("order", String.valueOf(tag)); result.addMember("name", "$S", field.name()); if (type.isMap()) { result.addMember("isMap", "true"); } if (field.isRepeated()) { result.addMember("repeated", "true"); } for (OneOf oneOF : oneOVES) { if (oneOF.fields().contains(field)) { result.addMember("oneof", "$S", oneOF.name()); } } return result.build(); }
private AnnotationSpec wireFieldAnnotation(Field field) { AnnotationSpec.Builder result = AnnotationSpec.builder(WireField.class); int tag = field.tag(); result.addMember("tag", String.valueOf(tag)); if (field.type().isMap()) { result.addMember("keyAdapter", "$S", adapterString(field.type().keyType())); result.addMember("adapter", "$S", adapterString(field.type().valueType())); } else { result.addMember("adapter", "$S", adapterString(field.type())); } if (!field.isOptional()) { if (field.isPacked()) { result.addMember("label", "$T.PACKED", WireField.Label.class); } else if (field.label() != null) { result.addMember("label", "$T.$L", WireField.Label.class, field.label()); } } if (field.isRedacted()) { result.addMember("redacted", "true"); } return result.build(); }