diff options
author | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:37:12 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:37:12 +0100 |
commit | 272d384f6ad064756edc8d9778c5bcf667783821 (patch) | |
tree | eed1435ff63c89a52e426df79323a9b1c1bef24a /src | |
parent | db9d2fcd06bd8604f2ff9f30489640f64c70c4cb (diff) | |
download | protobuf-272d384f6ad064756edc8d9778c5bcf667783821.tar.gz protobuf-272d384f6ad064756edc8d9778c5bcf667783821.tar.bz2 protobuf-272d384f6ad064756edc8d9778c5bcf667783821.zip |
Use delegates instead of dynamic reflection.
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/compiler/csharp/csharp_message.cc | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc index 689e4acc..745cd4b4 100644 --- a/src/google/protobuf/compiler/csharp/csharp_message.cc +++ b/src/google/protobuf/compiler/csharp/csharp_message.cc @@ -175,8 +175,8 @@ void MessageGenerator::GenerateStaticVariables(io::Printer* printer) { // And the FieldAccessorTable. printer->Print(vars, - "$private$static pb::FieldAccess.FieldAccessorTable internal__$identifier$__FieldAccessorTable\r\n" - " = new pb::FieldAccess.FieldAccessorTable(internal__$identifier$__Descriptor,\r\n" + "$private$static pb::FieldAccess.FieldAccessorTable<$classname$, $classname$.Builder> internal__$identifier$__FieldAccessorTable\r\n" + " = new pb::FieldAccess.FieldAccessorTable<$classname$, $classname$.Builder>(internal__$identifier$__Descriptor,\r\n" " new string[] { "); for (int i = 0; i < descriptor_->field_count(); i++) { printer->Print( @@ -184,10 +184,7 @@ void MessageGenerator::GenerateStaticVariables(io::Printer* printer) { "field_name", UnderscoresToCapitalizedCamelCase(descriptor_->field(i))); } - printer->Print("},\r\n" - " typeof ($classname$),\r\n" - " typeof ($classname$.Builder));\r\n", - "classname", ClassName(descriptor_)); + printer->Print("});\r\n"); // Generate static members for all nested types. for (int i = 0; i < descriptor_->nested_type_count(); i++) { @@ -225,17 +222,26 @@ void MessageGenerator::Generate(io::Printer* printer) { "}\r\n" "\r\n", "classname", descriptor_->name()); + printer->Print( + "protected override $classname$ ThisMessage {\r\n" + " get { return this; }\r\n" + "}\r\n\r\n", + "classname", descriptor_->name()); + + map<string, string> vars; + vars["identifier"] = UniqueFileScopeIdentifier(descriptor_); + vars["fileclass"] = ClassName(descriptor_->file()); + vars["classname"] = descriptor_->name(); + printer->Print(vars, "public static pbd::MessageDescriptor Descriptor {\r\n" " get { return $fileclass$.internal__$identifier$__Descriptor; }\r\n" "}\r\n" "\r\n" - "protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors {\r\n" + "protected override pb::FieldAccess.FieldAccessorTable<$classname$, $classname$.Builder> InternalFieldAccessors {\r\n" " get { return $fileclass$.internal__$identifier$__FieldAccessorTable; }\r\n" "}\r\n" - "\r\n", - "fileclass", ClassName(descriptor_->file()), - "identifier", UniqueFileScopeIdentifier(descriptor_)); + "\r\n"); // Extensions don't need to go in an extra nested type for (int i = 0; i < descriptor_->extension_count(); i++) { |