diff options
author | Jon Skeet <jonskeet@google.com> | 2015-07-22 11:38:22 +0100 |
---|---|---|
committer | Jon Skeet <jonskeet@google.com> | 2015-07-22 11:38:22 +0100 |
commit | 4668c3dc3921e157b7904e26a1ddd84287b881be (patch) | |
tree | 755b120ba988871c074454bc6b2a829d86fdd1e7 /csharp | |
parent | 8d115298c7fc6fec135515ff7ddacb7f1524149e (diff) | |
download | protobuf-4668c3dc3921e157b7904e26a1ddd84287b881be.tar.gz protobuf-4668c3dc3921e157b7904e26a1ddd84287b881be.tar.bz2 protobuf-4668c3dc3921e157b7904e26a1ddd84287b881be.zip |
Remove the usage of attributes for field/method discovery.
Instead, introduce GeneratedCodeInfo which passes in what we need, and adjust the codegen to take account of this.
Diffstat (limited to 'csharp')
10 files changed, 147 insertions, 355 deletions
diff --git a/csharp/src/Google.Protobuf/Google.Protobuf.csproj b/csharp/src/Google.Protobuf/Google.Protobuf.csproj index 50756299..29320ca8 100644 --- a/csharp/src/Google.Protobuf/Google.Protobuf.csproj +++ b/csharp/src/Google.Protobuf/Google.Protobuf.csproj @@ -81,6 +81,7 @@ <Compile Include="Reflection\FieldDescriptor.cs" />
<Compile Include="Reflection\FieldType.cs" />
<Compile Include="Reflection\FileDescriptor.cs" />
+ <Compile Include="Reflection\GeneratedCodeInfo.cs" />
<Compile Include="Reflection\IDescriptor.cs" />
<Compile Include="Reflection\IFieldAccessor.cs" />
<Compile Include="Reflection\MapFieldAccessor.cs" />
@@ -90,8 +91,6 @@ <Compile Include="Reflection\OneofDescriptor.cs" />
<Compile Include="Reflection\PackageDescriptor.cs" />
<Compile Include="Reflection\PartialClasses.cs" />
- <Compile Include="Reflection\ProtobufOneofAttribute.cs" />
- <Compile Include="Reflection\ProtobufFieldAttribute.cs" />
<Compile Include="Reflection\ReflectionUtil.cs" />
<Compile Include="Reflection\RepeatedFieldAccessor.cs" />
<Compile Include="Reflection\ServiceDescriptor.cs" />
diff --git a/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs b/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs index 6565982c..def70b53 100644 --- a/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs +++ b/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs @@ -131,10 +131,30 @@ namespace Google.Protobuf.Reflection { "YWlsaW5nX2NvbW1lbnRzGAQgASgJEiEKGWxlYWRpbmdfZGV0YWNoZWRfY29t", "bWVudHMYBiADKAlCWAoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRv", "clByb3Rvc0gBWgpkZXNjcmlwdG9yogIDR1BCqgIaR29vZ2xlLlByb3RvYnVm", - "LlJlZmxlY3Rpb24=")); + "LlJlZmxlY3Rpb24=")); descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData, new pbr::FileDescriptor[] { }, - new global::System.Type[] { typeof(global::Google.Protobuf.Reflection.FileDescriptorSet), typeof(global::Google.Protobuf.Reflection.FileDescriptorProto), typeof(global::Google.Protobuf.Reflection.DescriptorProto), typeof(global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange), typeof(global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange), typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto), typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type), typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Label), typeof(global::Google.Protobuf.Reflection.OneofDescriptorProto), typeof(global::Google.Protobuf.Reflection.EnumDescriptorProto), typeof(global::Google.Protobuf.Reflection.EnumValueDescriptorProto), typeof(global::Google.Protobuf.Reflection.ServiceDescriptorProto), typeof(global::Google.Protobuf.Reflection.MethodDescriptorProto), typeof(global::Google.Protobuf.Reflection.FileOptions), typeof(global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode), typeof(global::Google.Protobuf.Reflection.MessageOptions), typeof(global::Google.Protobuf.Reflection.FieldOptions), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.CType), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.JSType), typeof(global::Google.Protobuf.Reflection.EnumOptions), typeof(global::Google.Protobuf.Reflection.EnumValueOptions), typeof(global::Google.Protobuf.Reflection.ServiceOptions), typeof(global::Google.Protobuf.Reflection.MethodOptions), typeof(global::Google.Protobuf.Reflection.UninterpretedOption), typeof(global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart), typeof(global::Google.Protobuf.Reflection.SourceCodeInfo), typeof(global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location), }); + new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.FileDescriptorSet), new[]{ "File" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.FileDescriptorProto), new[]{ "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", "Syntax" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.DescriptorProto), new[]{ "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "OneofDecl", "Options", "ReservedRange", "ReservedName" }, null, null, new pbr::GeneratedCodeInfo[] { new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange), new[]{ "Start", "End" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange), new[]{ "Start", "End" }, null, null, null)}), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto), new[]{ "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "OneofIndex", "Options" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type), typeof(global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Label) }, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.OneofDescriptorProto), new[]{ "Name" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.EnumDescriptorProto), new[]{ "Name", "Value", "Options" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.EnumValueDescriptorProto), new[]{ "Name", "Number", "Options" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.ServiceDescriptorProto), new[]{ "Name", "Method", "Options" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.MethodDescriptorProto), new[]{ "Name", "InputType", "OutputType", "Options", "ClientStreaming", "ServerStreaming" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.FileOptions), new[]{ "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "JavaStringCheckUtf8", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "Deprecated", "CcEnableArenas", "ObjcClassPrefix", "CsharpNamespace", "UninterpretedOption" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode) }, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.MessageOptions), new[]{ "MessageSetWireFormat", "NoStandardDescriptorAccessor", "Deprecated", "MapEntry", "UninterpretedOption" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.FieldOptions), new[]{ "Ctype", "Packed", "Jstype", "Lazy", "Deprecated", "Weak", "UninterpretedOption" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.CType), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.JSType) }, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.EnumOptions), new[]{ "AllowAlias", "Deprecated", "UninterpretedOption" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.EnumValueOptions), new[]{ "Deprecated", "UninterpretedOption" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.ServiceOptions), new[]{ "Deprecated", "UninterpretedOption" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.MethodOptions), new[]{ "Deprecated", "UninterpretedOption" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.UninterpretedOption), new[]{ "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue" }, null, null, new pbr::GeneratedCodeInfo[] { new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart), new[]{ "NamePart_", "IsExtension" }, null, null, null)}), + new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.SourceCodeInfo), new[]{ "Location" }, null, null, new pbr::GeneratedCodeInfo[] { new pbr::GeneratedCodeInfo(typeof(global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location), new[]{ "Path", "Span", "LeadingComments", "TrailingComments", "LeadingDetachedComments" }, null, null, null)}) + })); } #endregion @@ -145,8 +165,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<FileDescriptorSet> _parser = new pb::MessageParser<FileDescriptorSet>(() => new FileDescriptorSet()); public static pb::MessageParser<FileDescriptorSet> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "file" }; - private static readonly uint[] _fieldTags = new uint[] { 10 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[0]; } } @@ -184,7 +202,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.FileDescriptorProto> _repeated_file_codec = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.Reflection.FileDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto> file_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto>(); - [pbr::ProtobufField(1, "file")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto> File { get { return file_; } } @@ -257,8 +274,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<FileDescriptorProto> _parser = new pb::MessageParser<FileDescriptorProto>(() => new FileDescriptorProto()); public static pb::MessageParser<FileDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "dependency", "enum_type", "extension", "message_type", "name", "options", "package", "public_dependency", "service", "source_code_info", "syntax", "weak_dependency" }; - private static readonly uint[] _fieldTags = new uint[] { 26, 42, 58, 34, 10, 66, 18, 80, 50, 74, 98, 88 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[1]; } } @@ -313,7 +328,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -324,7 +338,6 @@ namespace Google.Protobuf.Reflection { public const int PackageFieldNumber = 2; private string package_ = ""; - [pbr::ProtobufField(2, "package")] internal string Package { get { return package_; } set { @@ -337,7 +350,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<string> _repeated_dependency_codec = pb::FieldCodec.ForString(26); private readonly pbc::RepeatedField<string> dependency_ = new pbc::RepeatedField<string>(); - [pbr::ProtobufField(3, "dependency")] internal pbc::RepeatedField<string> Dependency { get { return dependency_; } } @@ -346,7 +358,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<int> _repeated_publicDependency_codec = pb::FieldCodec.ForInt32(80); private readonly pbc::RepeatedField<int> publicDependency_ = new pbc::RepeatedField<int>(); - [pbr::ProtobufField(10, "public_dependency")] internal pbc::RepeatedField<int> PublicDependency { get { return publicDependency_; } } @@ -355,7 +366,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<int> _repeated_weakDependency_codec = pb::FieldCodec.ForInt32(88); private readonly pbc::RepeatedField<int> weakDependency_ = new pbc::RepeatedField<int>(); - [pbr::ProtobufField(11, "weak_dependency")] internal pbc::RepeatedField<int> WeakDependency { get { return weakDependency_; } } @@ -364,7 +374,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.DescriptorProto> _repeated_messageType_codec = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.Reflection.DescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> messageType_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto>(); - [pbr::ProtobufField(4, "message_type")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> MessageType { get { return messageType_; } } @@ -373,7 +382,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.EnumDescriptorProto> _repeated_enumType_codec = pb::FieldCodec.ForMessage(42, global::Google.Protobuf.Reflection.EnumDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto> enumType_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto>(); - [pbr::ProtobufField(5, "enum_type")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto> EnumType { get { return enumType_; } } @@ -382,7 +390,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.ServiceDescriptorProto> _repeated_service_codec = pb::FieldCodec.ForMessage(50, global::Google.Protobuf.Reflection.ServiceDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.ServiceDescriptorProto> service_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.ServiceDescriptorProto>(); - [pbr::ProtobufField(6, "service")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.ServiceDescriptorProto> Service { get { return service_; } } @@ -391,14 +398,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.FieldDescriptorProto> _repeated_extension_codec = pb::FieldCodec.ForMessage(58, global::Google.Protobuf.Reflection.FieldDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> extension_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto>(); - [pbr::ProtobufField(7, "extension")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> Extension { get { return extension_; } } public const int OptionsFieldNumber = 8; private global::Google.Protobuf.Reflection.FileOptions options_; - [pbr::ProtobufField(8, "options")] internal global::Google.Protobuf.Reflection.FileOptions Options { get { return options_; } set { @@ -409,7 +414,6 @@ namespace Google.Protobuf.Reflection { public const int SourceCodeInfoFieldNumber = 9; private global::Google.Protobuf.Reflection.SourceCodeInfo sourceCodeInfo_; - [pbr::ProtobufField(9, "source_code_info")] internal global::Google.Protobuf.Reflection.SourceCodeInfo SourceCodeInfo { get { return sourceCodeInfo_; } set { @@ -420,7 +424,6 @@ namespace Google.Protobuf.Reflection { public const int SyntaxFieldNumber = 12; private string syntax_ = ""; - [pbr::ProtobufField(12, "syntax")] internal string Syntax { get { return syntax_; } set { @@ -645,8 +648,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<DescriptorProto> _parser = new pb::MessageParser<DescriptorProto>(() => new DescriptorProto()); public static pb::MessageParser<DescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "enum_type", "extension", "extension_range", "field", "name", "nested_type", "oneof_decl", "options", "reserved_name", "reserved_range" }; - private static readonly uint[] _fieldTags = new uint[] { 34, 50, 42, 18, 10, 26, 66, 58, 82, 74 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[2]; } } @@ -699,7 +700,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -712,7 +712,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.FieldDescriptorProto> _repeated_field_codec = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.Reflection.FieldDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> field_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto>(); - [pbr::ProtobufField(2, "field")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> Field { get { return field_; } } @@ -721,7 +720,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.FieldDescriptorProto> _repeated_extension_codec = pb::FieldCodec.ForMessage(50, global::Google.Protobuf.Reflection.FieldDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> extension_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto>(); - [pbr::ProtobufField(6, "extension")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.FieldDescriptorProto> Extension { get { return extension_; } } @@ -730,7 +728,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.DescriptorProto> _repeated_nestedType_codec = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.Reflection.DescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> nestedType_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto>(); - [pbr::ProtobufField(3, "nested_type")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> NestedType { get { return nestedType_; } } @@ -739,7 +736,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.EnumDescriptorProto> _repeated_enumType_codec = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.Reflection.EnumDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto> enumType_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto>(); - [pbr::ProtobufField(4, "enum_type")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumDescriptorProto> EnumType { get { return enumType_; } } @@ -748,7 +744,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange> _repeated_extensionRange_codec = pb::FieldCodec.ForMessage(42, global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange> extensionRange_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange>(); - [pbr::ProtobufField(5, "extension_range")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ExtensionRange> ExtensionRange { get { return extensionRange_; } } @@ -757,14 +752,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.OneofDescriptorProto> _repeated_oneofDecl_codec = pb::FieldCodec.ForMessage(66, global::Google.Protobuf.Reflection.OneofDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.OneofDescriptorProto> oneofDecl_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.OneofDescriptorProto>(); - [pbr::ProtobufField(8, "oneof_decl")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.OneofDescriptorProto> OneofDecl { get { return oneofDecl_; } } public const int OptionsFieldNumber = 7; private global::Google.Protobuf.Reflection.MessageOptions options_; - [pbr::ProtobufField(7, "options")] internal global::Google.Protobuf.Reflection.MessageOptions Options { get { return options_; } set { @@ -777,7 +770,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange> _repeated_reservedRange_codec = pb::FieldCodec.ForMessage(74, global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange> reservedRange_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange>(); - [pbr::ProtobufField(9, "reserved_range")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto.Types.ReservedRange> ReservedRange { get { return reservedRange_; } } @@ -786,7 +778,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<string> _repeated_reservedName_codec = pb::FieldCodec.ForString(82); private readonly pbc::RepeatedField<string> reservedName_ = new pbc::RepeatedField<string>(); - [pbr::ProtobufField(10, "reserved_name")] internal pbc::RepeatedField<string> ReservedName { get { return reservedName_; } } @@ -961,8 +952,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<ExtensionRange> _parser = new pb::MessageParser<ExtensionRange>(() => new ExtensionRange()); public static pb::MessageParser<ExtensionRange> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "end", "start" }; - private static readonly uint[] _fieldTags = new uint[] { 16, 8 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProto.Descriptor.NestedTypes[0]; } } @@ -998,7 +987,6 @@ namespace Google.Protobuf.Reflection { public const int StartFieldNumber = 1; private int start_; - [pbr::ProtobufField(1, "start")] internal int Start { get { return start_; } set { @@ -1009,7 +997,6 @@ namespace Google.Protobuf.Reflection { public const int EndFieldNumber = 2; private int end_; - [pbr::ProtobufField(2, "end")] internal int End { get { return end_; } set { @@ -1109,8 +1096,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<ReservedRange> _parser = new pb::MessageParser<ReservedRange>(() => new ReservedRange()); public static pb::MessageParser<ReservedRange> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "end", "start" }; - private static readonly uint[] _fieldTags = new uint[] { 16, 8 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProto.Descriptor.NestedTypes[1]; } } @@ -1146,7 +1131,6 @@ namespace Google.Protobuf.Reflection { public const int StartFieldNumber = 1; private int start_; - [pbr::ProtobufField(1, "start")] internal int Start { get { return start_; } set { @@ -1157,7 +1141,6 @@ namespace Google.Protobuf.Reflection { public const int EndFieldNumber = 2; private int end_; - [pbr::ProtobufField(2, "end")] internal int End { get { return end_; } set { @@ -1262,8 +1245,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<FieldDescriptorProto> _parser = new pb::MessageParser<FieldDescriptorProto>(() => new FieldDescriptorProto()); public static pb::MessageParser<FieldDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "default_value", "extendee", "label", "name", "number", "oneof_index", "options", "type", "type_name" }; - private static readonly uint[] _fieldTags = new uint[] { 58, 18, 32, 10, 24, 72, 66, 40, 50 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[3]; } } @@ -1307,7 +1288,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -1318,7 +1298,6 @@ namespace Google.Protobuf.Reflection { public const int NumberFieldNumber = 3; private int number_; - [pbr::ProtobufField(3, "number")] internal int Number { get { return number_; } set { @@ -1329,7 +1308,6 @@ namespace Google.Protobuf.Reflection { public const int LabelFieldNumber = 4; private global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Label label_ = global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL; - [pbr::ProtobufField(4, "label")] internal global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Label Label { get { return label_; } set { @@ -1340,7 +1318,6 @@ namespace Google.Protobuf.Reflection { public const int TypeFieldNumber = 5; private global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type type_ = global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type.TYPE_DOUBLE; - [pbr::ProtobufField(5, "type")] internal global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type Type { get { return type_; } set { @@ -1351,7 +1328,6 @@ namespace Google.Protobuf.Reflection { public const int TypeNameFieldNumber = 6; private string typeName_ = ""; - [pbr::ProtobufField(6, "type_name")] internal string TypeName { get { return typeName_; } set { @@ -1362,7 +1338,6 @@ namespace Google.Protobuf.Reflection { public const int ExtendeeFieldNumber = 2; private string extendee_ = ""; - [pbr::ProtobufField(2, "extendee")] internal string Extendee { get { return extendee_; } set { @@ -1373,7 +1348,6 @@ namespace Google.Protobuf.Reflection { public const int DefaultValueFieldNumber = 7; private string defaultValue_ = ""; - [pbr::ProtobufField(7, "default_value")] internal string DefaultValue { get { return defaultValue_; } set { @@ -1384,7 +1358,6 @@ namespace Google.Protobuf.Reflection { public const int OneofIndexFieldNumber = 9; private int oneofIndex_; - [pbr::ProtobufField(9, "oneof_index")] internal int OneofIndex { get { return oneofIndex_; } set { @@ -1395,7 +1368,6 @@ namespace Google.Protobuf.Reflection { public const int OptionsFieldNumber = 8; private global::Google.Protobuf.Reflection.FieldOptions options_; - [pbr::ProtobufField(8, "options")] internal global::Google.Protobuf.Reflection.FieldOptions Options { get { return options_; } set { @@ -1646,8 +1618,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<OneofDescriptorProto> _parser = new pb::MessageParser<OneofDescriptorProto>(() => new OneofDescriptorProto()); public static pb::MessageParser<OneofDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "name" }; - private static readonly uint[] _fieldTags = new uint[] { 10 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[4]; } } @@ -1682,7 +1652,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -1766,8 +1735,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<EnumDescriptorProto> _parser = new pb::MessageParser<EnumDescriptorProto>(() => new EnumDescriptorProto()); public static pb::MessageParser<EnumDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "name", "options", "value" }; - private static readonly uint[] _fieldTags = new uint[] { 10, 26, 18 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[5]; } } @@ -1806,7 +1773,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -1819,14 +1785,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.EnumValueDescriptorProto> _repeated_value_codec = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.Reflection.EnumValueDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumValueDescriptorProto> value_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumValueDescriptorProto>(); - [pbr::ProtobufField(2, "value")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.EnumValueDescriptorProto> Value { get { return value_; } } public const int OptionsFieldNumber = 3; private global::Google.Protobuf.Reflection.EnumOptions options_; - [pbr::ProtobufField(3, "options")] internal global::Google.Protobuf.Reflection.EnumOptions Options { get { return options_; } set { @@ -1941,8 +1905,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<EnumValueDescriptorProto> _parser = new pb::MessageParser<EnumValueDescriptorProto>(() => new EnumValueDescriptorProto()); public static pb::MessageParser<EnumValueDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "name", "number", "options" }; - private static readonly uint[] _fieldTags = new uint[] { 10, 16, 26 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[6]; } } @@ -1980,7 +1942,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -1991,7 +1952,6 @@ namespace Google.Protobuf.Reflection { public const int NumberFieldNumber = 2; private int number_; - [pbr::ProtobufField(2, "number")] internal int Number { get { return number_; } set { @@ -2002,7 +1962,6 @@ namespace Google.Protobuf.Reflection { public const int OptionsFieldNumber = 3; private global::Google.Protobuf.Reflection.EnumValueOptions options_; - [pbr::ProtobufField(3, "options")] internal global::Google.Protobuf.Reflection.EnumValueOptions Options { get { return options_; } set { @@ -2124,8 +2083,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<ServiceDescriptorProto> _parser = new pb::MessageParser<ServiceDescriptorProto>(() => new ServiceDescriptorProto()); public static pb::MessageParser<ServiceDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "method", "name", "options" }; - private static readonly uint[] _fieldTags = new uint[] { 18, 10, 26 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[7]; } } @@ -2164,7 +2121,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -2177,14 +2133,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.MethodDescriptorProto> _repeated_method_codec = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.Reflection.MethodDescriptorProto.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.MethodDescriptorProto> method_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.MethodDescriptorProto>(); - [pbr::ProtobufField(2, "method")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.MethodDescriptorProto> Method { get { return method_; } } public const int OptionsFieldNumber = 3; private global::Google.Protobuf.Reflection.ServiceOptions options_; - [pbr::ProtobufField(3, "options")] internal global::Google.Protobuf.Reflection.ServiceOptions Options { get { return options_; } set { @@ -2299,8 +2253,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<MethodDescriptorProto> _parser = new pb::MessageParser<MethodDescriptorProto>(() => new MethodDescriptorProto()); public static pb::MessageParser<MethodDescriptorProto> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "client_streaming", "input_type", "name", "options", "output_type", "server_streaming" }; - private static readonly uint[] _fieldTags = new uint[] { 40, 18, 10, 34, 26, 48 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[8]; } } @@ -2341,7 +2293,6 @@ namespace Google.Protobuf.Reflection { public const int NameFieldNumber = 1; private string name_ = ""; - [pbr::ProtobufField(1, "name")] internal string Name { get { return name_; } set { @@ -2352,7 +2303,6 @@ namespace Google.Protobuf.Reflection { public const int InputTypeFieldNumber = 2; private string inputType_ = ""; - [pbr::ProtobufField(2, "input_type")] internal string InputType { get { return inputType_; } set { @@ -2363,7 +2313,6 @@ namespace Google.Protobuf.Reflection { public const int OutputTypeFieldNumber = 3; private string outputType_ = ""; - [pbr::ProtobufField(3, "output_type")] internal string OutputType { get { return outputType_; } set { @@ -2374,7 +2323,6 @@ namespace Google.Protobuf.Reflection { public const int OptionsFieldNumber = 4; private global::Google.Protobuf.Reflection.MethodOptions options_; - [pbr::ProtobufField(4, "options")] internal global::Google.Protobuf.Reflection.MethodOptions Options { get { return options_; } set { @@ -2385,7 +2333,6 @@ namespace Google.Protobuf.Reflection { public const int ClientStreamingFieldNumber = 5; private bool clientStreaming_; - [pbr::ProtobufField(5, "client_streaming")] internal bool ClientStreaming { get { return clientStreaming_; } set { @@ -2396,7 +2343,6 @@ namespace Google.Protobuf.Reflection { public const int ServerStreamingFieldNumber = 6; private bool serverStreaming_; - [pbr::ProtobufField(6, "server_streaming")] internal bool ServerStreaming { get { return serverStreaming_; } set { @@ -2566,8 +2512,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<FileOptions> _parser = new pb::MessageParser<FileOptions>(() => new FileOptions()); public static pb::MessageParser<FileOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "cc_enable_arenas", "cc_generic_services", "csharp_namespace", "deprecated", "go_package", "java_generate_equals_and_hash", "java_generic_services", "java_multiple_files", "java_outer_classname", "java_package", "java_string_check_utf8", "objc_class_prefix", "optimize_for", "py_generic_services", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 248, 128, 298, 184, 90, 160, 136, 80, 66, 10, 216, 290, 72, 144, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[9]; } } @@ -2617,7 +2561,6 @@ namespace Google.Protobuf.Reflection { public const int JavaPackageFieldNumber = 1; private string javaPackage_ = ""; - [pbr::ProtobufField(1, "java_package")] internal string JavaPackage { get { return javaPackage_; } set { @@ -2628,7 +2571,6 @@ namespace Google.Protobuf.Reflection { public const int JavaOuterClassnameFieldNumber = 8; private string javaOuterClassname_ = ""; - [pbr::ProtobufField(8, "java_outer_classname")] internal string JavaOuterClassname { get { return javaOuterClassname_; } set { @@ -2639,7 +2581,6 @@ namespace Google.Protobuf.Reflection { public const int JavaMultipleFilesFieldNumber = 10; private bool javaMultipleFiles_; - [pbr::ProtobufField(10, "java_multiple_files")] internal bool JavaMultipleFiles { get { return javaMultipleFiles_; } set { @@ -2650,7 +2591,6 @@ namespace Google.Protobuf.Reflection { public const int JavaGenerateEqualsAndHashFieldNumber = 20; private bool javaGenerateEqualsAndHash_; - [pbr::ProtobufField(20, "java_generate_equals_and_hash")] internal bool JavaGenerateEqualsAndHash { get { return javaGenerateEqualsAndHash_; } set { @@ -2661,7 +2601,6 @@ namespace Google.Protobuf.Reflection { public const int JavaStringCheckUtf8FieldNumber = 27; private bool javaStringCheckUtf8_; - [pbr::ProtobufField(27, "java_string_check_utf8")] internal bool JavaStringCheckUtf8 { get { return javaStringCheckUtf8_; } set { @@ -2672,7 +2611,6 @@ namespace Google.Protobuf.Reflection { public const int OptimizeForFieldNumber = 9; private global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode optimizeFor_ = global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode.SPEED; - [pbr::ProtobufField(9, "optimize_for")] internal global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode OptimizeFor { get { return optimizeFor_; } set { @@ -2683,7 +2621,6 @@ namespace Google.Protobuf.Reflection { public const int GoPackageFieldNumber = 11; private string goPackage_ = ""; - [pbr::ProtobufField(11, "go_package")] internal string GoPackage { get { return goPackage_; } set { @@ -2694,7 +2631,6 @@ namespace Google.Protobuf.Reflection { public const int CcGenericServicesFieldNumber = 16; private bool ccGenericServices_; - [pbr::ProtobufField(16, "cc_generic_services")] internal bool CcGenericServices { get { return ccGenericServices_; } set { @@ -2705,7 +2641,6 @@ namespace Google.Protobuf.Reflection { public const int JavaGenericServicesFieldNumber = 17; private bool javaGenericServices_; - [pbr::ProtobufField(17, "java_generic_services")] internal bool JavaGenericServices { get { return javaGenericServices_; } set { @@ -2716,7 +2651,6 @@ namespace Google.Protobuf.Reflection { public const int PyGenericServicesFieldNumber = 18; private bool pyGenericServices_; - [pbr::ProtobufField(18, "py_generic_services")] internal bool PyGenericServices { get { return pyGenericServices_; } set { @@ -2727,7 +2661,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 23; private bool deprecated_; - [pbr::ProtobufField(23, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -2738,7 +2671,6 @@ namespace Google.Protobuf.Reflection { public const int CcEnableArenasFieldNumber = 31; private bool ccEnableArenas_; - [pbr::ProtobufField(31, "cc_enable_arenas")] internal bool CcEnableArenas { get { return ccEnableArenas_; } set { @@ -2749,7 +2681,6 @@ namespace Google.Protobuf.Reflection { public const int ObjcClassPrefixFieldNumber = 36; private string objcClassPrefix_ = ""; - [pbr::ProtobufField(36, "objc_class_prefix")] internal string ObjcClassPrefix { get { return objcClassPrefix_; } set { @@ -2760,7 +2691,6 @@ namespace Google.Protobuf.Reflection { public const int CsharpNamespaceFieldNumber = 37; private string csharpNamespace_ = ""; - [pbr::ProtobufField(37, "csharp_namespace")] internal string CsharpNamespace { get { return csharpNamespace_; } set { @@ -2773,7 +2703,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -3082,8 +3011,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<MessageOptions> _parser = new pb::MessageParser<MessageOptions>(() => new MessageOptions()); public static pb::MessageParser<MessageOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "deprecated", "map_entry", "message_set_wire_format", "no_standard_descriptor_accessor", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 24, 56, 8, 16, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[10]; } } @@ -3123,7 +3050,6 @@ namespace Google.Protobuf.Reflection { public const int MessageSetWireFormatFieldNumber = 1; private bool messageSetWireFormat_; - [pbr::ProtobufField(1, "message_set_wire_format")] internal bool MessageSetWireFormat { get { return messageSetWireFormat_; } set { @@ -3134,7 +3060,6 @@ namespace Google.Protobuf.Reflection { public const int NoStandardDescriptorAccessorFieldNumber = 2; private bool noStandardDescriptorAccessor_; - [pbr::ProtobufField(2, "no_standard_descriptor_accessor")] internal bool NoStandardDescriptorAccessor { get { return noStandardDescriptorAccessor_; } set { @@ -3145,7 +3070,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 3; private bool deprecated_; - [pbr::ProtobufField(3, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -3156,7 +3080,6 @@ namespace Google.Protobuf.Reflection { public const int MapEntryFieldNumber = 7; private bool mapEntry_; - [pbr::ProtobufField(7, "map_entry")] internal bool MapEntry { get { return mapEntry_; } set { @@ -3169,7 +3092,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -3306,8 +3228,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<FieldOptions> _parser = new pb::MessageParser<FieldOptions>(() => new FieldOptions()); public static pb::MessageParser<FieldOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "ctype", "deprecated", "jstype", "lazy", "packed", "uninterpreted_option", "weak" }; - private static readonly uint[] _fieldTags = new uint[] { 8, 24, 48, 40, 16, 7994, 80 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[11]; } } @@ -3349,7 +3269,6 @@ namespace Google.Protobuf.Reflection { public const int CtypeFieldNumber = 1; private global::Google.Protobuf.Reflection.FieldOptions.Types.CType ctype_ = global::Google.Protobuf.Reflection.FieldOptions.Types.CType.STRING; - [pbr::ProtobufField(1, "ctype")] internal global::Google.Protobuf.Reflection.FieldOptions.Types.CType Ctype { get { return ctype_; } set { @@ -3360,7 +3279,6 @@ namespace Google.Protobuf.Reflection { public const int PackedFieldNumber = 2; private bool packed_; - [pbr::ProtobufField(2, "packed")] internal bool Packed { get { return packed_; } set { @@ -3371,7 +3289,6 @@ namespace Google.Protobuf.Reflection { public const int JstypeFieldNumber = 6; private global::Google.Protobuf.Reflection.FieldOptions.Types.JSType jstype_ = global::Google.Protobuf.Reflection.FieldOptions.Types.JSType.JS_NORMAL; - [pbr::ProtobufField(6, "jstype")] internal global::Google.Protobuf.Reflection.FieldOptions.Types.JSType Jstype { get { return jstype_; } set { @@ -3382,7 +3299,6 @@ namespace Google.Protobuf.Reflection { public const int LazyFieldNumber = 5; private bool lazy_; - [pbr::ProtobufField(5, "lazy")] internal bool Lazy { get { return lazy_; } set { @@ -3393,7 +3309,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 3; private bool deprecated_; - [pbr::ProtobufField(3, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -3404,7 +3319,6 @@ namespace Google.Protobuf.Reflection { public const int WeakFieldNumber = 10; private bool weak_; - [pbr::ProtobufField(10, "weak")] internal bool Weak { get { return weak_; } set { @@ -3417,7 +3331,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -3604,8 +3517,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<EnumOptions> _parser = new pb::MessageParser<EnumOptions>(() => new EnumOptions()); public static pb::MessageParser<EnumOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "allow_alias", "deprecated", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 16, 24, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[12]; } } @@ -3643,7 +3554,6 @@ namespace Google.Protobuf.Reflection { public const int AllowAliasFieldNumber = 2; private bool allowAlias_; - [pbr::ProtobufField(2, "allow_alias")] internal bool AllowAlias { get { return allowAlias_; } set { @@ -3654,7 +3564,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 3; private bool deprecated_; - [pbr::ProtobufField(3, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -3667,7 +3576,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -3772,8 +3680,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<EnumValueOptions> _parser = new pb::MessageParser<EnumValueOptions>(() => new EnumValueOptions()); public static pb::MessageParser<EnumValueOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "deprecated", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 8, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[13]; } } @@ -3810,7 +3716,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 1; private bool deprecated_; - [pbr::ProtobufField(1, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -3823,7 +3728,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -3912,8 +3816,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<ServiceOptions> _parser = new pb::MessageParser<ServiceOptions>(() => new ServiceOptions()); public static pb::MessageParser<ServiceOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "deprecated", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 264, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[14]; } } @@ -3950,7 +3852,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 33; private bool deprecated_; - [pbr::ProtobufField(33, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -3963,7 +3864,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -4052,8 +3952,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<MethodOptions> _parser = new pb::MessageParser<MethodOptions>(() => new MethodOptions()); public static pb::MessageParser<MethodOptions> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "deprecated", "uninterpreted_option" }; - private static readonly uint[] _fieldTags = new uint[] { 264, 7994 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[15]; } } @@ -4090,7 +3988,6 @@ namespace Google.Protobuf.Reflection { public const int DeprecatedFieldNumber = 33; private bool deprecated_; - [pbr::ProtobufField(33, "deprecated")] internal bool Deprecated { get { return deprecated_; } set { @@ -4103,7 +4000,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption> _repeated_uninterpretedOption_codec = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>(); - [pbr::ProtobufField(999, "uninterpreted_option")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption { get { return uninterpretedOption_; } } @@ -4192,8 +4088,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<UninterpretedOption> _parser = new pb::MessageParser<UninterpretedOption>(() => new UninterpretedOption()); public static pb::MessageParser<UninterpretedOption> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "aggregate_value", "double_value", "identifier_value", "name", "negative_int_value", "positive_int_value", "string_value" }; - private static readonly uint[] _fieldTags = new uint[] { 66, 49, 26, 18, 40, 32, 58 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[16]; } } @@ -4237,14 +4131,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart> _repeated_name_codec = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart> name_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart>(); - [pbr::ProtobufField(2, "name")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption.Types.NamePart> Name { get { return name_; } } public const int IdentifierValueFieldNumber = 3; private string identifierValue_ = ""; - [pbr::ProtobufField(3, "identifier_value")] internal string IdentifierValue { get { return identifierValue_; } set { @@ -4255,7 +4147,6 @@ namespace Google.Protobuf.Reflection { public const int PositiveIntValueFieldNumber = 4; private ulong positiveIntValue_; - [pbr::ProtobufField(4, "positive_int_value")] internal ulong PositiveIntValue { get { return positiveIntValue_; } set { @@ -4266,7 +4157,6 @@ namespace Google.Protobuf.Reflection { public const int NegativeIntValueFieldNumber = 5; private long negativeIntValue_; - [pbr::ProtobufField(5, "negative_int_value")] internal long NegativeIntValue { get { return negativeIntValue_; } set { @@ -4277,7 +4167,6 @@ namespace Google.Protobuf.Reflection { public const int DoubleValueFieldNumber = 6; private double doubleValue_; - [pbr::ProtobufField(6, "double_value")] internal double DoubleValue { get { return doubleValue_; } set { @@ -4288,7 +4177,6 @@ namespace Google.Protobuf.Reflection { public const int StringValueFieldNumber = 7; private pb::ByteString stringValue_ = pb::ByteString.Empty; - [pbr::ProtobufField(7, "string_value")] internal pb::ByteString StringValue { get { return stringValue_; } set { @@ -4299,7 +4187,6 @@ namespace Google.Protobuf.Reflection { public const int AggregateValueFieldNumber = 8; private string aggregateValue_ = ""; - [pbr::ProtobufField(8, "aggregate_value")] internal string AggregateValue { get { return aggregateValue_; } set { @@ -4473,8 +4360,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<NamePart> _parser = new pb::MessageParser<NamePart>(() => new NamePart()); public static pb::MessageParser<NamePart> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "is_extension", "name_part" }; - private static readonly uint[] _fieldTags = new uint[] { 16, 10 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.UninterpretedOption.Descriptor.NestedTypes[0]; } } @@ -4510,7 +4395,6 @@ namespace Google.Protobuf.Reflection { public const int NamePart_FieldNumber = 1; private string namePart_ = ""; - [pbr::ProtobufField(1, "name_part")] internal string NamePart_ { get { return namePart_; } set { @@ -4521,7 +4405,6 @@ namespace Google.Protobuf.Reflection { public const int IsExtensionFieldNumber = 2; private bool isExtension_; - [pbr::ProtobufField(2, "is_extension")] internal bool IsExtension { get { return isExtension_; } set { @@ -4626,8 +4509,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<SourceCodeInfo> _parser = new pb::MessageParser<SourceCodeInfo>(() => new SourceCodeInfo()); public static pb::MessageParser<SourceCodeInfo> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "location" }; - private static readonly uint[] _fieldTags = new uint[] { 10 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.DescriptorProtoFile.Descriptor.MessageTypes[17]; } } @@ -4665,7 +4546,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location> _repeated_location_codec = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location.Parser); private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location> location_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location>(); - [pbr::ProtobufField(1, "location")] internal pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location> Location { get { return location_; } } @@ -4739,8 +4619,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::MessageParser<Location> _parser = new pb::MessageParser<Location>(() => new Location()); public static pb::MessageParser<Location> Parser { get { return _parser; } } - private static readonly string[] _fieldNames = new string[] { "leading_comments", "leading_detached_comments", "path", "span", "trailing_comments" }; - private static readonly uint[] _fieldTags = new uint[] { 26, 50, 10, 18, 34 }; public static pbr::MessageDescriptor Descriptor { get { return global::Google.Protobuf.Reflection.SourceCodeInfo.Descriptor.NestedTypes[0]; } } @@ -4784,7 +4662,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<int> _repeated_path_codec = pb::FieldCodec.ForInt32(10); private readonly pbc::RepeatedField<int> path_ = new pbc::RepeatedField<int>(); - [pbr::ProtobufField(1, "path")] internal pbc::RepeatedField<int> Path { get { return path_; } } @@ -4793,14 +4670,12 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<int> _repeated_span_codec = pb::FieldCodec.ForInt32(18); private readonly pbc::RepeatedField<int> span_ = new pbc::RepeatedField<int>(); - [pbr::ProtobufField(2, "span")] internal pbc::RepeatedField<int> Span { get { return span_; } } public const int LeadingCommentsFieldNumber = 3; private string leadingComments_ = ""; - [pbr::ProtobufField(3, "leading_comments")] internal string LeadingComments { get { return leadingComments_; } set { @@ -4811,7 +4686,6 @@ namespace Google.Protobuf.Reflection { public const int TrailingCommentsFieldNumber = 4; private string trailingComments_ = ""; - [pbr::ProtobufField(4, "trailing_comments")] internal string TrailingComments { get { return trailingComments_; } set { @@ -4824,7 +4698,6 @@ namespace Google.Protobuf.Reflection { private static readonly pb::FieldCodec<string> _repeated_leadingDetachedComments_codec = pb::FieldCodec.ForString(50); private readonly pbc::RepeatedField<string> leadingDetachedComments_ = new pbc::RepeatedField<string>(); - [pbr::ProtobufField(6, "leading_detached_comments")] internal pbc::RepeatedField<string> LeadingDetachedComments { get { return leadingDetachedComments_; } } diff --git a/csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs index 57378e4c..a8609b8a 100644 --- a/csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs +++ b/csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs @@ -46,10 +46,11 @@ namespace Google.Protobuf.Reflection private readonly MessageDescriptor containingType; private readonly OneofDescriptor containingOneof; private FieldType fieldType; + private readonly string propertyName; // Annoyingly, needed in Crosslink. private IFieldAccessor accessor; internal FieldDescriptor(FieldDescriptorProto proto, FileDescriptor file, - MessageDescriptor parent, int index) + MessageDescriptor parent, int index, string propertyName) : base(file, file.ComputeFullName(parent, proto.Name), index) { this.proto = proto; @@ -76,6 +77,12 @@ namespace Google.Protobuf.Reflection } file.DescriptorPool.AddSymbol(this); + // We can't create the accessor until we've cross-linked, unfortunately, as we + // may not know whether the type of the field is a map or not. Remember the property name + // for later. + // We could trust the generated code and check whether the type of the property is + // a MapField, but that feels a tad nasty. + this.propertyName = propertyName; } /// <summary> @@ -291,26 +298,19 @@ namespace Google.Protobuf.Reflection { throw new DescriptorValidationException(this, "MessageSet format is not supported."); } - - accessor = CreateAccessor(); + accessor = CreateAccessor(propertyName); } - private IFieldAccessor CreateAccessor() + private IFieldAccessor CreateAccessor(string propertyName) { - // TODO: Check the performance of this with some large protos. Each message is O(N^2) in the number of fields, - // which isn't great... - if (containingType.GeneratedType == null) + if (containingType.GeneratedType == null || propertyName == null) { return null; } - var property = containingType - .GeneratedType - .GetProperties() - .FirstOrDefault(p => p.IsDefined(typeof(ProtobufFieldAttribute), false) && - p.GetCustomAttributes(typeof(ProtobufFieldAttribute), false).Cast<ProtobufFieldAttribute>().Single().Number == FieldNumber); + var property = containingType.GeneratedType.GetProperty(propertyName); if (property == null) { - return null; + throw new DescriptorValidationException(this, "Property " + propertyName + " not found in " + containingType.GeneratedType); } return IsMap ? new MapFieldAccessor(property, this) : IsRepeated ? new RepeatedFieldAccessor(property, this) diff --git a/csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs index ba832b89..041d4711 100644 --- a/csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs +++ b/csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs @@ -62,12 +62,11 @@ namespace Google.Protobuf.Reflection get { return proto.Syntax == "proto3" ? ProtoSyntax.Proto3 : ProtoSyntax.Proto2; } } - private FileDescriptor(FileDescriptorProto proto, FileDescriptor[] dependencies, DescriptorPool pool, bool allowUnknownDependencies, Type[] generatedTypes) + private FileDescriptor(FileDescriptorProto proto, FileDescriptor[] dependencies, DescriptorPool pool, bool allowUnknownDependencies, GeneratedCodeInfo generatedCodeInfo) { this.pool = pool; this.proto = proto; this.dependencies = new ReadOnlyCollection<FileDescriptor>((FileDescriptor[]) dependencies.Clone()); - IEnumerator<Type> generatedTypeIterator = generatedTypes == null ? null : ((IEnumerable<Type>)generatedTypes).GetEnumerator(); publicDependencies = DeterminePublicDependencies(this, proto, dependencies, allowUnknownDependencies); @@ -75,21 +74,15 @@ namespace Google.Protobuf.Reflection messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageType, (message, index) => - new MessageDescriptor(message, this, null, index, generatedTypeIterator)); + new MessageDescriptor(message, this, null, index, generatedCodeInfo == null ? null : generatedCodeInfo.NestedTypes[index])); enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumType, (enumType, index) => - new EnumDescriptor(enumType, this, null, index, ReflectionUtil.GetNextType(generatedTypeIterator))); + new EnumDescriptor(enumType, this, null, index, generatedCodeInfo == null ? null : generatedCodeInfo.NestedEnums[index])); services = DescriptorUtil.ConvertAndMakeReadOnly(proto.Service, (service, index) => new ServiceDescriptor(service, this, index)); - - // We should now have consumed all the generated types. - if (generatedTypeIterator != null && generatedTypeIterator.MoveNext()) - { - throw new ArgumentException("More generated types left over after consuming all expected ones", "generatedTypes"); - } } /// <summary> @@ -260,7 +253,7 @@ namespace Google.Protobuf.Reflection } return null; } - + /// <summary> /// Builds a FileDescriptor from its protocol buffer representation. /// </summary> @@ -269,10 +262,11 @@ namespace Google.Protobuf.Reflection /// file's dependencies, in the exact order listed in the .proto file. May be null, /// in which case it is treated as an empty array.</param> /// <param name="allowUnknownDependencies">Whether unknown dependencies are ignored (true) or cause an exception to be thrown (false).</param> + /// <param name="generatedCodeInfo">Reflection information, if any. May be null, specifically for non-generated code.</param> /// <exception cref="DescriptorValidationException">If <paramref name="proto"/> is not /// a valid descriptor. This can occur for a number of reasons, such as a field /// having an undefined type or because two messages were defined with the same name.</exception> - private static FileDescriptor BuildFrom(FileDescriptorProto proto, FileDescriptor[] dependencies, bool allowUnknownDependencies, Type[] generatedTypes) + private static FileDescriptor BuildFrom(FileDescriptorProto proto, FileDescriptor[] dependencies, bool allowUnknownDependencies, GeneratedCodeInfo generatedCodeInfo) { // Building descriptors involves two steps: translating and linking. // In the translation step (implemented by FileDescriptor's @@ -289,7 +283,7 @@ namespace Google.Protobuf.Reflection } DescriptorPool pool = new DescriptorPool(dependencies); - FileDescriptor result = new FileDescriptor(proto, dependencies, pool, allowUnknownDependencies, generatedTypes); + FileDescriptor result = new FileDescriptor(proto, dependencies, pool, allowUnknownDependencies, generatedCodeInfo); // TODO(jonskeet): Reinstate these checks, or get rid of them entirely. They aren't in the Java code, // and fail for the CustomOptions test right now. (We get "descriptor.proto" vs "google/protobuf/descriptor.proto".) @@ -330,19 +324,13 @@ namespace Google.Protobuf.Reflection /// Creates an instance for generated code. /// </summary> /// <remarks> - /// The <paramref name="generatedTypes"/> parameter should be null for descriptors which don't correspond to - /// generated types. Otherwise, the array should represent all the generated types in the file: messages then - /// enums. Within each message, there can be nested messages and enums, which must be specified "inline" in the array: - /// containing message, nested messages, nested enums - and of course each nested message may contain *more* nested messages, - /// etc. All messages within the descriptor should be represented, even if they do not have a generated type - any - /// type without a corresponding generated type (such as map entries) should respond to a null element. - /// For example, a file with a messages OuterMessage and InnerMessage, and enums OuterEnum and InnerEnum (where - /// InnerMessage and InnerEnum are nested within InnerMessage) would result in an array of - /// OuterMessage, InnerMessage, InnerEnum, OuterEnum. + /// The <paramref name="generatedCodeInfo"/> parameter should be null for descriptors which don't correspond to + /// generated types. Otherwise, it should be a <see cref="GeneratedCodeInfo"/> with nested types and nested + /// enums corresponding to the types and enums contained within the file descriptor. /// </remarks> public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData, FileDescriptor[] dependencies, - Type[] generatedTypes) + GeneratedCodeInfo generatedCodeInfo) { FileDescriptorProto proto; try @@ -358,7 +346,7 @@ namespace Google.Protobuf.Reflection { // When building descriptors for generated code, we allow unknown // dependencies by default. - return BuildFrom(proto, dependencies, true, generatedTypes); + return BuildFrom(proto, dependencies, true, generatedCodeInfo); } catch (DescriptorValidationException e) { diff --git a/csharp/src/Google.Protobuf/Reflection/GeneratedCodeInfo.cs b/csharp/src/Google.Protobuf/Reflection/GeneratedCodeInfo.cs new file mode 100644 index 00000000..8c52cd12 --- /dev/null +++ b/csharp/src/Google.Protobuf/Reflection/GeneratedCodeInfo.cs @@ -0,0 +1,66 @@ +using System; + +namespace Google.Protobuf.Reflection +{ + /// <summary> + /// Extra information provided by generated code when initializing a message or file descriptor. + /// These are constructed as required, and are not long-lived. Hand-written code should + /// never need to use this type. + /// </summary> + public sealed class GeneratedCodeInfo + { + private static readonly string[] EmptyNames = new string[0]; + private static readonly GeneratedCodeInfo[] EmptyCodeInfo = new GeneratedCodeInfo[0]; + + /// <summary> + /// Irrelevant for file descriptors; the CLR type for the message for message descriptors. + /// </summary> + public Type ClrType { get; private set; } + + /// <summary> + /// Irrelevant for file descriptors; the CLR property names (in message descriptor field order) + /// for fields in the message for message descriptors. + /// </summary> + public string[] PropertyNames { get; private set; } + + /// <summary> + /// Irrelevant for file descriptors; the CLR property "base" names (in message descriptor oneof order) + /// for oneofs in the message for message descriptors. It is expected that for a oneof name of "Foo", + /// there will be a "FooCase" property and a "ClearFoo" method. + /// </summary> + public string[] OneofNames { get; private set; } + + /// <summary> + /// The reflection information for types within this file/message descriptor. Elements may be null + /// if there is no corresponding generated type, e.g. for map entry types. + /// </summary> + public GeneratedCodeInfo[] NestedTypes { get; private set; } + + /// <summary> + /// The CLR types for enums within this file/message descriptor. + /// </summary> + public Type[] NestedEnums { get; private set; } + + /// <summary> + /// Creates a GeneratedCodeInfo for a message descriptor, with nested types, nested enums, the CLR type, property names and oneof names. + /// Each array parameter may be null, to indicate a lack of values. + /// The parameter order is designed to make it feasible to format the generated code readably. + /// </summary> + public GeneratedCodeInfo(Type clrType, string[] propertyNames, string[] oneofNames, Type[] nestedEnums, GeneratedCodeInfo[] nestedTypes) + { + NestedTypes = nestedTypes ?? EmptyCodeInfo; + NestedEnums = nestedEnums ?? ReflectionUtil.EmptyTypes; + ClrType = clrType; + PropertyNames = propertyNames ?? EmptyNames; + OneofNames = oneofNames ?? EmptyNames; + } + + /// <summary> + /// Creates a GeneratedCodeInfo for a file descriptor, with only types and enums. + /// </summary> + public GeneratedCodeInfo(Type[] nestedEnums, GeneratedCodeInfo[] nestedTypes) + : this(null, null, null, nestedEnums, nestedTypes) + { + } + } +}
\ No newline at end of file diff --git a/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs index 9413cf61..b29b4b20 100644 --- a/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs +++ b/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs @@ -66,29 +66,33 @@ namespace Google.Protobuf.Reflection private readonly Type generatedType; private IDictionary<int, IFieldAccessor> fieldAccessorsByFieldNumber; - internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex, IEnumerator<Type> generatedTypeIterator) + internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex, GeneratedCodeInfo generatedCodeInfo) : base(file, file.ComputeFullName(parent, proto.Name), typeIndex) { this.proto = proto; - generatedType = ReflectionUtil.GetNextType(generatedTypeIterator); - containingType = parent; - - oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDecl, - (oneof, index) => - new OneofDescriptor(oneof, file, this, index)); - - nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedType, - (type, index) => - new MessageDescriptor(type, file, this, index, generatedTypeIterator)); + generatedType = generatedCodeInfo == null ? null : generatedCodeInfo.ClrType; - enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumType, - (type, index) => - new EnumDescriptor(type, file, this, index, ReflectionUtil.GetNextType(generatedTypeIterator))); + containingType = parent; - // TODO(jonskeet): Sort fields first? - fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.Field, - (field, index) => - new FieldDescriptor(field, file, this, index)); + oneofs = DescriptorUtil.ConvertAndMakeReadOnly( + proto.OneofDecl, + (oneof, index) => + new OneofDescriptor(oneof, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.OneofNames[index])); + + nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly( + proto.NestedType, + (type, index) => + new MessageDescriptor(type, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.NestedTypes[index])); + + enumTypes = DescriptorUtil.ConvertAndMakeReadOnly( + proto.EnumType, + (type, index) => + new EnumDescriptor(type, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.NestedEnums[index])); + + fields = DescriptorUtil.ConvertAndMakeReadOnly( + proto.Field, + (field, index) => + new FieldDescriptor(field, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.PropertyNames[index])); file.DescriptorPool.AddSymbol(this); } @@ -220,6 +224,6 @@ namespace Google.Protobuf.Reflection } fieldAccessorsByFieldNumber = new ReadOnlyDictionary<int, IFieldAccessor>(fields.ToDictionary(field => field.FieldNumber, field => field.Accessor)); - } + } } }
\ No newline at end of file diff --git a/csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs index b4cc0791..a79d9de4 100644 --- a/csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs +++ b/csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs @@ -41,15 +41,16 @@ namespace Google.Protobuf.Reflection private readonly OneofDescriptorProto proto; private MessageDescriptor containingType; private IList<FieldDescriptor> fields; - private OneofAccessor accessor; + private readonly OneofAccessor accessor; - internal OneofDescriptor(OneofDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index) + internal OneofDescriptor(OneofDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index, string clrName) : base(file, file.ComputeFullName(parent, proto.Name), index) { this.proto = proto; containingType = parent; file.DescriptorPool.AddSymbol(this); + accessor = CreateAccessor(clrName); } /// <summary> @@ -77,33 +78,23 @@ namespace Google.Protobuf.Reflection } } fields = new ReadOnlyCollection<FieldDescriptor>(fieldCollection); - accessor = CreateAccessor(); } - private OneofAccessor CreateAccessor() + private OneofAccessor CreateAccessor(string clrName) { - if (containingType.GeneratedType == null) + if (containingType.GeneratedType == null || clrName == null) { return null; } - var caseProperty = containingType - .GeneratedType - .GetProperties() - .FirstOrDefault(p => p.IsDefined(typeof(ProtobufOneofAttribute), false) && - p.GetCustomAttributes(typeof(ProtobufOneofAttribute), false).Cast<ProtobufOneofAttribute>().Single().Name == Name); + var caseProperty = containingType.GeneratedType.GetProperty(clrName + "Case"); if (caseProperty == null) { - return null; + throw new DescriptorValidationException(this, "Property " + clrName + "Case not found in " + containingType.GeneratedType); } - - var clearMethod = containingType - .GeneratedType - .GetMethods() - .FirstOrDefault(p => p.IsDefined(typeof(ProtobufOneofAttribute), false) && - p.GetCustomAttributes(typeof(ProtobufOneofAttribute), false).Cast<ProtobufOneofAttribute>().Single().Name == Name); + var clearMethod = containingType.GeneratedType.GetMethod("Clear" + clrName, ReflectionUtil.EmptyTypes); if (clearMethod == null) { - return null; + throw new DescriptorValidationException(this, "Method Clear" + clrName + " not found in " + containingType.GeneratedType); } return new OneofAccessor(caseProperty, clearMethod, this); diff --git a/csharp/src/Google.Protobuf/Reflection/ProtobufFieldAttribute.cs b/csharp/src/Google.Protobuf/Reflection/ProtobufFieldAttribute.cs deleted file mode 100644 index a59caea7..00000000 --- a/csharp/src/Google.Protobuf/Reflection/ProtobufFieldAttribute.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region Copyright notice and license -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#endregion -using System; - -namespace Google.Protobuf.Reflection -{ - /// <summary> - /// Attribute applied to a generated property corresponding to a field in a .proto file. - /// </summary> - [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] - public sealed class ProtobufFieldAttribute : Attribute - { - /// <summary> - /// The field number in the original .proto file. - /// </summary> - public int Number { get; set; } - - /// <summary> - /// The field name in the original .proto file. - /// </summary> - public string Name { get; set; } - - public ProtobufFieldAttribute(int number, string name) - { - this.Number = number; - this.Name = name; - } - } -} diff --git a/csharp/src/Google.Protobuf/Reflection/ProtobufOneofAttribute.cs b/csharp/src/Google.Protobuf/Reflection/ProtobufOneofAttribute.cs deleted file mode 100644 index 74ad8c53..00000000 --- a/csharp/src/Google.Protobuf/Reflection/ProtobufOneofAttribute.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region Copyright notice and license -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#endregion -using System; - -namespace Google.Protobuf.Reflection -{ - /// <summary> - /// Attribute applied to the "case" property or "clear" method corresponding to a oneof in a .proto file. - /// </summary> - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false)] - public sealed class ProtobufOneofAttribute : Attribute - { - /// <summary> - /// The oneof name in the original .proto file. - /// </summary> - public string Name { get; set; } - - public ProtobufOneofAttribute(string name) - { - this.Name = name; - } - } -} diff --git a/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs b/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs index ec222dc1..5b3cbb36 100644 --- a/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs +++ b/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs @@ -102,25 +102,6 @@ namespace Google.Protobuf.Reflection Expression castTarget = Expression.Convert(targetParameter, method.DeclaringType); Expression call = Expression.Call(castTarget, method); return Expression.Lambda<Action<object>>(call, targetParameter).Compile(); - } - - /// <summary> - /// Returns the next type from an iterator of types, unless the iterator is a null reference, - /// in which case null is returned. - /// </summary> - internal static Type GetNextType(IEnumerator<Type> generatedTypeIterator) - { - if (generatedTypeIterator == null) - { - return null; - } - if (!generatedTypeIterator.MoveNext()) - { - // This parameter name corresponds to any public method supplying the generated types to start with. - throw new ArgumentException("More generated types left over after consuming all expected ones", "generatedTypes"); - } - return generatedTypeIterator.Current; - } - + } } }
\ No newline at end of file |