aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-03 18:15:12 -0800
committerGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-03 18:15:12 -0800
commitd5839d2b4d45a6af02fe5852ace768ab3d40b5ff (patch)
tree8c96257c57185590736778b2a3d183c886f96cbc /src
parent4d64e65f0974f56310dacd3c6f6a7425ff8e9bf3 (diff)
parsing and serialzation for maps in JavaNano.
Diffstat (limited to 'src')
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_map_field.cc25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_map_field.cc b/src/google/protobuf/compiler/javanano/javanano_map_field.cc
index 4453cdfa..dead3685 100644
--- a/src/google/protobuf/compiler/javanano/javanano_map_field.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_map_field.cc
@@ -89,6 +89,7 @@ void SetMapVariables(const Params& params,
const FieldDescriptor* value = ValueField(descriptor);
(*variables)["name"] =
RenameJavaKeywords(UnderscoresToCamelCase(descriptor));
+ (*variables)["number"] = SimpleItoa(descriptor->number());
(*variables)["key_type"] = TypeName(params, key, false);
(*variables)["boxed_key_type"] = TypeName(params,key, true);
(*variables)["key_desc_type"] =
@@ -101,9 +102,9 @@ void SetMapVariables(const Params& params,
(*variables)["value_tag"] = SimpleItoa(internal::WireFormat::MakeTag(value));
(*variables)["type_parameters"] =
(*variables)["boxed_key_type"] + ", " + (*variables)["boxed_value_type"];
- (*variables)["value_default"] =
+ (*variables)["value_class"] =
value->type() == FieldDescriptor::TYPE_MESSAGE
- ? "new " + (*variables)["value_type"] + "()"
+ ? (*variables)["value_type"] + ".class"
: "null";
}
} // namespace
@@ -132,21 +133,35 @@ GenerateClearCode(io::Printer* printer) const {
void MapFieldGenerator::
GenerateMergingCode(io::Printer* printer) const {
printer->Print(variables_,
- "$name$ = com.google.protobuf.nano.MapUtil.mergeEntry(\n"
- " $name$, input,\n"
+ "this.$name$ = com.google.protobuf.nano.MapUtil.Internal.mergeEntry(\n"
+ " input, this.$name$,\n"
" com.google.protobuf.nano.InternalNano.$key_desc_type$,\n"
" com.google.protobuf.nano.InternalNano.$value_desc_type$,\n"
- " $value_default$,\n"
+ " $value_class$,\n"
" $key_tag$, $value_tag$);\n"
"\n");
}
void MapFieldGenerator::
GenerateSerializationCode(io::Printer* printer) const {
+ printer->Print(variables_,
+ "if (this.$name$ != null) {\n"
+ " com.google.protobuf.nano.MapUtil.Internal.serializeMapField(\n"
+ " output, this.$name$, $number$,\n"
+ " com.google.protobuf.nano.InternalNano.$key_desc_type$,\n"
+ " com.google.protobuf.nano.InternalNano.$value_desc_type$);\n"
+ "}\n");
}
void MapFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
+ printer->Print(variables_,
+ "if (this.$name$ != null) {\n"
+ " size += com.google.protobuf.nano.MapUtil.Internal.computeMapFieldSize(\n"
+ " this.$name$, $number$,\n"
+ " com.google.protobuf.nano.InternalNano.$key_desc_type$,\n"
+ " com.google.protobuf.nano.InternalNano.$value_desc_type$);\n"
+ "}\n");
}
void MapFieldGenerator::