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.
This commit is contained in:
parent
8d115298c7
commit
4668c3dc39
22 changed files with 240 additions and 402 deletions
|
@ -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" />
|
||||
|
|
|
@ -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_; }
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
66
csharp/src/Google.Protobuf/Reflection/GeneratedCodeInfo.cs
Normal file
66
csharp/src/Google.Protobuf/Reflection/GeneratedCodeInfo.cs
Normal file
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
generatedType = generatedCodeInfo == null ? null : generatedCodeInfo.ClrType;
|
||||
|
||||
containingType = parent;
|
||||
|
||||
oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDecl,
|
||||
(oneof, index) =>
|
||||
new OneofDescriptor(oneof, 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, generatedTypeIterator));
|
||||
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, ReflectionUtil.GetNextType(generatedTypeIterator)));
|
||||
enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(
|
||||
proto.EnumType,
|
||||
(type, index) =>
|
||||
new EnumDescriptor(type, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.NestedEnums[index]));
|
||||
|
||||
// TODO(jonskeet): Sort fields first?
|
||||
fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.Field,
|
||||
(field, index) =>
|
||||
new FieldDescriptor(field, file, this, 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -74,7 +74,6 @@ void FieldGeneratorBase::SetCommonFieldVariables(
|
|||
|
||||
(*variables)["property_name"] = property_name();
|
||||
(*variables)["type_name"] = type_name();
|
||||
(*variables)["original_name"] = descriptor_->name();
|
||||
(*variables)["name"] = name();
|
||||
(*variables)["descriptor_name"] = descriptor_->name();
|
||||
(*variables)["default_value"] = default_value();
|
||||
|
@ -431,10 +430,6 @@ std::string FieldGeneratorBase::capitalized_type_name() {
|
|||
}
|
||||
}
|
||||
|
||||
std::string FieldGeneratorBase::field_ordinal() {
|
||||
return SimpleItoa(fieldOrdinal_);
|
||||
}
|
||||
|
||||
} // namespace csharp
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
|
|
|
@ -85,7 +85,6 @@ class FieldGeneratorBase : public SourceGeneratorBase {
|
|||
std::string default_value(const FieldDescriptor* descriptor);
|
||||
std::string number();
|
||||
std::string capitalized_type_name();
|
||||
std::string field_ordinal();
|
||||
|
||||
private:
|
||||
void SetCommonFieldVariables(map<string, string>* variables);
|
||||
|
|
|
@ -79,7 +79,6 @@ void MapFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ pbc::MapField<$key_type_name$, $value_type_name$> $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
"}\n");
|
||||
|
|
|
@ -115,19 +115,6 @@ void MessageGenerator::Generate(io::Printer* printer) {
|
|||
vars,
|
||||
"private static readonly pb::MessageParser<$class_name$> _parser = new pb::MessageParser<$class_name$>(() => new $class_name$());\n"
|
||||
"public static pb::MessageParser<$class_name$> Parser { get { return _parser; } }\n\n");
|
||||
printer->Print(
|
||||
"private static readonly string[] _fieldNames = "
|
||||
"new string[] { $slash$$field_names$$slash$ };\n",
|
||||
"field_names", JoinStrings(field_names(), "\", \""),
|
||||
"slash", field_names().size() > 0 ? "\"" : "");
|
||||
std::vector<std::string> tags;
|
||||
for (int i = 0; i < field_names().size(); i++) {
|
||||
uint32 tag = FixedMakeTag(descriptor_->FindFieldByName(field_names()[i]));
|
||||
tags.push_back(SimpleItoa(tag));
|
||||
}
|
||||
printer->Print(
|
||||
"private static readonly uint[] _fieldTags = new uint[] { $tags$ };\n",
|
||||
"tags", JoinStrings(tags, ", "));
|
||||
|
||||
// Access the message descriptor via the relevant file descriptor or containing message descriptor.
|
||||
if (!descriptor_->containing_type()) {
|
||||
|
|
|
@ -64,7 +64,6 @@ void MessageFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
" set {\n"
|
||||
|
@ -159,7 +158,6 @@ void MessageOneofFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $has_property_check$ ? ($type_name$) $oneof_name$_ : null; }\n"
|
||||
" set {\n"
|
||||
|
|
|
@ -71,7 +71,6 @@ void PrimitiveFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
" set {\n"
|
||||
|
@ -175,7 +174,6 @@ void PrimitiveOneofFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $has_property_check$ ? ($type_name$) $oneof_name$_ : $default_value$; }\n"
|
||||
" set {\n"
|
||||
|
|
|
@ -65,7 +65,6 @@ void RepeatedEnumFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ pbc::RepeatedField<$type_name$> $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
"}\n");
|
||||
|
|
|
@ -78,7 +78,6 @@ void RepeatedMessageFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ pbc::RepeatedField<$type_name$> $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
"}\n");
|
||||
|
|
|
@ -65,7 +65,6 @@ void RepeatedPrimitiveFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ pbc::RepeatedField<$type_name$> $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
"}\n");
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <google/protobuf/descriptor.pb.h>
|
||||
#include <google/protobuf/io/printer.h>
|
||||
#include <google/protobuf/io/zero_copy_stream.h>
|
||||
#include <google/protobuf/stubs/strutil.h>
|
||||
|
||||
|
||||
#include <google/protobuf/compiler/csharp/csharp_enum.h>
|
||||
|
@ -168,10 +169,10 @@ void UmbrellaClassGenerator::WriteDescriptor(io::Printer* printer) {
|
|||
printer->Print("\"$base64$\", \n", "base64", base64.substr(0, 60));
|
||||
base64 = base64.substr(60);
|
||||
}
|
||||
printer->Outdent();
|
||||
printer->Print("\"$base64$\"));\n", "base64", base64);
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// Invoke InternalBuildGeneratedFileFrom() to build the file.
|
||||
|
@ -184,34 +185,108 @@ void UmbrellaClassGenerator::WriteDescriptor(io::Printer* printer) {
|
|||
"full_umbrella_class_name",
|
||||
GetFullUmbrellaClassName(file_->dependency(i)));
|
||||
}
|
||||
// Specify all the generated types (messages and enums), recursively, as an array.
|
||||
printer->Print("},\n"
|
||||
" new global::System.Type[] { ");
|
||||
for (int i = 0; i < file_->message_type_count(); i++) {
|
||||
WriteTypeLiterals(file_->message_type(i), printer);
|
||||
" new pbr::GeneratedCodeInfo(");
|
||||
// Specify all the generated code information, recursively.
|
||||
if (file_->enum_type_count() > 0) {
|
||||
printer->Print("new[] {");
|
||||
for (int i = 0; i < file_->enum_type_count(); i++) {
|
||||
printer->Print("typeof($type_name$), ", "type_name", GetClassName(file_->enum_type(i)));
|
||||
}
|
||||
printer->Print("}, ");
|
||||
}
|
||||
for (int i = 0; i < file_->enum_type_count(); i++) {
|
||||
printer->Print("typeof($type_name$), ", "type_name", GetClassName(file_->enum_type(i)));
|
||||
else {
|
||||
printer->Print("null, ");
|
||||
}
|
||||
if (file_->message_type_count() > 0) {
|
||||
printer->Print("new pbr::GeneratedCodeInfo[] {\n");
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
for (int i = 0; i < file_->message_type_count(); i++) {
|
||||
WriteGeneratedCodeInfo(file_->message_type(i), printer, i == file_->message_type_count() - 1);
|
||||
}
|
||||
printer->Outdent();
|
||||
printer->Print("\n}));\n");
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
}
|
||||
else {
|
||||
printer->Print("null));\n");
|
||||
}
|
||||
printer->Print("});\n");
|
||||
|
||||
printer->Outdent();
|
||||
printer->Print("}\n");
|
||||
printer->Print("#endregion\n\n");
|
||||
}
|
||||
|
||||
void UmbrellaClassGenerator::WriteTypeLiterals(const Descriptor* descriptor, io::Printer* printer) {
|
||||
if (IsMapEntryMessage(descriptor)) {
|
||||
printer->Print("null, ");
|
||||
return;
|
||||
}
|
||||
printer->Print("typeof($type_name$), ", "type_name", GetClassName(descriptor));
|
||||
for (int i = 0; i < descriptor->nested_type_count(); i++) {
|
||||
WriteTypeLiterals(descriptor->nested_type(i), printer);
|
||||
}
|
||||
for (int i = 0; i < descriptor->enum_type_count(); i++) {
|
||||
printer->Print("typeof($type_name$), ", "type_name", GetClassName(descriptor->enum_type(i)));
|
||||
}
|
||||
// Write out the generated code for a particular message. This consists of the CLR type, property names
|
||||
// corresponding to fields, names corresponding to oneofs, nested enums, and nested types. Each array part
|
||||
// can be specified as null if it would be empty, to make the generated code somewhat simpler to read.
|
||||
// We write a line break at the end of each generated code info, so that in the final file we'll see all
|
||||
// the types, pre-ordered depth first, one per line. The indentation will be slightly unusual,
|
||||
// in that it will look like a single array when it's actually constructing a tree, but it'll be easy to
|
||||
// read even with multiple levels of nesting.
|
||||
// The "last" parameter indicates whether this message descriptor is the last one being printed in this immediate
|
||||
// context. It governs whether or not a trailing comma and newline is written after the constructor, effectively
|
||||
// just controlling the formatting in the generated code.
|
||||
void UmbrellaClassGenerator::WriteGeneratedCodeInfo(const Descriptor* descriptor, io::Printer* printer, bool last) {
|
||||
if (IsMapEntryMessage(descriptor)) {
|
||||
printer->Print("null, ");
|
||||
return;
|
||||
}
|
||||
// Generated message type
|
||||
printer->Print("new pbr::GeneratedCodeInfo(typeof($type_name$), ", "type_name", GetClassName(descriptor));
|
||||
|
||||
// Fields
|
||||
if (descriptor->field_count() > 0) {
|
||||
std::vector<std::string> fields;
|
||||
for (int i = 0; i < descriptor->field_count(); i++) {
|
||||
fields.push_back(GetPropertyName(descriptor->field(i)));
|
||||
}
|
||||
printer->Print("new[]{ \"$fields$\" }, ", "fields", JoinStrings(fields, "\", \""));
|
||||
}
|
||||
else {
|
||||
printer->Print("null, ");
|
||||
}
|
||||
|
||||
// Oneofs
|
||||
if (descriptor->oneof_decl_count() > 0) {
|
||||
std::vector<std::string> oneofs;
|
||||
for (int i = 0; i < descriptor->oneof_decl_count(); i++) {
|
||||
oneofs.push_back(UnderscoresToCamelCase(descriptor->oneof_decl(i)->name(), true));
|
||||
}
|
||||
printer->Print("new[]{ \"$oneofs$\" }, ", "oneofs", JoinStrings(oneofs, "\", \""));
|
||||
}
|
||||
else {
|
||||
printer->Print("null, ");
|
||||
}
|
||||
|
||||
// Nested enums
|
||||
if (descriptor->enum_type_count() > 0) {
|
||||
std::vector<std::string> enums;
|
||||
for (int i = 0; i < descriptor->enum_type_count(); i++) {
|
||||
enums.push_back(GetClassName(descriptor->enum_type(i)));
|
||||
}
|
||||
printer->Print("new[]{ typeof($enums$) }, ", "enums", JoinStrings(enums, "), typeof("));
|
||||
}
|
||||
else {
|
||||
printer->Print("null, ");
|
||||
}
|
||||
|
||||
// Nested types
|
||||
if (descriptor->nested_type_count() > 0) {
|
||||
// Need to specify array type explicitly here, as all elements may be null.
|
||||
printer->Print("new pbr::GeneratedCodeInfo[] { ");
|
||||
for (int i = 0; i < descriptor->nested_type_count(); i++) {
|
||||
WriteGeneratedCodeInfo(descriptor->nested_type(i), printer, i == descriptor->nested_type_count() - 1);
|
||||
}
|
||||
printer->Print("}");
|
||||
}
|
||||
else {
|
||||
printer->Print("null");
|
||||
}
|
||||
printer->Print(last ? ")" : "),\n");
|
||||
}
|
||||
|
||||
} // namespace csharp
|
||||
|
|
|
@ -57,7 +57,7 @@ class UmbrellaClassGenerator : public SourceGeneratorBase {
|
|||
|
||||
void WriteIntroduction(io::Printer* printer);
|
||||
void WriteDescriptor(io::Printer* printer);
|
||||
void WriteTypeLiterals(const Descriptor* descriptor, io::Printer* printer);
|
||||
void WriteGeneratedCodeInfo(const Descriptor* descriptor, io::Printer* printer, bool last);
|
||||
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(UmbrellaClassGenerator);
|
||||
};
|
||||
|
|
|
@ -73,7 +73,6 @@ void WrapperFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $name$_; }\n"
|
||||
" set {\n"
|
||||
|
@ -170,7 +169,6 @@ void WrapperOneofFieldGenerator::GenerateMembers(io::Printer* printer) {
|
|||
AddDeprecatedFlag(printer);
|
||||
printer->Print(
|
||||
variables_,
|
||||
"[pbr::ProtobufField($number$, \"$original_name$\")]\n"
|
||||
"$access_level$ $type_name$ $property_name$ {\n"
|
||||
" get { return $has_property_check$ ? ($type_name$) $oneof_name$_ : ($type_name$) null; }\n"
|
||||
" set {\n"
|
||||
|
|
Loading…
Add table
Reference in a new issue