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
74810c6a
Commit
74810c6a
authored
Jul 29, 2015
by
Jan Tattermusch
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #638 from jskeet/portable
First attempt at using profile 259 for Google.Protobuf.
parents
edff8888
d82ebe48
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
457 additions
and
21 deletions
+457
-21
README.md
csharp/README.md
+11
-0
AddressBook.csproj
csharp/src/AddressBook/AddressBook.csproj
+5
-2
app.config
csharp/src/AddressBook/app.config
+1
-1
Google.Protobuf.JsonDump.csproj
.../Google.Protobuf.JsonDump/Google.Protobuf.JsonDump.csproj
+6
-5
app.config
csharp/src/Google.Protobuf.JsonDump/app.config
+1
-1
PropertyInfoExtensionsTest.cs
...Protobuf.Test/Compatibility/PropertyInfoExtensionsTest.cs
+98
-0
TypeExtensionsTest.cs
.../Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs
+133
-0
Google.Protobuf.Test.csproj
csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
+2
-0
MapField.cs
csharp/src/Google.Protobuf/Collections/MapField.cs
+2
-1
RepeatedField.cs
csharp/src/Google.Protobuf/Collections/RepeatedField.cs
+6
-4
PropertyInfoExtensions.cs
...c/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs
+64
-0
TypeExtensions.cs
csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs
+113
-0
Google.Protobuf.csproj
csharp/src/Google.Protobuf/Google.Protobuf.csproj
+5
-2
Google.Protobuf.nuspec
csharp/src/Google.Protobuf/Google.Protobuf.nuspec
+4
-4
FieldAccessorBase.cs
csharp/src/Google.Protobuf/Reflection/FieldAccessorBase.cs
+1
-0
FieldDescriptor.cs
csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs
+1
-0
OneofAccessor.cs
csharp/src/Google.Protobuf/Reflection/OneofAccessor.cs
+1
-0
OneofDescriptor.cs
csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs
+2
-1
SingleFieldAccessor.cs
csharp/src/Google.Protobuf/Reflection/SingleFieldAccessor.cs
+1
-0
No files found.
csharp/README.md
View file @
74810c6a
...
...
@@ -22,6 +22,17 @@ Use `protoc` with the `--csharp_out` option to generate C# files in the specifie
Include these in your C# project, and add a reference to the
`Google.Protobuf`
project. Currently
there is no NuGet package for this, but we will be building one as soon as the API is stable.
Supported platforms
===================
The runtime library is built as a portable class library, supporting:
-
.NET 4.5
-
Windows 8
-
Windows Phone Silverlight 8
-
Windows Phone 8.1
-
.NET Core (dnxcore)
Building
========
...
...
csharp/src/AddressBook/AddressBook.csproj
View file @
74810c6a
...
...
@@ -10,10 +10,11 @@
<AppDesignerFolder>
Properties
</AppDesignerFolder>
<RootNamespace>
Google.Protobuf.Examples.AddressBook
</RootNamespace>
<AssemblyName>
AddressBook
</AssemblyName>
<TargetFrameworkVersion>
v4.
0
</TargetFrameworkVersion>
<TargetFrameworkVersion>
v4.
5
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
<StartupObject>
Google.Protobuf.Examples.AddressBook.Program
</StartupObject>
<TargetFrameworkProfile>
Client
</TargetFrameworkProfile>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<DebugSymbols>
true
</DebugSymbols>
...
...
@@ -26,6 +27,7 @@
<WarningLevel>
4
</WarningLevel>
<NoStdLib>
true
</NoStdLib>
<GenerateSerializationAssemblies>
Off
</GenerateSerializationAssemblies>
<Prefer32Bit>
false
</Prefer32Bit>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
>
<DebugType>
pdbonly
</DebugType>
...
...
@@ -37,6 +39,7 @@
<WarningLevel>
4
</WarningLevel>
<NoStdLib>
true
</NoStdLib>
<GenerateSerializationAssemblies>
Off
</GenerateSerializationAssemblies>
<Prefer32Bit>
false
</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"mscorlib"
/>
...
...
csharp/src/AddressBook/app.config
View file @
74810c6a
<?
xml
version
=
"1.0"
?>
<
configuration
>
<
startup
><
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.
0,Profile=Client
"
/></
startup
></
configuration
>
<
startup
><
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.
5
"
/></
startup
></
configuration
>
csharp/src/Google.Protobuf.JsonDump/Google.Protobuf.JsonDump.csproj
View file @
74810c6a
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup>
<EnvironmentFlavor>
CLIENTPROFILE
</EnvironmentFlavor>
<EnvironmentTemplate>
NET35
</EnvironmentTemplate>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<ProductVersion>
9.0.30729
</ProductVersion>
...
...
@@ -12,9 +10,10 @@
<AppDesignerFolder>
Properties
</AppDesignerFolder>
<RootNamespace>
Google.Protobuf.JsonDump
</RootNamespace>
<AssemblyName>
Google.Protobuf.JsonDump
</AssemblyName>
<TargetFrameworkVersion>
v4.
0
</TargetFrameworkVersion>
<TargetFrameworkVersion>
v4.
5
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
<TargetFrameworkProfile>
Client
</TargetFrameworkProfile>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<DebugSymbols>
true
</DebugSymbols>
...
...
@@ -27,6 +26,7 @@
<WarningLevel>
4
</WarningLevel>
<NoStdLib>
true
</NoStdLib>
<GenerateSerializationAssemblies>
Off
</GenerateSerializationAssemblies>
<Prefer32Bit>
false
</Prefer32Bit>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
>
<DebugType>
pdbonly
</DebugType>
...
...
@@ -38,6 +38,7 @@
<WarningLevel>
4
</WarningLevel>
<NoStdLib>
true
</NoStdLib>
<GenerateSerializationAssemblies>
Off
</GenerateSerializationAssemblies>
<Prefer32Bit>
false
</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"mscorlib"
/>
...
...
csharp/src/Google.Protobuf.JsonDump/app.config
View file @
74810c6a
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
configuration
>
<
startup
><
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.
0,Profile=Client
"
/></
startup
></
configuration
>
<
startup
><
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.
5
"
/></
startup
></
configuration
>
csharp/src/Google.Protobuf.Test/Compatibility/PropertyInfoExtensionsTest.cs
0 → 100644
View file @
74810c6a
#
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
NUnit.Framework
;
using
System.Reflection
;
namespace
Google.Protobuf.Compatibility
{
public
class
PropertyInfoExtensionsTest
{
public
string
PublicReadWrite
{
get
;
set
;
}
private
string
PrivateReadWrite
{
get
;
set
;
}
public
string
PublicReadPrivateWrite
{
get
;
private
set
;
}
public
string
PrivateReadPublicWrite
{
private
get
;
set
;
}
public
string
PublicReadOnly
{
get
{
return
null
;
}
}
private
string
PrivateReadOnly
{
get
{
return
null
;
}
}
public
string
PublicWriteOnly
{
set
{
}
}
private
string
PrivateWriteOnly
{
set
{
}
}
[
Test
]
[
TestCase
(
"PublicReadWrite"
)]
[
TestCase
(
"PublicReadPrivateWrite"
)]
[
TestCase
(
"PublicReadOnly"
)]
public
void
GetGetMethod_Success
(
string
name
)
{
var
propertyInfo
=
typeof
(
PropertyInfoExtensionsTest
)
.
GetProperty
(
name
,
BindingFlags
.
Instance
|
BindingFlags
.
NonPublic
|
BindingFlags
.
Public
);
Assert
.
IsNotNull
(
PropertyInfoExtensions
.
GetGetMethod
(
propertyInfo
));
}
[
Test
]
[
TestCase
(
"PrivateReadWrite"
)]
[
TestCase
(
"PrivateReadPublicWrite"
)]
[
TestCase
(
"PrivateReadOnly"
)]
[
TestCase
(
"PublicWriteOnly"
)]
[
TestCase
(
"PrivateWriteOnly"
)]
public
void
GetGetMethod_NoAccessibleGetter
(
string
name
)
{
var
propertyInfo
=
typeof
(
PropertyInfoExtensionsTest
)
.
GetProperty
(
name
,
BindingFlags
.
Instance
|
BindingFlags
.
NonPublic
|
BindingFlags
.
Public
);
Assert
.
IsNull
(
PropertyInfoExtensions
.
GetGetMethod
(
propertyInfo
));
}
[
Test
]
[
TestCase
(
"PublicReadWrite"
)]
[
TestCase
(
"PrivateReadPublicWrite"
)]
[
TestCase
(
"PublicWriteOnly"
)]
public
void
GetSetMethod_Success
(
string
name
)
{
var
propertyInfo
=
typeof
(
PropertyInfoExtensionsTest
)
.
GetProperty
(
name
,
BindingFlags
.
Instance
|
BindingFlags
.
NonPublic
|
BindingFlags
.
Public
);
Assert
.
IsNotNull
(
PropertyInfoExtensions
.
GetSetMethod
(
propertyInfo
));
}
[
Test
]
[
TestCase
(
"PublicReadPrivateWrite"
)]
[
TestCase
(
"PrivateReadWrite"
)]
[
TestCase
(
"PrivateReadOnly"
)]
[
TestCase
(
"PublicReadOnly"
)]
[
TestCase
(
"PrivateWriteOnly"
)]
public
void
GetSetMethod_NoAccessibleGetter
(
string
name
)
{
var
propertyInfo
=
typeof
(
PropertyInfoExtensionsTest
)
.
GetProperty
(
name
,
BindingFlags
.
Instance
|
BindingFlags
.
NonPublic
|
BindingFlags
.
Public
);
Assert
.
IsNull
(
PropertyInfoExtensions
.
GetSetMethod
(
propertyInfo
));
}
}
}
csharp/src/Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs
0 → 100644
View file @
74810c6a
#
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
NUnit.Framework
;
using
System
;
using
System.Collections.Generic
;
using
System.Reflection
;
namespace
Google.Protobuf.Compatibility
{
public
class
TypeExtensionsTest
{
public
class
DerivedList
:
List
<
string
>
{
}
public
string
PublicProperty
{
get
;
set
;
}
private
string
PrivateProperty
{
get
;
set
;
}
public
void
PublicMethod
()
{
}
private
void
PrivateMethod
()
{
}
[
Test
]
[
TestCase
(
typeof
(
int
),
true
)]
[
TestCase
(
typeof
(
int
?),
true
)]
[
TestCase
(
typeof
(
Nullable
<>),
true
)]
[
TestCase
(
typeof
(
WireFormat
.
WireType
),
true
)]
[
TestCase
(
typeof
(
string
),
false
)]
[
TestCase
(
typeof
(
object
),
false
)]
[
TestCase
(
typeof
(
Enum
),
false
)]
[
TestCase
(
typeof
(
ValueType
),
false
)]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
false
)]
[
TestCase
(
typeof
(
Action
),
false
)]
[
TestCase
(
typeof
(
Action
<>),
false
)]
[
TestCase
(
typeof
(
IDisposable
),
false
)]
public
void
IsValueType
(
Type
type
,
bool
expected
)
{
Assert
.
AreEqual
(
expected
,
TypeExtensions
.
IsValueType
(
type
));
}
[
Test
]
[
TestCase
(
typeof
(
object
),
typeof
(
string
),
true
)]
[
TestCase
(
typeof
(
object
),
typeof
(
int
),
true
)]
[
TestCase
(
typeof
(
string
),
typeof
(
string
),
true
)]
[
TestCase
(
typeof
(
string
),
typeof
(
object
),
false
)]
[
TestCase
(
typeof
(
string
),
typeof
(
int
),
false
)]
[
TestCase
(
typeof
(
int
),
typeof
(
int
),
true
)]
[
TestCase
(
typeof
(
ValueType
),
typeof
(
int
),
true
)]
[
TestCase
(
typeof
(
long
),
typeof
(
int
),
false
)]
//
public
void
IsAssignableFrom
(
Type
target
,
Type
argument
,
bool
expected
)
{
Assert
.
AreEqual
(
expected
,
TypeExtensions
.
IsAssignableFrom
(
target
,
argument
));
}
[
Test
]
[
TestCase
(
typeof
(
DerivedList
),
"Count"
)]
// Go up the type hierarchy
[
TestCase
(
typeof
(
List
<
string
>),
"Count"
)]
[
TestCase
(
typeof
(
List
<>),
"Count"
)]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"PublicProperty"
)]
public
void
GetProperty_Success
(
Type
type
,
string
name
)
{
var
property
=
TypeExtensions
.
GetProperty
(
type
,
name
);
Assert
.
IsNotNull
(
property
);
Assert
.
AreEqual
(
name
,
property
.
Name
);
}
[
Test
]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"PrivateProperty"
)]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"Garbage"
)]
public
void
GetProperty_NoSuchProperty
(
Type
type
,
string
name
)
{
var
property
=
TypeExtensions
.
GetProperty
(
type
,
name
);
Assert
.
IsNull
(
property
);
}
[
Test
]
[
TestCase
(
typeof
(
DerivedList
),
"RemoveAt"
)]
// Go up the type hierarchy
[
TestCase
(
typeof
(
List
<>),
"RemoveAt"
)]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"PublicMethod"
)]
public
void
GetMethod_Success
(
Type
type
,
string
name
)
{
var
method
=
TypeExtensions
.
GetMethod
(
type
,
name
);
Assert
.
IsNotNull
(
method
);
Assert
.
AreEqual
(
name
,
method
.
Name
);
}
[
Test
]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"PrivateMethod"
)]
[
TestCase
(
typeof
(
TypeExtensionsTest
),
"GarbageMethod"
)]
public
void
GetMethod_NoSuchMethod
(
Type
type
,
string
name
)
{
var
method
=
TypeExtensions
.
GetMethod
(
type
,
name
);
Assert
.
IsNull
(
method
);
}
[
Test
]
[
TestCase
(
typeof
(
List
<
string
>),
"IndexOf"
)]
public
void
GetMethod_Ambiguous
(
Type
type
,
string
name
)
{
Assert
.
Throws
<
AmbiguousMatchException
>(()
=>
TypeExtensions
.
GetMethod
(
type
,
name
));
}
}
}
csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
View file @
74810c6a
...
...
@@ -75,6 +75,8 @@
<Compile
Include=
"CodedInputStreamExtensions.cs"
/>
<Compile
Include=
"CodedInputStreamTest.cs"
/>
<Compile
Include=
"CodedOutputStreamTest.cs"
/>
<Compile
Include=
"Compatibility\PropertyInfoExtensionsTest.cs"
/>
<Compile
Include=
"Compatibility\TypeExtensionsTest.cs"
/>
<Compile
Include=
"EqualityTester.cs"
/>
<Compile
Include=
"FieldCodecTest.cs"
/>
<Compile
Include=
"GeneratedMessageTest.cs"
/>
...
...
csharp/src/Google.Protobuf/Collections/MapField.cs
View file @
74810c6a
...
...
@@ -35,6 +35,7 @@ using System;
using
System.Collections
;
using
System.Collections.Generic
;
using
System.Linq
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Collections
{
...
...
@@ -74,7 +75,7 @@ namespace Google.Protobuf.Collections
/// <param name="allowNullValues">Whether null values are permitted in the map or not.</param>
public
MapField
(
bool
allowNullValues
)
{
if
(
allowNullValues
&&
typeof
(
TValue
).
IsValueType
&&
Nullable
.
GetUnderlyingType
(
typeof
(
TValue
))
==
null
)
if
(
allowNullValues
&&
typeof
(
TValue
).
IsValueType
()
&&
Nullable
.
GetUnderlyingType
(
typeof
(
TValue
))
==
null
)
{
throw
new
ArgumentException
(
"allowNullValues"
,
"Non-nullable value types do not support null values"
);
}
...
...
csharp/src/Google.Protobuf/Collections/RepeatedField.cs
View file @
74810c6a
...
...
@@ -29,10 +29,12 @@
// (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
Google.Protobuf.Reflection
;
using
System
;
using
System.Collections
;
using
System.Collections.Generic
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Collections
{
...
...
@@ -88,7 +90,7 @@ namespace Google.Protobuf.Collections
uint
tag
=
input
.
LastTag
;
var
reader
=
codec
.
ValueReader
;
// Value types can be packed or not.
if
(
typeof
(
T
).
IsValueType
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
if
(
typeof
(
T
).
IsValueType
()
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
{
int
length
=
input
.
ReadLength
();
if
(
length
>
0
)
...
...
@@ -119,7 +121,7 @@ namespace Google.Protobuf.Collections
return
0
;
}
uint
tag
=
codec
.
Tag
;
if
(
typeof
(
T
).
IsValueType
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
if
(
typeof
(
T
).
IsValueType
()
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
{
int
dataSize
=
CalculatePackedDataSize
(
codec
);
return
CodedOutputStream
.
ComputeRawVarint32Size
(
tag
)
+
...
...
@@ -165,7 +167,7 @@ namespace Google.Protobuf.Collections
}
var
writer
=
codec
.
ValueWriter
;
var
tag
=
codec
.
Tag
;
if
(
typeof
(
T
).
IsValueType
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
if
(
typeof
(
T
).
IsValueType
()
&&
WireFormat
.
GetTagWireType
(
tag
)
==
WireFormat
.
WireType
.
LengthDelimited
)
{
// Packed primitive type
uint
size
=
(
uint
)
CalculatePackedDataSize
(
codec
);
...
...
csharp/src/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs
0 → 100644
View file @
74810c6a
#
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.Reflection
;
namespace
Google.Protobuf.Compatibility
{
/// <summary>
/// Extension methods for <see cref="PropertyInfo"/>, effectively providing
/// the familiar members from previous desktop framework versions while
/// targeting the newer releases, .NET Core etc.
/// </summary>
internal
static
class
PropertyInfoExtensions
{
/// <summary>
/// Returns the public getter of a property, or null if there is no such getter
/// (either because it's read-only, or the getter isn't public).
/// </summary>
internal
static
MethodInfo
GetGetMethod
(
this
PropertyInfo
target
)
{
var
method
=
target
.
GetMethod
;
return
method
!=
null
&&
method
.
IsPublic
?
method
:
null
;
}
/// <summary>
/// Returns the public setter of a property, or null if there is no such setter
/// (either because it's write-only, or the setter isn't public).
/// </summary>
internal
static
MethodInfo
GetSetMethod
(
this
PropertyInfo
target
)
{
var
method
=
target
.
SetMethod
;
return
method
!=
null
&&
method
.
IsPublic
?
method
:
null
;
}
}
}
csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs
0 → 100644
View file @
74810c6a
#
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
;
using
System.Reflection
;
namespace
Google.Protobuf.Compatibility
{
/// <summary>
/// Provides extension methods on Type that just proxy to TypeInfo.
/// These are used to support the new type system from .NET 4.5, without
/// having calls to GetTypeInfo all over the place. While the methods here are meant to be
/// broadly compatible with the desktop framework, there are some subtle differences in behaviour - but
/// they're not expected to affect our use cases. While the class is internal, that should be fine: we can
/// evaluate each new use appropriately.
/// </summary>
internal
static
class
TypeExtensions
{
/// <summary>
/// Returns true if the target type is a value type, including a nullable value type or an enum, or false
/// if it's a reference type (class, delegate, interface - including System.ValueType and System.Enum).
/// </summary>
internal
static
bool
IsValueType
(
this
Type
target
)
{
return
target
.
GetTypeInfo
().
IsValueType
;
}
/// <summary>
/// See https://msdn.microsoft.com/en-us/library/system.type.isassignablefrom
/// </summary>
internal
static
bool
IsAssignableFrom
(
this
Type
target
,
Type
c
)
{
return
target
.
GetTypeInfo
().
IsAssignableFrom
(
c
.
GetTypeInfo
());
}
/// <summary>
/// Returns a representation of the public property associated with the given name in the given type,
/// including inherited properties or null if there is no such public property.
/// Here, "public property" means a property where either the getter, or the setter, or both, is public.
/// </summary>
internal
static
PropertyInfo
GetProperty
(
this
Type
target
,
string
name
)
{
// GetDeclaredProperty only returns properties declared in the given type, so we need to recurse.
while
(
target
!=
null
)
{
var
typeInfo
=
target
.
GetTypeInfo
();
var
ret
=
typeInfo
.
GetDeclaredProperty
(
name
);
if
(
ret
!=
null
&&
((
ret
.
CanRead
&&
ret
.
GetMethod
.
IsPublic
)
||
(
ret
.
CanWrite
&&
ret
.
SetMethod
.
IsPublic
)))
{
return
ret
;
}
target
=
typeInfo
.
BaseType
;
}
return
null
;
}
/// <summary>
/// Returns a representation of the public method associated with the given name in the given type,
/// including inherited methods.
/// </summary>
/// <remarks>
/// This has a few differences compared with Type.GetMethod in the desktop framework. It will throw
/// if there is an ambiguous match even between a private method and a public one, but it *won't* throw
/// if there are two overloads at different levels in the type hierarchy (e.g. class Base declares public void Foo(int) and
/// class Child : Base declares public void Foo(long)).
/// </remarks>
/// <exception cref="AmbiguousMatchException">One type in the hierarchy declared more than one method with the same name</exception>
internal
static
MethodInfo
GetMethod
(
this
Type
target
,
string
name
)
{
// GetDeclaredMethod only returns methods declared in the given type, so we need to recurse.
while
(
target
!=
null
)
{
var
typeInfo
=
target
.
GetTypeInfo
();
var
ret
=
typeInfo
.
GetDeclaredMethod
(
name
);
if
(
ret
!=
null
&&
ret
.
IsPublic
)
{
return
ret
;
}
target
=
typeInfo
.
BaseType
;
}
return
null
;
}
}
}
csharp/src/Google.Protobuf/Google.Protobuf.csproj
View file @
74810c6a
...
...
@@ -11,8 +11,8 @@
<RootNamespace>
Google.Protobuf
</RootNamespace>
<AssemblyName>
Google.Protobuf
</AssemblyName>
<ProjectTypeGuids>
{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
<TargetFrameworkProfile>
Profile
92
</TargetFrameworkProfile>
<TargetFrameworkVersion>
v4.
0
</TargetFrameworkVersion>
<TargetFrameworkProfile>
Profile
259
</TargetFrameworkProfile>
<TargetFrameworkVersion>
v4.
5
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
<SignAssembly>
true
</SignAssembly>
<AssemblyOriginatorKeyFile>
..\..\keys\Google.Protobuf.snk
</AssemblyOriginatorKeyFile>
...
...
@@ -60,6 +60,8 @@
<Compile
Include=
"Collections\MapField.cs"
/>
<Compile
Include=
"Collections\ReadOnlyDictionary.cs"
/>
<Compile
Include=
"Collections\RepeatedField.cs"
/>
<Compile
Include=
"Compatibility\PropertyInfoExtensions.cs"
/>
<Compile
Include=
"Compatibility\TypeExtensions.cs"
/>
<Compile
Include=
"FieldCodec.cs"
/>
<Compile
Include=
"FrameworkPortability.cs"
/>
<Compile
Include=
"Freezable.cs"
/>
...
...
@@ -111,6 +113,7 @@
<ItemGroup>
<None
Include=
"Google.Protobuf.nuspec"
/>
</ItemGroup>
<ItemGroup
/>
<Import
Project=
"$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets"
/>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
...
...
csharp/src/Google.Protobuf/Google.Protobuf.nuspec
View file @
74810c6a
...
...
@@ -16,9 +16,9 @@
<tags>
Protocol Buffers Binary Serialization Format Google proto proto3
</tags>
</metadata>
<files>
<file
src=
"bin/Release/Google.Protobuf.dll"
target=
"lib/portable-net45+
win8+wp8+wpa81
"
/>
<file
src=
"bin/Release/Google.Protobuf.pdb"
target=
"lib/portable-net45+win8+wp8+wpa81
"
/>
<file
src=
"bin/Release/Google.Protobuf.xml"
target=
"lib/portable-net45+win8+wp8+wpa81
"
/>
<file
src=
"**\*.cs"
target=
"src"
/>
<file
src=
"bin/Release/Google.Protobuf.dll"
target=
"lib/portable-net45+
netcore45+wpa81+wp8
"
/>
<file
src=
"bin/Release/Google.Protobuf.pdb"
target=
"lib/portable-net45+netcore45+wpa81+wp8
"
/>
<file
src=
"bin/Release/Google.Protobuf.xml"
target=
"lib/portable-net45+netcore45+wpa81+wp8
"
/>
<file
src=
"**\*.cs"
target=
"src"
/>
</files>
</package>
csharp/src/Google.Protobuf/Reflection/FieldAccessorBase.cs
View file @
74810c6a
...
...
@@ -32,6 +32,7 @@
using
System
;
using
System.Reflection
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Reflection
{
...
...
csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs
View file @
74810c6a
...
...
@@ -32,6 +32,7 @@
using
System
;
using
System.Linq
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Reflection
{
...
...
csharp/src/Google.Protobuf/Reflection/OneofAccessor.cs
View file @
74810c6a
...
...
@@ -32,6 +32,7 @@
using
System
;
using
System.Reflection
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Reflection
{
...
...
csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs
View file @
74810c6a
...
...
@@ -33,6 +33,7 @@
using
System.Collections.Generic
;
using
System.Collections.ObjectModel
;
using
System.Linq
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Reflection
{
...
...
@@ -91,7 +92,7 @@ namespace Google.Protobuf.Reflection
{
throw
new
DescriptorValidationException
(
this
,
"Property "
+
clrName
+
"Case not found in "
+
containingType
.
GeneratedType
);
}
var
clearMethod
=
containingType
.
GeneratedType
.
GetMethod
(
"Clear"
+
clrName
,
ReflectionUtil
.
EmptyTypes
);
var
clearMethod
=
containingType
.
GeneratedType
.
GetMethod
(
"Clear"
+
clrName
);
if
(
clearMethod
==
null
)
{
throw
new
DescriptorValidationException
(
this
,
"Method Clear"
+
clrName
+
" not found in "
+
containingType
.
GeneratedType
);
...
...
csharp/src/Google.Protobuf/Reflection/SingleFieldAccessor.cs
View file @
74810c6a
...
...
@@ -32,6 +32,7 @@
using
System
;
using
System.Reflection
;
using
Google.Protobuf.Compatibility
;
namespace
Google.Protobuf.Reflection
{
...
...
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