in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/JavaGenerator.java [591:672]
private void generateMethodSerializedSize(MessageDescriptor m) {
p("public int serializedSizeUnframed() {");
indent();
if( deferredDecode ) {
p("if (encodedForm != null) {");
indent();
p("return encodedForm.length;");
unindent();
p("}");
}
p("if (memoizedSerializedSize != -1)");
p(" return memoizedSerializedSize;");
p();
p("int size = 0;");
for (FieldDescriptor field : m.getFields().values()) {
String uname = uCamel(field.getName());
String getter="get"+uname+"()";
String type = javaType(field);
p("if (has"+uname+"()) {");
indent();
if( field.getRule() == FieldDescriptor.REPEATED_RULE ) {
p("for ("+type+" i : get"+uname+"List()) {");
indent();
getter = "i";
}
if( field.getType()==FieldDescriptor.STRING_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeStringSize("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.BYTES_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeBytesSize("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.BOOL_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeBoolSize("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.DOUBLE_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeDoubleSize("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.FLOAT_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeFloatSize("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.INT32_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeInt32Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.INT64_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeInt64Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.SINT32_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeSInt32Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.SINT64_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeSInt64Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.UINT32_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeUInt32Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.UINT64_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeUInt64Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.FIXED32_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeFixed32Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.FIXED64_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeFixed64Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.SFIXED32_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeSFixed32Size("+field.getTag()+", "+getter+");");
} else if( field.getType()==FieldDescriptor.SFIXED64_TYPE ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeSFixed64Size("+field.getTag()+", "+getter+");");
} else if( field.getTypeDescriptor().isEnum() ) {
p("size += org.apache.activemq.protobuf.CodedOutputStream.computeEnumSize("+field.getTag()+", "+getter+".getNumber());");
} else if ( field.getGroup()!=null ) {
p("size += computeGroupSize("+field.getTag()+", "+getter+");");
} else {
p("size += computeMessageSize("+field.getTag()+", "+getter+");");
}
if( field.getRule() == FieldDescriptor.REPEATED_RULE ) {
unindent();
p("}");
}
//TODO: finish this up.
unindent();
p("}");
}
// TODO: handle unknown fields
// size += getUnknownFields().getSerializedSize();");
p("memoizedSerializedSize = size;");
p("return size;");
unindent();
p("}");
p();
}