diff options
author | Jan Tattermusch <jtattermusch@users.noreply.github.com> | 2015-06-01 12:31:18 -0700 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@users.noreply.github.com> | 2015-06-01 12:31:18 -0700 |
commit | ad174e0391bd6251ee522ec36bc8d3b83ebc213c (patch) | |
tree | ef800fa4f2211046545bdc97d4605c9584468888 /src | |
parent | 802e1848ada7d95e867b178314ee89629680c771 (diff) | |
parent | a21a2cf7d39648fa8fe7e98789d0590e336a471f (diff) | |
download | protobuf-ad174e0391bd6251ee522ec36bc8d3b83ebc213c.tar.gz protobuf-ad174e0391bd6251ee522ec36bc8d3b83ebc213c.tar.bz2 protobuf-ad174e0391bd6251ee522ec36bc8d3b83ebc213c.zip |
Merge pull request #441 from anandolee/master
Change the C# enum generator inherit from primitive generator
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/compiler/csharp/csharp_enum_field.cc | 168 | ||||
-rw-r--r-- | src/google/protobuf/compiler/csharp/csharp_enum_field.h | 23 |
2 files changed, 23 insertions, 168 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc index a2d8a98b..28f5a05c 100644 --- a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc +++ b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc @@ -48,81 +48,10 @@ namespace csharp { EnumFieldGenerator::EnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal) - : FieldGeneratorBase(descriptor, fieldOrdinal) { - if (SupportFieldPresence(descriptor_->file())) { - has_property_check = "has" + property_name(); - } else { - has_property_check = property_name() + " != " + default_value(); - } + : PrimitiveFieldGenerator(descriptor, fieldOrdinal) { } EnumFieldGenerator::~EnumFieldGenerator() { - -} - -void EnumFieldGenerator::GenerateMembers(Writer* writer) { - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("private bool has$0$;", property_name()); - } - writer->WriteLine("private $0$ $1$_ = $2$;", type_name(), name(), - default_value()); - AddDeprecatedFlag(writer); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("public bool Has$0$ {", property_name()); - writer->WriteLine(" get { return has$0$; }", property_name()); - writer->WriteLine("}"); - } - AddPublicMemberAttributes(writer); - writer->WriteLine("public $0$ $1$ {", type_name(), property_name()); - writer->WriteLine(" get { return $0$_; }", name()); - writer->WriteLine("}"); -} - -void EnumFieldGenerator::GenerateBuilderMembers(Writer* writer) { - AddDeprecatedFlag(writer); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("public bool Has$0$ {", property_name()); - writer->WriteLine(" get { return result.has$0$; }", property_name()); - writer->WriteLine("}"); - } - AddPublicMemberAttributes(writer); - writer->WriteLine("public $0$ $1$ {", type_name(), property_name()); - writer->WriteLine(" get { return result.$0$; }", property_name()); - writer->WriteLine(" set { Set$0$(value); }", property_name()); - writer->WriteLine("}"); - AddPublicMemberAttributes(writer); - writer->WriteLine("public Builder Set$0$($1$ value) {", property_name(), - type_name()); - writer->WriteLine(" PrepareBuilder();"); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine(" result.has$0$ = true;", property_name()); - } - writer->WriteLine(" result.$0$_ = value;", name()); - writer->WriteLine(" return this;"); - writer->WriteLine("}"); - AddDeprecatedFlag(writer); - writer->WriteLine("public Builder Clear$0$() {", property_name()); - writer->WriteLine(" PrepareBuilder();"); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine(" result.has$0$ = false;", property_name()); - } - writer->WriteLine(" result.$0$_ = $1$;", name(), default_value()); - writer->WriteLine(" return this;"); - writer->WriteLine("}"); -} - -void EnumFieldGenerator::GenerateMergingCode(Writer* writer) { - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("if (other.Has$0$) {", property_name()); - } else { - writer->WriteLine("if (other.$0$ != $1$) {", property_name(), default_value()); - } - writer->WriteLine(" $0$ = other.$0$;", property_name()); - writer->WriteLine("}"); -} - -void EnumFieldGenerator::GenerateBuildingCode(Writer* writer) { - // Nothing to do here for enum types } void EnumFieldGenerator::GenerateParsingCode(Writer* writer) { @@ -160,91 +89,14 @@ void EnumFieldGenerator::GenerateSerializedSizeCode(Writer* writer) { writer->WriteLine("}"); } -void EnumFieldGenerator::WriteHash(Writer* writer) { - writer->WriteLine("if ($0$) {", has_property_check); - writer->WriteLine(" hash ^= $0$_.GetHashCode();", name()); - writer->WriteLine("}"); -} -void EnumFieldGenerator::WriteEquals(Writer* writer) { - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine( - "if (has$0$ != other.has$0$ || (has$0$ && !$1$_.Equals(other.$1$_))) return false;", - property_name(), name()); - } else { - writer->WriteLine( - "if (!$0$_.Equals(other.$0$_)) return false;", name()); - } -} -void EnumFieldGenerator::WriteToString(Writer* writer) { - writer->WriteLine("PrintField(\"$0$\", $1$, $2$_, writer);", - descriptor_->name(), has_property_check, name()); -} - EnumOneofFieldGenerator::EnumOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal) - : EnumFieldGenerator(descriptor, fieldOrdinal) { - has_property_check = oneof_name() + "Case_ == " + oneof_property_name() + - "OneofCase." + property_name(); + : PrimitiveOneofFieldGenerator(descriptor, fieldOrdinal) { } EnumOneofFieldGenerator::~EnumOneofFieldGenerator() { } -void EnumOneofFieldGenerator::GenerateMembers(Writer* writer) { - AddDeprecatedFlag(writer); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("public bool Has$0$ {", property_name()); - writer->WriteLine(" get { return $0$; }", has_property_check); - writer->WriteLine("}"); - } - AddPublicMemberAttributes(writer); - writer->WriteLine("public $0$ $1$ {", type_name(), property_name()); - writer->WriteLine(" get { return $0$ ? ($1$) $2$_ : $3$; }", - has_property_check, type_name(), oneof_name(), default_value()); - writer->WriteLine("}"); -} - -void EnumOneofFieldGenerator::GenerateBuilderMembers(Writer* writer) { - AddDeprecatedFlag(writer); - if (SupportFieldPresence(descriptor_->file())) { - writer->WriteLine("public bool Has$0$ {", property_name()); - writer->WriteLine(" get { return result.$0$; }", has_property_check); - writer->WriteLine("}"); - } - AddPublicMemberAttributes(writer); - writer->WriteLine("public $0$ $1$ {", type_name(), property_name()); - writer->WriteLine(" get { return result.$0$ ? ($1$) result.$2$_ : $3$; }", - has_property_check, type_name(), oneof_name(), default_value()); - writer->WriteLine(" set { Set$0$(value); }", property_name()); - writer->WriteLine("}"); - AddPublicMemberAttributes(writer); - writer->WriteLine("public Builder Set$0$($1$ value) {", property_name(), - type_name()); - writer->WriteLine(" PrepareBuilder();"); - writer->WriteLine(" result.$0$_ = value;", oneof_name()); - writer->WriteLine(" result.$0$Case_ = $1$OneofCase.$2$;", - oneof_name(), oneof_property_name(), property_name()); - writer->WriteLine(" return this;"); - writer->WriteLine("}"); - AddDeprecatedFlag(writer); - writer->WriteLine("public Builder Clear$0$() {", property_name()); - writer->WriteLine(" PrepareBuilder();"); - writer->WriteLine(" if (result.$0$) {", has_property_check); - writer->WriteLine(" result.$0$Case_ = $1$OneofCase.None;", - oneof_name(), oneof_property_name()); - writer->WriteLine(" }"); - writer->WriteLine(" return this;"); - writer->WriteLine("}"); -} - -void EnumOneofFieldGenerator::WriteEquals(Writer* writer) { - writer->WriteLine("if (!$0$.Equals(other.$0$)) return false;", property_name()); -} -void EnumOneofFieldGenerator::WriteToString(Writer* writer) { - writer->WriteLine("PrintField(\"$0$\", $1$, $2$_, writer);", - descriptor_->name(), has_property_check, oneof_name()); -} - void EnumOneofFieldGenerator::GenerateParsingCode(Writer* writer) { writer->WriteLine("object unknown;"); writer->WriteLine("$0$ enumValue = $1$;", type_name(), default_value()); @@ -266,6 +118,22 @@ void EnumOneofFieldGenerator::GenerateParsingCode(Writer* writer) { writer->WriteLine("}"); } +void EnumOneofFieldGenerator::GenerateSerializationCode(Writer* writer) { + writer->WriteLine("if ($0$) {", has_property_check); + writer->WriteLine( + " output.WriteEnum($0$, field_names[$2$], (int) $1$, $1$);", number(), + property_name(), field_ordinal()); + writer->WriteLine("}"); +} + +void EnumOneofFieldGenerator::GenerateSerializedSizeCode(Writer* writer) { + writer->WriteLine("if ($0$) {", has_property_check); + writer->WriteLine( + " size += pb::CodedOutputStream.ComputeEnumSize($0$, (int) $1$);", + number(), property_name()); + writer->WriteLine("}"); +} + } // namespace csharp } // namespace compiler } // namespace protobuf diff --git a/src/google/protobuf/compiler/csharp/csharp_enum_field.h b/src/google/protobuf/compiler/csharp/csharp_enum_field.h index 565287b2..c6b7b848 100644 --- a/src/google/protobuf/compiler/csharp/csharp_enum_field.h +++ b/src/google/protobuf/compiler/csharp/csharp_enum_field.h @@ -34,7 +34,7 @@ #include <string> #include <google/protobuf/compiler/code_generator.h> -#include <google/protobuf/compiler/csharp/csharp_field_base.h> +#include <google/protobuf/compiler/csharp/csharp_primitive_field.h> namespace google { namespace protobuf { @@ -43,40 +43,27 @@ namespace csharp { class Writer; -class EnumFieldGenerator : public FieldGeneratorBase { +class EnumFieldGenerator : public PrimitiveFieldGenerator { public: EnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal); ~EnumFieldGenerator(); - virtual void GenerateMembers(Writer* writer); - virtual void GenerateBuilderMembers(Writer* writer); - virtual void GenerateMergingCode(Writer* writer); - virtual void GenerateBuildingCode(Writer* writer); virtual void GenerateParsingCode(Writer* writer); virtual void GenerateSerializationCode(Writer* writer); virtual void GenerateSerializedSizeCode(Writer* writer); - virtual void WriteHash(Writer* writer); - virtual void WriteEquals(Writer* writer); - virtual void WriteToString(Writer* writer); - - protected: - string has_property_check; - private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumFieldGenerator); }; -class EnumOneofFieldGenerator : public EnumFieldGenerator { +class EnumOneofFieldGenerator : public PrimitiveOneofFieldGenerator { public: EnumOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal); ~EnumOneofFieldGenerator(); - virtual void GenerateMembers(Writer* writer); - virtual void GenerateBuilderMembers(Writer* writer); - virtual void WriteEquals(Writer* writer); - virtual void WriteToString(Writer* writer); virtual void GenerateParsingCode(Writer* writer); + virtual void GenerateSerializationCode(Writer* writer); + virtual void GenerateSerializedSizeCode(Writer* writer); private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumOneofFieldGenerator); |