diff options
author | Brian Duff <bduff@google.com> | 2013-09-30 20:49:13 -0700 |
---|---|---|
committer | Brian Duff <bduff@google.com> | 2013-10-07 16:25:55 -0700 |
commit | 0b8579237336f221711a0aac42400eb31a58fed3 (patch) | |
tree | ac6553ae2998404642d43dfacd5d56a1a03412bf /src/google/protobuf/compiler/javanano/javanano_primitive_field.cc | |
parent | 9827c718c45cfa1744a3b0f8fc27dac9cd415603 (diff) | |
download | external_protobuf-0b8579237336f221711a0aac42400eb31a58fed3.zip external_protobuf-0b8579237336f221711a0aac42400eb31a58fed3.tar.gz external_protobuf-0b8579237336f221711a0aac42400eb31a58fed3.tar.bz2 |
Add reftypes field generator option.
This option generates fields as reference types, and serializes
based on nullness.
Change-Id: Ic32e0eebff59d14016cc9a19e15a9bb08ae0bba5
Signed-off-by: Brian Duff <bduff@google.com>
Diffstat (limited to 'src/google/protobuf/compiler/javanano/javanano_primitive_field.cc')
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_primitive_field.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc index 69664d3..ec93cef 100644 --- a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc @@ -245,7 +245,12 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor, const Params param (*variables)["capitalized_name"] = RenameJavaKeywords(UnderscoresToCapitalizedCamelCase(descriptor)); (*variables)["number"] = SimpleItoa(descriptor->number()); - (*variables)["type"] = PrimitiveTypeName(GetJavaType(descriptor)); + if (params.use_reference_types_for_primitives() + && !descriptor->is_repeated()) { + (*variables)["type"] = BoxedPrimitiveTypeName(GetJavaType(descriptor)); + } else { + (*variables)["type"] = PrimitiveTypeName(GetJavaType(descriptor)); + } (*variables)["default"] = DefaultValue(params, descriptor); (*variables)["default_constant"] = FieldDefaultConstantName(descriptor); // For C++-string types (string and bytes), we might need to have @@ -254,7 +259,8 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor, const Params param // once into a "private static final" field and re-use that from // then on. if (descriptor->cpp_type() == FieldDescriptor::CPPTYPE_STRING && - !descriptor->default_value_string().empty()) { + !descriptor->default_value_string().empty() && + !params.use_reference_types_for_primitives()) { string default_value; if (descriptor->type() == FieldDescriptor::TYPE_BYTES) { default_value = strings::Substitute( @@ -315,6 +321,7 @@ GenerateMembers(io::Printer* printer) const { printer->Print(variables_, "private static final $type$ $default_constant$ = $default_constant_value$;\n"); } + printer->Print(variables_, "public $type$ $name$ = $default_copy_if_needed$;\n"); @@ -348,6 +355,13 @@ GenerateMergingCode(io::Printer* printer) const { void PrimitiveFieldGenerator:: GenerateSerializationConditional(io::Printer* printer) const { + if (params_.use_reference_types_for_primitives()) { + // For reference type mode, serialize based on equality + // to null. + printer->Print(variables_, + "if (this.$name$ != null) {\n"); + return; + } if (params_.generate_has()) { printer->Print(variables_, "if (has$capitalized_name$ || "); |