diff options
author | Jon Skeet <skeet@pobox.com> | 2008-10-22 07:11:17 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2008-10-22 07:11:17 +0100 |
commit | e60ce8bfafca616ed4fd430ae4f82360de165e80 (patch) | |
tree | cb1a82655772f4995c02debb31cfeb208960acf1 /csharp/ProtoGen/ExtensionGenerator.cs | |
parent | 7f90d8ee57d4af4215bc31dbb07726c023c5e047 (diff) | |
download | protobuf-e60ce8bfafca616ed4fd430ae4f82360de165e80.tar.gz protobuf-e60ce8bfafca616ed4fd430ae4f82360de165e80.tar.bz2 protobuf-e60ce8bfafca616ed4fd430ae4f82360de165e80.zip |
Final commit before changing layout
Diffstat (limited to 'csharp/ProtoGen/ExtensionGenerator.cs')
-rw-r--r-- | csharp/ProtoGen/ExtensionGenerator.cs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/csharp/ProtoGen/ExtensionGenerator.cs b/csharp/ProtoGen/ExtensionGenerator.cs new file mode 100644 index 00000000..9c235456 --- /dev/null +++ b/csharp/ProtoGen/ExtensionGenerator.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen { + internal class ExtensionGenerator : SourceGeneratorBase<FieldDescriptor>, ISourceGenerator { + internal ExtensionGenerator(FieldDescriptor descriptor) : base(descriptor) { + } + + public void Generate(TextGenerator writer) { + string name = Helpers.UnderscoresToPascalCase(DescriptorUtil.GetFieldName(Descriptor)); + + string type; + switch (Descriptor.MappedType) { + case MappedType.Message: + type = DescriptorUtil.GetClassName(Descriptor.MessageType); + break; + case MappedType.Enum: + type = DescriptorUtil.GetClassName(Descriptor.EnumType); + break; + default: + type = DescriptorUtil.GetMappedTypeName(Descriptor.MappedType); + break; + } + + if (Descriptor.IsRepeated) { + writer.WriteLine("{0} static readonly", ClassAccessLevel); + writer.WriteLine(" pb::GeneratedExtensionBase<scg::IList<{0}>> {1} =", type, name); + writer.WriteLine(" pb::GeneratedRepeatExtension<{0}>.CreateInstance(Descriptor.Extensions[{1}]);", type, Descriptor.Index); + } else { + writer.WriteLine("{0} static readonly pb::GeneratedExtensionBase<{1}> {2} =", ClassAccessLevel, type, name); + writer.WriteLine(" pb::GeneratedSingleExtension<{0}>.CreateInstance(Descriptor.Extensions[{1}]);", type, Descriptor.Index); + } + } + } +} |