Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
1d131c98
Commit
1d131c98
authored
Nov 13, 2008
by
Jon Skeet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New options now work fine.
parent
d6343be7
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
103 additions
and
60 deletions
+103
-60
csharp_options.proto
protos/google/protobuf/csharp_options.proto
+12
-7
unittest.proto
protos/google/protobuf/unittest.proto
+2
-2
unittest_custom_options.proto
protos/google/protobuf/unittest_custom_options.proto
+2
-2
unittest_embed_optimize_for.proto
protos/google/protobuf/unittest_embed_optimize_for.proto
+2
-2
unittest_import.proto
protos/google/protobuf/unittest_import.proto
+2
-2
unittest_mset.proto
protos/google/protobuf/unittest_mset.proto
+2
-2
unittest_optimize_for.proto
protos/google/protobuf/unittest_optimize_for.proto
+2
-2
ProtoGen.Test.csproj
src/ProtoGen.Test/ProtoGen.Test.csproj
+0
-1
ExtensionGenerator.cs
src/ProtoGen/ExtensionGenerator.cs
+1
-1
FieldGeneratorBase.cs
src/ProtoGen/FieldGeneratorBase.cs
+1
-9
Generator.cs
src/ProtoGen/Generator.cs
+2
-2
CSharpOptionsTest.cs
src/ProtocolBuffers.Test/CSharpOptionsTest.cs
+15
-14
ProtocolBuffers.Test.csproj
src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
+1
-0
___7469.tmp
src/ProtocolBuffers.Test/TestProtos/___7469.tmp
+0
-0
CSharpOptions.cs
src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
+14
-11
FieldDescriptor.cs
src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
+43
-0
FileDescriptor.cs
src/ProtocolBuffers/Descriptors/FileDescriptor.cs
+2
-3
No files found.
protos/google/protobuf/csharp_options.proto
View file @
1d131c98
...
...
@@ -10,16 +10,21 @@ message CSharpFileOptions {
optional
bool
public_classes
=
3
;
optional
bool
multiple_files
=
4
;
optional
bool
nest_classes
=
5
;
}
extend
FileOptions
{
optional
CSharpFileOptions
csharp_file_options
=
1000
;
}
extend
FileOptions
{
optional
CSharpFileOptions
csharp_options
=
1000
;
}
extend
FieldOptions
{
optional
CSharpFieldOptions
csharp_field_options
=
1000
;
}
message
CSharpFieldOptions
{
// Provides the ability to override the name of the property
// generated for this field. This does not currently work with
// messages optimised for reflection, and is only applied to the
// actual property rather than associated methods. (Careful
// consideration needed here...)
optional
string
property_name
=
1
;
extend
FieldOptions
{
optional
CSharpFieldOptions
csharp_options
=
1000
;
}
}
protos/google/protobuf/unittest.proto
View file @
1d131c98
...
...
@@ -2,8 +2,8 @@
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
import
"google/protobuf/descriptor.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
protos/google/protobuf/unittest_custom_options.proto
View file @
1d131c98
// Additional options required for C# generation. File from copyright
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestCustomOptionsProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestCustomOptionsProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
protos/google/protobuf/unittest_embed_optimize_for.proto
View file @
1d131c98
...
...
@@ -2,8 +2,8 @@
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
import
"google/protobuf/descriptor.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestEmbedOptimizeForProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestEmbedOptimizeForProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
protos/google/protobuf/unittest_import.proto
View file @
1d131c98
...
...
@@ -2,8 +2,8 @@
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
import
"google/protobuf/descriptor.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestImportProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestImportProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
protos/google/protobuf/unittest_mset.proto
View file @
1d131c98
...
...
@@ -2,8 +2,8 @@
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
import
"google/protobuf/descriptor.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestMessageSetProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestMessageSetProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
protos/google/protobuf/unittest_optimize_for.proto
View file @
1d131c98
...
...
@@ -2,8 +2,8 @@
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
import
"google/protobuf/descriptor.proto"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
CSharpFileOptions.csharp
_options
)
.
umbrella_classname
=
"UnitTestOptimizeForProtoFile"
;
option
(
google.protobuf.
csharp_file
_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.
csharp_file
_options
)
.
umbrella_classname
=
"UnitTestOptimizeForProtoFile"
;
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
...
...
src/ProtoGen.Test/ProtoGen.Test.csproj
View file @
1d131c98
...
...
@@ -45,7 +45,6 @@
</ItemGroup>
<ItemGroup>
<Compile
Include=
"DependencyResolutionTest.cs"
/>
<Compile
Include=
"DescriptorUtilTest.cs"
/>
<Compile
Include=
"GeneratorTest.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
</ItemGroup>
...
...
src/ProtoGen/ExtensionGenerator.cs
View file @
1d131c98
...
...
@@ -9,7 +9,7 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
public
void
Generate
(
TextGenerator
writer
)
{
string
name
=
NameHelpers
.
UnderscoresToPascalCase
(
GetFieldName
(
Descriptor
))
;
string
name
=
Descriptor
.
CSharpOptions
.
PropertyName
;
string
type
;
switch
(
Descriptor
.
MappedType
)
{
...
...
src/ProtoGen/FieldGeneratorBase.cs
View file @
1d131c98
...
...
@@ -73,17 +73,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
/// <summary>
/// Usually the same as CapitalizedName, except when the enclosing type has the same name,
/// in which case an underscore is appended.
/// </summary>
protected
string
PropertyName
{
get
{
string
ret
=
CapitalizedName
;
if
(
ret
==
Descriptor
.
ContainingType
.
Name
)
{
ret
+=
"_"
;
}
return
ret
;
return
Descriptor
.
CSharpOptions
.
PropertyName
;
}
}
...
...
src/ProtoGen/Generator.cs
View file @
1d131c98
...
...
@@ -30,8 +30,8 @@ namespace Google.ProtocolBuffers.ProtoGen {
foreach
(
string
inputFile
in
options
.
InputFiles
)
{
FileDescriptorSet
descriptorProtos
;
ExtensionRegistry
extensionRegistry
=
ExtensionRegistry
.
CreateInstance
();
extensionRegistry
.
Add
(
CSharp
FileOptions
.
CSharp
Options
);
extensionRegistry
.
Add
(
CSharp
FieldOptions
.
CSharp
Options
);
extensionRegistry
.
Add
(
CSharp
Options
.
CSharpFile
Options
);
extensionRegistry
.
Add
(
CSharp
Options
.
CSharpField
Options
);
using
(
Stream
inputStream
=
File
.
OpenRead
(
inputFile
))
{
descriptorProtos
=
FileDescriptorSet
.
ParseFrom
(
inputStream
,
extensionRegistry
);
}
...
...
src/Proto
Gen.Test/DescriptorUtil
Test.cs
→
src/Proto
colBuffers.Test/CSharpOptions
Test.cs
View file @
1d131c98
using
Google.ProtocolBuffers.DescriptorProtos
;
using
Google.ProtocolBuffers.DescriptorProtos
;
using
Google.ProtocolBuffers.Descriptors
;
using
NUnit.Framework
;
namespace
Google.ProtocolBuffers
.ProtoGen
{
namespace
Google.ProtocolBuffers
{
[
TestFixture
]
public
class
DescriptorUtilTest
{
/* FIXME: Move these around!
[
Test
]
public
void
ExplicitNamespace
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name = "x", Package = "pack", Options = new FileOptions.Builder().SetExtension(CSharpOptions.CSharpNamespace, "Foo.Bar").Build()
Name
=
"x"
,
Package
=
"pack"
,
Options
=
new
FileOptions
.
Builder
().
SetExtension
(
CSharpOptions
.
CSharpFileOptions
,
new
CSharpFileOptions
.
Builder
{
Namespace
=
"Foo.Bar"
}.
Build
()).
Build
()
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("Foo.Bar",
DescriptorUtil.GetNamespace(descriptor)
);
Assert
.
AreEqual
(
"Foo.Bar"
,
descriptor
.
CSharpOptions
.
Namespace
);
}
[
Test
]
public
void
NoNamespaceFallsBackToPackage
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"x"
,
Package
=
"pack"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("pack",
DescriptorUtil.GetNamespace(descriptor)
);
Assert
.
AreEqual
(
"pack"
,
descriptor
.
CSharpOptions
.
Namespace
);
}
[
Test
]
public
void
NoNamespaceOrPackageFallsBackToEmptyString
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"x"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("",
DescriptorUtil.GetNamespace(descriptor)
);
Assert
.
AreEqual
(
""
,
descriptor
.
CSharpOptions
.
Namespace
);
}
[
Test
]
public
void
ExplicitlyNamedFileClass
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name = "x", Options = new FileOptions.Builder().SetExtension(CSharpOptions.CSharpUmbrellaClassname, "Foo").Build()
Name
=
"x"
,
Options
=
new
FileOptions
.
Builder
().
SetExtension
(
CSharpOptions
.
CSharpFileOptions
,
new
CSharpFileOptions
.
Builder
{
UmbrellaClassname
=
"Foo"
}.
Build
()).
Build
()
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("Foo",
DescriptorUtil.GetUmbrellaClassName(descriptor)
);
Assert
.
AreEqual
(
"Foo"
,
descriptor
.
CSharpOptions
.
UmbrellaClassname
);
}
[
Test
]
public
void
ImplicitFileClassWithProtoSuffix
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"foo_bar.proto"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("FooBar",
DescriptorUtil.GetUmbrellaClassName(descriptor)
);
Assert
.
AreEqual
(
"FooBar"
,
descriptor
.
CSharpOptions
.
UmbrellaClassname
);
}
[
Test
]
public
void
ImplicitFileClassWithProtoDevelSuffix
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"foo_bar.protodevel"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("FooBar",
DescriptorUtil.GetUmbrellaClassName(descriptor)
);
Assert
.
AreEqual
(
"FooBar"
,
descriptor
.
CSharpOptions
.
UmbrellaClassname
);
}
[
Test
]
public
void
ImplicitFileClassWithNoSuffix
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"foo_bar"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("FooBar",
DescriptorUtil.GetUmbrellaClassName(descriptor)
);
Assert
.
AreEqual
(
"FooBar"
,
descriptor
.
CSharpOptions
.
UmbrellaClassname
);
}
[
Test
]
public
void
ImplicitFileClassWithDirectoryStructure
()
{
FileDescriptorProto
proto
=
new
FileDescriptorProto
.
Builder
{
Name
=
"x/y/foo_bar"
}.
Build
();
FileDescriptor
descriptor
=
FileDescriptor
.
BuildFrom
(
proto
,
null
);
Assert.AreEqual("FooBar",
DescriptorUtil.GetUmbrellaClassName(descriptor)
);
}
*/
Assert
.
AreEqual
(
"FooBar"
,
descriptor
.
CSharpOptions
.
UmbrellaClassname
);
}
}
}
src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
View file @
1d131c98
...
...
@@ -51,6 +51,7 @@
<Compile
Include=
"CodedInputStreamTest.cs"
/>
<Compile
Include=
"CodedOutputStreamTest.cs"
/>
<Compile
Include=
"Collections\PopsicleListTest.cs"
/>
<Compile
Include=
"CSharpOptionsTest.cs"
/>
<Compile
Include=
"DescriptorsTest.cs"
/>
<Compile
Include=
"DynamicMessageTest.cs"
/>
<Compile
Include=
"GeneratedMessageTest.cs"
/>
...
...
src/ProtocolBuffers.Test/TestProtos/___7469.tmp
deleted
100644 → 0
View file @
d6343be7
src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
View file @
1d131c98
...
...
@@ -16,20 +16,27 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
global
::
System
.
Convert
.
FromBase64String
(
"CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds"
+
"ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i"
+
"
4w
EKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1"
+
"
iA
EKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1"
+
"bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSFgoOcHVibGljX2NsYXNzZXMYAyAB"
+
"KAgSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFzc2VzGAUg"
+
"ASgI
MlkKDmNzaGFycF9vcHRpb25zEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVP
"
+
"
cHRpb25zGOgHIAEoCzIiLmdvb2dsZS5wcm90b2J1Zi5DU2hhcnBGaWxlT3B0
"
+
"
aW9ucyKIAQoSQ1NoYXJwRmllbGRPcHRpb25zEhUKDXByb3BlcnR5X25hbWUY
"
+
"
ASABKAkyWwoOY3NoYXJwX29wdGlvbnMSHS5nb29nbGUucHJvdG9idWYuRmll
"
+
"b
GRPcHRpb25zGOgHIAEoCzIjLmdvb2dsZS5wcm90b2J1Zi5DU2hhcnBGaWVs
"
+
"
ZE9wdGlvbnM=
"
),
"ASgI
IisKEkNTaGFycEZpZWxkT3B0aW9ucxIVCg1wcm9wZXJ0eV9uYW1lGAEg
"
+
"
ASgJOl4KE2NzaGFycF9maWxlX29wdGlvbnMSHC5nb29nbGUucHJvdG9idWYu
"
+
"
RmlsZU9wdGlvbnMY6AcgASgLMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycEZp
"
+
"
bGVPcHRpb25zOmEKFGNzaGFycF9maWVsZF9vcHRpb25zEh0uZ29vZ2xlLnBy
"
+
"b
3RvYnVmLkZpZWxkT3B0aW9ucxjoByABKAsyIy5nb29nbGUucHJvdG9idWYu
"
+
"
Q1NoYXJwRmllbGRPcHRpb25z
"
),
new
pbd
::
FileDescriptor
[]
{
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProtoFile
.
Descriptor
,
});
#
endregion
#
region
Extensions
public
static
readonly
pb
::
GeneratedExtensionBase
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFileOptions
>
CSharpFileOptions
=
pb
::
GeneratedSingleExtension
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFileOptions
>.
CreateInstance
(
Descriptor
.
Extensions
[
0
]);
public
static
readonly
pb
::
GeneratedExtensionBase
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFieldOptions
>
CSharpFieldOptions
=
pb
::
GeneratedSingleExtension
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFieldOptions
>.
CreateInstance
(
Descriptor
.
Extensions
[
1
]);
#
endregion
#
region
Static
variables
internal
static
readonly
pbd
::
MessageDescriptor
internal__static_google_protobuf_CSharpFileOptions__Descriptor
=
Descriptor
.
MessageTypes
[
0
];
...
...
@@ -66,8 +73,6 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
get
{
return
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpOptions
.
internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable
;
}
}
public
static
readonly
pb
::
GeneratedExtensionBase
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFileOptions
>
CSharpOptions
=
pb
::
GeneratedSingleExtension
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFileOptions
>.
CreateInstance
(
Descriptor
.
Extensions
[
0
]);
private
bool
hasNamespace
;
private
string
namespace_
=
""
;
public
bool
HasNamespace
{
...
...
@@ -293,8 +298,6 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
get
{
return
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpOptions
.
internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable
;
}
}
public
static
readonly
pb
::
GeneratedExtensionBase
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFieldOptions
>
CSharpOptions
=
pb
::
GeneratedSingleExtension
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpFieldOptions
>.
CreateInstance
(
Descriptor
.
Extensions
[
0
]);
private
bool
hasPropertyName
;
private
string
propertyName_
=
""
;
public
bool
HasPropertyName
{
...
...
src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
View file @
1d131c98
...
...
@@ -50,6 +50,9 @@ namespace Google.ProtocolBuffers.Descriptors {
private
FieldType
fieldType
;
private
MappedType
mappedType
;
private
CSharpFieldOptions
csharpFieldOptions
;
private
readonly
object
optionsLock
=
new
object
();
internal
FieldDescriptor
(
FieldDescriptorProto
proto
,
FileDescriptor
file
,
MessageDescriptor
parent
,
int
index
,
bool
isExtension
)
:
base
(
proto
,
file
,
ComputeFullName
(
file
,
parent
,
proto
.
Name
),
index
)
{
...
...
@@ -87,6 +90,31 @@ namespace Google.ProtocolBuffers.Descriptors {
file
.
DescriptorPool
.
AddSymbol
(
this
);
}
private
CSharpFieldOptions
BuildOrFakeCSharpOptions
()
{
// TODO(jonskeet): Check if we could use FileDescriptorProto.Descriptor.Name - interesting bootstrap issues
if
(
File
.
Proto
.
Name
==
"google/protobuf/csharp_options.proto"
)
{
if
(
Name
==
"csharp_field_options"
)
{
return
new
CSharpFieldOptions
.
Builder
{
PropertyName
=
"CSharpFieldOptions"
}.
Build
();
}
if
(
Name
==
"csharp_file_options"
)
{
return
new
CSharpFieldOptions
.
Builder
{
PropertyName
=
"CSharpFileOptions"
}.
Build
();
}
}
CSharpFieldOptions
.
Builder
builder
=
CSharpFieldOptions
.
CreateBuilder
();
if
(
Proto
.
Options
.
HasExtension
(
DescriptorProtos
.
CSharpOptions
.
CSharpFieldOptions
))
{
builder
.
MergeFrom
(
Proto
.
Options
.
GetExtension
(
DescriptorProtos
.
CSharpOptions
.
CSharpFieldOptions
));
}
if
(!
builder
.
HasPropertyName
)
{
string
fieldName
=
FieldType
==
FieldType
.
Group
?
MessageType
.
Name
:
Name
;
string
propertyName
=
NameHelpers
.
UnderscoresToPascalCase
(
fieldName
);
if
(
propertyName
==
ContainingType
.
Name
)
{
propertyName
+=
"_"
;
}
builder
.
PropertyName
=
propertyName
;
}
return
builder
.
Build
();
}
/// <summary>
/// Maps a field type as included in the .proto file to a FieldType.
/// </summary>
...
...
@@ -191,6 +219,21 @@ namespace Google.ProtocolBuffers.Descriptors {
public
MessageDescriptor
ContainingType
{
get
{
return
containingType
;
}
}
/// <summary>
/// Returns the C#-specific options for this file descriptor. This will always be
/// completely filled in.
/// </summary>
public
CSharpFieldOptions
CSharpOptions
{
get
{
lock
(
optionsLock
)
{
if
(
csharpFieldOptions
==
null
)
{
csharpFieldOptions
=
BuildOrFakeCSharpOptions
();
}
}
return
csharpFieldOptions
;
}
}
/// <summary>
/// For extensions defined nested within message types, gets
...
...
src/ProtocolBuffers/Descriptors/FileDescriptor.cs
View file @
1d131c98
...
...
@@ -88,8 +88,8 @@ namespace Google.ProtocolBuffers.Descriptors {
}.
Build
();
}
CSharpFileOptions
.
Builder
builder
=
CSharpFileOptions
.
CreateBuilder
();
if
(
proto
.
Options
.
HasExtension
(
CSharpFileOptions
.
CSharp
Options
))
{
builder
.
MergeFrom
(
proto
.
Options
.
GetExtension
(
CSharpFileOptions
.
CSharp
Options
));
if
(
proto
.
Options
.
HasExtension
(
DescriptorProtos
.
CSharpOptions
.
CSharpFile
Options
))
{
builder
.
MergeFrom
(
proto
.
Options
.
GetExtension
(
DescriptorProtos
.
CSharpOptions
.
CSharpFile
Options
));
}
if
(!
builder
.
HasNamespace
)
{
builder
.
Namespace
=
Package
;
...
...
@@ -128,7 +128,6 @@ namespace Google.ProtocolBuffers.Descriptors {
/// <summary>
/// Returns the C#-specific options for this file descriptor. This will always be
/// completely filled in.
/// FIXME: This isn't thread-safe. Can't do it at construction time due to bootstrapping issues.
/// </summary>
public
CSharpFileOptions
CSharpOptions
{
get
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment