Commit b075ff5c authored by Jon Skeet's avatar Jon Skeet

Added a flag to allow code contracts to be emitted

parent b49d3c78
No preview for this file type
...@@ -6,10 +6,11 @@ package google.protobuf; ...@@ -6,10 +6,11 @@ package google.protobuf;
message CSharpFileOptions { message CSharpFileOptions {
optional string namespace = 1; optional string namespace = 1;
optional string umbrella_classname= 2; optional string umbrella_classname = 2;
optional bool public_classes = 3; optional bool public_classes = 3 [default = true];
optional bool multiple_files = 4; optional bool multiple_files = 4;
optional bool nest_classes = 5; optional bool nest_classes = 5;
optional bool code_contracts = 6;
} }
extend FileOptions { extend FileOptions {
......
...@@ -116,7 +116,9 @@ namespace Google.ProtocolBuffers.ProtoGen { ...@@ -116,7 +116,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
writer.Indent(); writer.Indent();
writer.WriteLine(); writer.WriteLine();
} }
if (Descriptor.CSharpOptions.CodeContracts) {
writer.WriteLine("[global::System.Diagnostics.Contracts.ContractVerificationAttribute(false)]");
}
writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel, Descriptor.CSharpOptions.UmbrellaClassname); writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel, Descriptor.CSharpOptions.UmbrellaClassname);
writer.WriteLine(); writer.WriteLine();
writer.Indent(); writer.Indent();
......
...@@ -37,21 +37,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -37,21 +37,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
byte[] descriptorData = global::System.Convert.FromBase64String( byte[] descriptorData = global::System.Convert.FromBase64String(
"CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds" + "CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds" +
"ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i" + "ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i" +
"iAEKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1" + "pgEKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1" +
"bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSFgoOcHVibGljX2NsYXNzZXMYAyAB" + "bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSHAoOcHVibGljX2NsYXNzZXMYAyAB" +
"KAgSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFzc2VzGAUg" + "KAg6BHRydWUSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFz" +
"ASgIIisKEkNTaGFycEZpZWxkT3B0aW9ucxIVCg1wcm9wZXJ0eV9uYW1lGAEg" + "c2VzGAUgASgIEhYKDmNvZGVfY29udHJhY3RzGAYgASgIIisKEkNTaGFycEZp" +
"ASgJOl4KE2NzaGFycF9maWxlX29wdGlvbnMSHC5nb29nbGUucHJvdG9idWYu" + "ZWxkT3B0aW9ucxIVCg1wcm9wZXJ0eV9uYW1lGAEgASgJOl4KE2NzaGFycF9m" +
"RmlsZU9wdGlvbnMY6AcgASgLMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycEZp" + "aWxlX29wdGlvbnMSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMY6Acg" +
"bGVPcHRpb25zOmEKFGNzaGFycF9maWVsZF9vcHRpb25zEh0uZ29vZ2xlLnBy" + "ASgLMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycEZpbGVPcHRpb25zOmEKFGNz" +
"b3RvYnVmLkZpZWxkT3B0aW9ucxjoByABKAsyIy5nb29nbGUucHJvdG9idWYu" + "aGFycF9maWVsZF9vcHRpb25zEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0" +
"Q1NoYXJwRmllbGRPcHRpb25z"); "aW9ucxjoByABKAsyIy5nb29nbGUucHJvdG9idWYuQ1NoYXJwRmllbGRPcHRp" +
"b25z");
pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) { pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
descriptor = root; descriptor = root;
internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0]; internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0];
internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable = internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable =
new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder>(internal__static_google_protobuf_CSharpFileOptions__Descriptor, new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder>(internal__static_google_protobuf_CSharpFileOptions__Descriptor,
new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", }); new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", "CodeContracts", });
internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1]; internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1];
internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable = internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable =
new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder>(internal__static_google_protobuf_CSharpFieldOptions__Descriptor, new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder>(internal__static_google_protobuf_CSharpFieldOptions__Descriptor,
...@@ -113,7 +114,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -113,7 +114,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
public const int PublicClassesFieldNumber = 3; public const int PublicClassesFieldNumber = 3;
private bool hasPublicClasses; private bool hasPublicClasses;
private bool publicClasses_ = false; private bool publicClasses_ = true;
public bool HasPublicClasses { public bool HasPublicClasses {
get { return hasPublicClasses; } get { return hasPublicClasses; }
} }
...@@ -141,6 +142,16 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -141,6 +142,16 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
get { return nestClasses_; } get { return nestClasses_; }
} }
public const int CodeContractsFieldNumber = 6;
private bool hasCodeContracts;
private bool codeContracts_ = false;
public bool HasCodeContracts {
get { return hasCodeContracts; }
}
public bool CodeContracts {
get { return codeContracts_; }
}
public override bool IsInitialized { public override bool IsInitialized {
get { get {
return true; return true;
...@@ -163,6 +174,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -163,6 +174,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (HasNestClasses) { if (HasNestClasses) {
output.WriteBool(5, NestClasses); output.WriteBool(5, NestClasses);
} }
if (HasCodeContracts) {
output.WriteBool(6, CodeContracts);
}
UnknownFields.WriteTo(output); UnknownFields.WriteTo(output);
} }
...@@ -188,6 +202,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -188,6 +202,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (HasNestClasses) { if (HasNestClasses) {
size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses); size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses);
} }
if (HasCodeContracts) {
size += pb::CodedOutputStream.ComputeBoolSize(6, CodeContracts);
}
size += UnknownFields.SerializedSize; size += UnknownFields.SerializedSize;
memoizedSerializedSize = size; memoizedSerializedSize = size;
return size; return size;
...@@ -295,6 +312,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -295,6 +312,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.HasNestClasses) { if (other.HasNestClasses) {
NestClasses = other.NestClasses; NestClasses = other.NestClasses;
} }
if (other.HasCodeContracts) {
CodeContracts = other.CodeContracts;
}
this.MergeUnknownFields(other.UnknownFields); this.MergeUnknownFields(other.UnknownFields);
return this; return this;
} }
...@@ -347,6 +367,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -347,6 +367,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
NestClasses = input.ReadBool(); NestClasses = input.ReadBool();
break; break;
} }
case 48: {
CodeContracts = input.ReadBool();
break;
}
} }
} }
} }
...@@ -404,7 +428,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -404,7 +428,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
} }
public Builder ClearPublicClasses() { public Builder ClearPublicClasses() {
result.hasPublicClasses = false; result.hasPublicClasses = false;
result.publicClasses_ = false; result.publicClasses_ = true;
return this; return this;
} }
...@@ -443,6 +467,24 @@ namespace Google.ProtocolBuffers.DescriptorProtos { ...@@ -443,6 +467,24 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
result.nestClasses_ = false; result.nestClasses_ = false;
return this; return this;
} }
public bool HasCodeContracts {
get { return result.HasCodeContracts; }
}
public bool CodeContracts {
get { return result.CodeContracts; }
set { SetCodeContracts(value); }
}
public Builder SetCodeContracts(bool value) {
result.hasCodeContracts = true;
result.codeContracts_ = value;
return this;
}
public Builder ClearCodeContracts() {
result.hasCodeContracts = false;
result.codeContracts_ = false;
return this;
}
} }
static CSharpFileOptions() { static CSharpFileOptions() {
object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null); object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
......
...@@ -94,15 +94,6 @@ namespace Google.ProtocolBuffers.Descriptors { ...@@ -94,15 +94,6 @@ namespace Google.ProtocolBuffers.Descriptors {
if (!builder.HasNamespace) { if (!builder.HasNamespace) {
builder.Namespace = Package; builder.Namespace = Package;
} }
if (!builder.HasMultipleFiles) {
builder.MultipleFiles = false;
}
if (!builder.HasNestClasses) {
builder.NestClasses = false;
}
if (!builder.HasPublicClasses) {
builder.PublicClasses = true;
}
if (!builder.HasUmbrellaClassname) { if (!builder.HasUmbrellaClassname) {
int lastSlash = Name.LastIndexOf('/'); int lastSlash = Name.LastIndexOf('/');
string baseName = Name.Substring(lastSlash + 1); string baseName = Name.Substring(lastSlash + 1);
......
...@@ -57,6 +57,7 @@ namespace Google.ProtocolBuffers.Descriptors { ...@@ -57,6 +57,7 @@ namespace Google.ProtocolBuffers.Descriptors {
enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList, enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
(type, index) => new EnumDescriptor(type, file, this, index)); (type, index) => new EnumDescriptor(type, file, this, index));
// TODO(jonskeet): Sort fields first?
fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList, fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList,
(field, index) => new FieldDescriptor(field, file, this, index, false)); (field, index) => new FieldDescriptor(field, file, this, index, false));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment