diff options
author | csharptest <roger@csharptest.net> | 2010-11-07 10:49:33 -0600 |
---|---|---|
committer | csharptest <roger@csharptest.net> | 2010-11-07 10:49:33 -0600 |
commit | 804b6d842e9202cd79039cd8e7aa899426d37f78 (patch) | |
tree | e0fe5bb1fcca18f49ae4909081a6cfd3291d947c /src/ProtoGen/MessageGenerator.cs | |
parent | 64bfac2825d69c0359e40c876ec4130e23f53fb7 (diff) | |
download | protobuf-804b6d842e9202cd79039cd8e7aa899426d37f78.tar.gz protobuf-804b6d842e9202cd79039cd8e7aa899426d37f78.tar.bz2 protobuf-804b6d842e9202cd79039cd8e7aa899426d37f78.zip |
Implementation work for Lite runtime and generator
Diffstat (limited to 'src/ProtoGen/MessageGenerator.cs')
-rw-r--r-- | src/ProtoGen/MessageGenerator.cs | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/src/ProtoGen/MessageGenerator.cs b/src/ProtoGen/MessageGenerator.cs index 3488cdc9..907a1c0e 100644 --- a/src/ProtoGen/MessageGenerator.cs +++ b/src/ProtoGen/MessageGenerator.cs @@ -69,12 +69,13 @@ namespace Google.ProtocolBuffers.ProtoGen { string identifier = GetUniqueFileScopeIdentifier(Descriptor); - // The descriptor for this type. - string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal"; - writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier); - writer.WriteLine("{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;", - access, FullClassName, identifier); - + if (!UseLiteRuntime) { + // The descriptor for this type. + string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal"; + writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier); + writer.WriteLine("{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;", + access, FullClassName, identifier); + } // Generate static members for all nested types. foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) { new MessageGenerator(nestedMessage).GenerateStaticVariables(writer); @@ -84,21 +85,23 @@ namespace Google.ProtocolBuffers.ProtoGen { internal void GenerateStaticVariableInitializers(TextGenerator writer) { string identifier = GetUniqueFileScopeIdentifier(Descriptor); - writer.Write("internal__{0}__Descriptor = ", identifier); - if (Descriptor.ContainingType == null) { - writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index); - } else { - writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];", GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index); - } + if (!UseLiteRuntime) { + writer.Write("internal__{0}__Descriptor = ", identifier); + if (Descriptor.ContainingType == null) { + writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index); + } else { + writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];", GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index); + } - writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier); - writer.WriteLine(" new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,", - identifier, FullClassName); - writer.Print(" new string[] { "); - foreach (FieldDescriptor field in Descriptor.Fields) { - writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName); + writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier); + writer.WriteLine(" new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,", + identifier, FullClassName); + writer.Print(" new string[] { "); + foreach (FieldDescriptor field in Descriptor.Fields) { + writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName); + } + writer.WriteLine("});"); } - writer.WriteLine("});"); // Generate static member initializers for all nested types. foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) { @@ -111,8 +114,10 @@ namespace Google.ProtocolBuffers.ProtoGen { } public void Generate(TextGenerator writer) { - writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message<{1}, {1}.Builder> {{", - ClassAccessLevel, ClassName, Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated"); + writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message{3}<{1}, {1}.Builder> {{", + ClassAccessLevel, ClassName, + Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", + UseLiteRuntime ? "Lite" : ""); writer.Indent(); // Must call BuildPartial() to make sure all lists are made read-only writer.WriteLine("private static readonly {0} defaultInstance = new Builder().BuildPartial();", ClassName); @@ -128,16 +133,18 @@ namespace Google.ProtocolBuffers.ProtoGen { writer.WriteLine(" get { return this; }"); writer.WriteLine("}"); writer.WriteLine(); - writer.WriteLine("public static pbd::MessageDescriptor Descriptor {"); - writer.WriteLine(" get {{ return {0}.internal__{1}__Descriptor; }}", DescriptorUtil.GetFullUmbrellaClassName(Descriptor), - GetUniqueFileScopeIdentifier(Descriptor)); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{", ClassName); - writer.WriteLine(" get {{ return {0}.internal__{1}__FieldAccessorTable; }}", DescriptorUtil.GetFullUmbrellaClassName(Descriptor), - GetUniqueFileScopeIdentifier(Descriptor)); - writer.WriteLine("}"); - writer.WriteLine(); + if (!UseLiteRuntime) { + writer.WriteLine("public static pbd::MessageDescriptor Descriptor {"); + writer.WriteLine(" get {{ return {0}.internal__{1}__Descriptor; }}", DescriptorUtil.GetFullUmbrellaClassName(Descriptor), + GetUniqueFileScopeIdentifier(Descriptor)); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{", ClassName); + writer.WriteLine(" get {{ return {0}.internal__{1}__FieldAccessorTable; }}", DescriptorUtil.GetFullUmbrellaClassName(Descriptor), + GetUniqueFileScopeIdentifier(Descriptor)); + writer.WriteLine("}"); + writer.WriteLine(); + } // Extensions don't need to go in an extra nested type WriteChildren(writer, null, Descriptor.Extensions); |