Merge pull request #317 from jskeet/csharp
Tidying up the C# runtime project
This commit is contained in:
commit
a449f66bdb
163 changed files with 1193 additions and 20386 deletions
|
@ -1,41 +0,0 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF20</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
<!--<OSVersion>5.2</OSVersion>-->
|
||||
<!--<DeployDirSuffix>CF20</DeployDirSuffix>-->
|
||||
<!--<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>-->
|
||||
<!--<FormFactorID></FormFactorID>-->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\CF20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\CF20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,44 +0,0 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF35</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
<!--<OSVersion>5.2</OSVersion>-->
|
||||
<!--<DeployDirSuffix>CF35</DeployDirSuffix>-->
|
||||
<!--<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>-->
|
||||
<!--<FormFactorID></FormFactorID>-->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\CF35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\CF35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,17 +0,0 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET20</EnvironmentTemplate>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\NET20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOEXTENSIONS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\NET20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOEXTENSIONS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,20 +0,0 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET35</EnvironmentTemplate>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,20 +0,0 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET40</EnvironmentTemplate>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\NET40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\NET40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,51 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
|
||||
xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
|
||||
<EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>PL40</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Profile1</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\PL40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\PL40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<Import cs:Precondition=" '$(EnvironmentProjectType)' != 'TEST' "
|
||||
Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||
<!-- Portable Library will be tested as silverlight -->
|
||||
<PropertyGroup cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' ">
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />
|
||||
<Import cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' "
|
||||
Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<ProjectExtensions cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' ">
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,44 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
|
||||
xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL20</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\SL20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\SL20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<!-- Preprocess include of silverlight testing -->
|
||||
<cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,47 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
|
||||
xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL30</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\SL30\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\SL30\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<!-- Preprocess include of silverlight testing -->
|
||||
<cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,48 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
|
||||
xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL40</EnvironmentTemplate>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\SL40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\SL40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<!-- Preprocess include of silverlight testing -->
|
||||
<cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,34 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
|
||||
xmlns:cs="urn:schemas-csharp-project:template">
|
||||
|
||||
<PropertyGroup>
|
||||
<SilverlightApplication>true</SilverlightApplication>
|
||||
<XapOutputs>true</XapOutputs>
|
||||
<GenerateSilverlightManifest>true</GenerateSilverlightManifest>
|
||||
<XapFilename>$(AssemblyName).xap</XapFilename>
|
||||
<SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
|
||||
<SilverlightAppEntry>$(RootNamespace).App</SilverlightAppEntry>
|
||||
<TestPageFileName>TestPage.html</TestPageFileName>
|
||||
<CreateTestPage>true</CreateTestPage>
|
||||
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
|
||||
<OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>
|
||||
<EnableOutOfBrowser>true</EnableOutOfBrowser>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Windows" />
|
||||
<Reference Include="System.Windows.Browser" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<None Include="Properties\AppManifest.xml" />
|
||||
<None Include="Properties\OutOfBrowserSettings.xml" />
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -1,140 +0,0 @@
|
|||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.ProtoBench";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "GoogleSizeProtoFile";
|
||||
|
||||
package benchmarks;
|
||||
|
||||
option java_outer_classname = "GoogleSize";
|
||||
option optimize_for = CODE_SIZE;
|
||||
|
||||
message SizeMessage1 {
|
||||
required string field1 = 1;
|
||||
optional string field9 = 9;
|
||||
optional string field18 = 18;
|
||||
optional bool field80 = 80 [default=false];
|
||||
optional bool field81 = 81 [default=true];
|
||||
required int32 field2 = 2;
|
||||
required int32 field3 = 3;
|
||||
optional int32 field280 = 280;
|
||||
optional int32 field6 = 6 [default=0];
|
||||
optional int64 field22 = 22;
|
||||
optional string field4 = 4;
|
||||
repeated fixed64 field5 = 5;
|
||||
optional bool field59 = 59 [default=false];
|
||||
optional string field7 = 7;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field130 = 130 [default=0];
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional bool field17 = 17 [default=true];
|
||||
optional bool field13 = 13 [default=true];
|
||||
optional bool field14 = 14 [default=true];
|
||||
optional int32 field104 = 104 [default=0];
|
||||
optional int32 field100 = 100 [default=0];
|
||||
optional int32 field101 = 101 [default=0];
|
||||
optional string field102 = 102;
|
||||
optional string field103 = 103;
|
||||
optional int32 field29 = 29 [default=0];
|
||||
optional bool field30 = 30 [default=false];
|
||||
optional int32 field60 = 60 [default=-1];
|
||||
optional int32 field271 = 271 [default=-1];
|
||||
optional int32 field272 = 272 [default=-1];
|
||||
optional int32 field150 = 150;
|
||||
optional int32 field23 = 23 [default=0];
|
||||
optional bool field24 = 24 [default=false];
|
||||
optional int32 field25 = 25 [default=0];
|
||||
optional SizeMessage1SubMessage field15 = 15;
|
||||
optional bool field78 = 78;
|
||||
optional int32 field67 = 67 [default=0];
|
||||
optional int32 field68 = 68;
|
||||
optional int32 field128 = 128 [default=0];
|
||||
optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
|
||||
optional int32 field131 = 131 [default=0];
|
||||
}
|
||||
|
||||
message SizeMessage1SubMessage {
|
||||
optional int32 field1 = 1 [default=0];
|
||||
optional int32 field2 = 2 [default=0];
|
||||
optional int32 field3 = 3 [default=0];
|
||||
optional string field15 = 15;
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional int64 field13 = 13;
|
||||
optional int64 field14 = 14;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field19 = 19 [default=2];
|
||||
optional bool field20 = 20 [default=true];
|
||||
optional bool field28 = 28 [default=true];
|
||||
optional fixed64 field21 = 21;
|
||||
optional int32 field22 = 22;
|
||||
optional bool field23 = 23 [ default=false ];
|
||||
optional bool field206 = 206 [default=false];
|
||||
optional fixed32 field203 = 203;
|
||||
optional int32 field204 = 204;
|
||||
optional string field205 = 205;
|
||||
optional uint64 field207 = 207;
|
||||
optional uint64 field300 = 300;
|
||||
}
|
||||
|
||||
message SizeMessage2 {
|
||||
optional string field1 = 1;
|
||||
optional int64 field3 = 3;
|
||||
optional int64 field4 = 4;
|
||||
optional int64 field30 = 30;
|
||||
optional bool field75 = 75 [default=false];
|
||||
optional string field6 = 6;
|
||||
optional bytes field2 = 2;
|
||||
optional int32 field21 = 21 [default=0];
|
||||
optional int32 field71 = 71;
|
||||
optional float field25 = 25;
|
||||
optional int32 field109 = 109 [default=0];
|
||||
optional int32 field210 = 210 [default=0];
|
||||
optional int32 field211 = 211 [default=0];
|
||||
optional int32 field212 = 212 [default=0];
|
||||
optional int32 field213 = 213 [default=0];
|
||||
optional int32 field216 = 216 [default=0];
|
||||
optional int32 field217 = 217 [default=0];
|
||||
optional int32 field218 = 218 [default=0];
|
||||
optional int32 field220 = 220 [default=0];
|
||||
optional int32 field221 = 221 [default=0];
|
||||
optional float field222 = 222 [default=0.0];
|
||||
optional int32 field63 = 63;
|
||||
|
||||
repeated group Group1 = 10 {
|
||||
required float field11 = 11;
|
||||
optional float field26 = 26;
|
||||
optional string field12 = 12;
|
||||
optional string field13 = 13;
|
||||
repeated string field14 = 14;
|
||||
required uint64 field15 = 15;
|
||||
optional int32 field5 = 5;
|
||||
optional string field27 = 27;
|
||||
optional int32 field28 = 28;
|
||||
optional string field29 = 29;
|
||||
optional string field16 = 16;
|
||||
repeated string field22 = 22;
|
||||
repeated int32 field73 = 73;
|
||||
optional int32 field20 = 20 [default=0];
|
||||
optional string field24 = 24;
|
||||
optional SizeMessage2GroupedMessage field31 = 31;
|
||||
}
|
||||
repeated string field128 = 128;
|
||||
optional int64 field131 = 131;
|
||||
repeated string field127 = 127;
|
||||
optional int32 field129 = 129;
|
||||
repeated int64 field130 = 130;
|
||||
optional bool field205 = 205 [default=false];
|
||||
optional bool field206 = 206 [default=false];
|
||||
}
|
||||
|
||||
message SizeMessage2GroupedMessage {
|
||||
optional float field1 = 1;
|
||||
optional float field2 = 2;
|
||||
optional float field3 = 3 [default=0.0];
|
||||
optional bool field4 = 4;
|
||||
optional bool field5 = 5;
|
||||
optional bool field6 = 6 [default=true];
|
||||
optional bool field7 = 7 [default=false];
|
||||
optional float field8 = 8;
|
||||
optional bool field9 = 9;
|
||||
optional float field10 = 10;
|
||||
optional int64 field11 = 11;
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.ProtoBench";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "GoogleSpeedProtoFile";
|
||||
|
||||
package benchmarks;
|
||||
|
||||
option java_outer_classname = "GoogleSpeed";
|
||||
option optimize_for = SPEED;
|
||||
|
||||
message SpeedMessage1 {
|
||||
required string field1 = 1;
|
||||
optional string field9 = 9;
|
||||
optional string field18 = 18;
|
||||
optional bool field80 = 80 [default=false];
|
||||
optional bool field81 = 81 [default=true];
|
||||
required int32 field2 = 2;
|
||||
required int32 field3 = 3;
|
||||
optional int32 field280 = 280;
|
||||
optional int32 field6 = 6 [default=0];
|
||||
optional int64 field22 = 22;
|
||||
optional string field4 = 4;
|
||||
repeated fixed64 field5 = 5;
|
||||
optional bool field59 = 59 [default=false];
|
||||
optional string field7 = 7;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field130 = 130 [default=0];
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional bool field17 = 17 [default=true];
|
||||
optional bool field13 = 13 [default=true];
|
||||
optional bool field14 = 14 [default=true];
|
||||
optional int32 field104 = 104 [default=0];
|
||||
optional int32 field100 = 100 [default=0];
|
||||
optional int32 field101 = 101 [default=0];
|
||||
optional string field102 = 102;
|
||||
optional string field103 = 103;
|
||||
optional int32 field29 = 29 [default=0];
|
||||
optional bool field30 = 30 [default=false];
|
||||
optional int32 field60 = 60 [default=-1];
|
||||
optional int32 field271 = 271 [default=-1];
|
||||
optional int32 field272 = 272 [default=-1];
|
||||
optional int32 field150 = 150;
|
||||
optional int32 field23 = 23 [default=0];
|
||||
optional bool field24 = 24 [default=false];
|
||||
optional int32 field25 = 25 [default=0];
|
||||
optional SpeedMessage1SubMessage field15 = 15;
|
||||
optional bool field78 = 78;
|
||||
optional int32 field67 = 67 [default=0];
|
||||
optional int32 field68 = 68;
|
||||
optional int32 field128 = 128 [default=0];
|
||||
optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
|
||||
optional int32 field131 = 131 [default=0];
|
||||
}
|
||||
|
||||
message SpeedMessage1SubMessage {
|
||||
optional int32 field1 = 1 [default=0];
|
||||
optional int32 field2 = 2 [default=0];
|
||||
optional int32 field3 = 3 [default=0];
|
||||
optional string field15 = 15;
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional int64 field13 = 13;
|
||||
optional int64 field14 = 14;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field19 = 19 [default=2];
|
||||
optional bool field20 = 20 [default=true];
|
||||
optional bool field28 = 28 [default=true];
|
||||
optional fixed64 field21 = 21;
|
||||
optional int32 field22 = 22;
|
||||
optional bool field23 = 23 [ default=false ];
|
||||
optional bool field206 = 206 [default=false];
|
||||
optional fixed32 field203 = 203;
|
||||
optional int32 field204 = 204;
|
||||
optional string field205 = 205;
|
||||
optional uint64 field207 = 207;
|
||||
optional uint64 field300 = 300;
|
||||
}
|
||||
|
||||
message SpeedMessage2 {
|
||||
optional string field1 = 1;
|
||||
optional int64 field3 = 3;
|
||||
optional int64 field4 = 4;
|
||||
optional int64 field30 = 30;
|
||||
optional bool field75 = 75 [default=false];
|
||||
optional string field6 = 6;
|
||||
optional bytes field2 = 2;
|
||||
optional int32 field21 = 21 [default=0];
|
||||
optional int32 field71 = 71;
|
||||
optional float field25 = 25;
|
||||
optional int32 field109 = 109 [default=0];
|
||||
optional int32 field210 = 210 [default=0];
|
||||
optional int32 field211 = 211 [default=0];
|
||||
optional int32 field212 = 212 [default=0];
|
||||
optional int32 field213 = 213 [default=0];
|
||||
optional int32 field216 = 216 [default=0];
|
||||
optional int32 field217 = 217 [default=0];
|
||||
optional int32 field218 = 218 [default=0];
|
||||
optional int32 field220 = 220 [default=0];
|
||||
optional int32 field221 = 221 [default=0];
|
||||
optional float field222 = 222 [default=0.0];
|
||||
optional int32 field63 = 63;
|
||||
|
||||
repeated group Group1 = 10 {
|
||||
required float field11 = 11;
|
||||
optional float field26 = 26;
|
||||
optional string field12 = 12;
|
||||
optional string field13 = 13;
|
||||
repeated string field14 = 14;
|
||||
required uint64 field15 = 15;
|
||||
optional int32 field5 = 5;
|
||||
optional string field27 = 27;
|
||||
optional int32 field28 = 28;
|
||||
optional string field29 = 29;
|
||||
optional string field16 = 16;
|
||||
repeated string field22 = 22;
|
||||
repeated int32 field73 = 73;
|
||||
optional int32 field20 = 20 [default=0];
|
||||
optional string field24 = 24;
|
||||
optional SpeedMessage2GroupedMessage field31 = 31;
|
||||
}
|
||||
repeated string field128 = 128;
|
||||
optional int64 field131 = 131;
|
||||
repeated string field127 = 127;
|
||||
optional int32 field129 = 129;
|
||||
repeated int64 field130 = 130;
|
||||
optional bool field205 = 205 [default=false];
|
||||
optional bool field206 = 206 [default=false];
|
||||
}
|
||||
|
||||
message SpeedMessage2GroupedMessage {
|
||||
optional float field1 = 1;
|
||||
optional float field2 = 2;
|
||||
optional float field3 = 3 [default=0.0];
|
||||
optional bool field4 = 4;
|
||||
optional bool field5 = 5;
|
||||
optional bool field6 = 6 [default=true];
|
||||
optional bool field7 = 7 [default=false];
|
||||
optional float field8 = 8;
|
||||
optional bool field9 = 9;
|
||||
optional float field10 = 10;
|
||||
optional int64 field11 = 11;
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
syntax = "proto2";
|
||||
|
||||
// Additional options required for C# generation. File from copyright
|
||||
// line onwards is as per original distribution.
|
||||
import "google/protobuf/unittest.proto";
|
||||
import "google/protobuf/unittest_custom_options.proto";
|
||||
|
||||
option csharp_namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
|
||||
// option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
||||
|
||||
// We don't put this in a package within proto2 because we need to make sure
|
||||
// that the generated code doesn't depend on being in the proto2 namespace.
|
||||
package protobuf_unittest;
|
||||
|
||||
option optimize_for = SPEED;
|
||||
|
||||
service TestGenericService {
|
||||
rpc Foo(FooRequest) returns (FooResponse);
|
||||
rpc Bar(BarRequest) returns (BarResponse);
|
||||
}
|
||||
|
||||
service TestGenericServiceWithCustomOptions {
|
||||
option (service_opt1) = -9876543210;
|
||||
|
||||
rpc Foo(CustomOptionFooRequest) returns (CustomOptionFooResponse) {
|
||||
option (method_opt1) = METHODOPT1_VAL2;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestRpcInterop";
|
||||
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;
|
||||
|
||||
option optimize_for = SPEED;
|
||||
|
||||
message SearchRequest {
|
||||
repeated string Criteria = 1;
|
||||
}
|
||||
|
||||
message SearchResponse {
|
||||
message ResultItem {
|
||||
required string url = 1;
|
||||
optional string name = 2;
|
||||
}
|
||||
|
||||
repeated ResultItem results = 1;
|
||||
}
|
||||
|
||||
message RefineSearchRequest {
|
||||
repeated string Criteria = 1;
|
||||
required SearchResponse previous_results = 2;
|
||||
}
|
||||
|
||||
service SearchService {
|
||||
/*
|
||||
Add this option to specify the GuidAttribute on the service interface
|
||||
option (google.protobuf.csharp_service_options).interface_id = "{A65F0925-FD11-4f94-B166-89AC4F027205}";
|
||||
*/
|
||||
rpc Search (SearchRequest) returns (SearchResponse)
|
||||
/*
|
||||
Add this option to specify the DispIdAttribute on the service interface
|
||||
{ option (google.protobuf.csharp_method_options).dispatch_id = 5; }
|
||||
*/ ;
|
||||
|
||||
rpc RefineSearch (RefineSearchRequest) returns (SearchResponse);
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestRpcInteropLite";
|
||||
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;
|
||||
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
package unittest_rpc_interop_lite;
|
||||
|
||||
message SearchRequest {
|
||||
repeated string Criteria = 1;
|
||||
}
|
||||
|
||||
message SearchResponse {
|
||||
message ResultItem {
|
||||
required string url = 1;
|
||||
optional string name = 2;
|
||||
}
|
||||
|
||||
repeated ResultItem results = 1;
|
||||
}
|
||||
|
||||
message RefineSearchRequest {
|
||||
repeated string Criteria = 1;
|
||||
required SearchResponse previous_results = 2;
|
||||
}
|
||||
|
||||
service SearchService {
|
||||
/*
|
||||
Add this option to specify the GuidAttribute on the service interface
|
||||
option (google.protobuf.csharp_service_options).interface_id = "{A65F0925-FD11-4f94-B166-89AC4F027205}";
|
||||
*/
|
||||
rpc Search (SearchRequest) returns (SearchResponse)
|
||||
/*
|
||||
Add this option to specify the DispIdAttribute on the service interface
|
||||
{ option (google.protobuf.csharp_method_options).dispatch_id = 5; }
|
||||
*/ ;
|
||||
|
||||
rpc RefineSearch (RefineSearchRequest) returns (SearchResponse);
|
||||
}
|
|
@ -1,147 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
//
|
||||
// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to
|
||||
// change.
|
||||
//
|
||||
// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is
|
||||
// just a program that reads a CodeGeneratorRequest from stdin and writes a
|
||||
// CodeGeneratorResponse to stdout.
|
||||
//
|
||||
// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
|
||||
// of dealing with the raw protocol defined here.
|
||||
//
|
||||
// A plugin executable needs only to be placed somewhere in the path. The
|
||||
// plugin should be named "protoc-gen-$NAME", and will then be used when the
|
||||
// flag "--${NAME}_out" is passed to protoc.
|
||||
|
||||
package google.protobuf.compiler;
|
||||
option java_package = "com.google.protobuf.compiler";
|
||||
option java_outer_classname = "PluginProtos";
|
||||
|
||||
import "google/protobuf/descriptor.proto";
|
||||
|
||||
// An encoded CodeGeneratorRequest is written to the plugin's stdin.
|
||||
message CodeGeneratorRequest {
|
||||
// The .proto files that were explicitly listed on the command-line. The
|
||||
// code generator should generate code only for these files. Each file's
|
||||
// descriptor will be included in proto_file, below.
|
||||
repeated string file_to_generate = 1;
|
||||
|
||||
// The generator parameter passed on the command-line.
|
||||
optional string parameter = 2;
|
||||
|
||||
// FileDescriptorProtos for all files in files_to_generate and everything
|
||||
// they import. The files will appear in topological order, so each file
|
||||
// appears before any file that imports it.
|
||||
//
|
||||
// protoc guarantees that all proto_files will be written after
|
||||
// the fields above, even though this is not technically guaranteed by the
|
||||
// protobuf wire format. This theoretically could allow a plugin to stream
|
||||
// in the FileDescriptorProtos and handle them one by one rather than read
|
||||
// the entire set into memory at once. However, as of this writing, this
|
||||
// is not similarly optimized on protoc's end -- it will store all fields in
|
||||
// memory at once before sending them to the plugin.
|
||||
repeated FileDescriptorProto proto_file = 15;
|
||||
}
|
||||
|
||||
// The plugin writes an encoded CodeGeneratorResponse to stdout.
|
||||
message CodeGeneratorResponse {
|
||||
// Error message. If non-empty, code generation failed. The plugin process
|
||||
// should exit with status code zero even if it reports an error in this way.
|
||||
//
|
||||
// This should be used to indicate errors in .proto files which prevent the
|
||||
// code generator from generating correct code. Errors which indicate a
|
||||
// problem in protoc itself -- such as the input CodeGeneratorRequest being
|
||||
// unparseable -- should be reported by writing a message to stderr and
|
||||
// exiting with a non-zero status code.
|
||||
optional string error = 1;
|
||||
|
||||
// Represents a single generated file.
|
||||
message File {
|
||||
// The file name, relative to the output directory. The name must not
|
||||
// contain "." or ".." components and must be relative, not be absolute (so,
|
||||
// the file cannot lie outside the output directory). "/" must be used as
|
||||
// the path separator, not "\".
|
||||
//
|
||||
// If the name is omitted, the content will be appended to the previous
|
||||
// file. This allows the generator to break large files into small chunks,
|
||||
// and allows the generated text to be streamed back to protoc so that large
|
||||
// files need not reside completely in memory at one time. Note that as of
|
||||
// this writing protoc does not optimize for this -- it will read the entire
|
||||
// CodeGeneratorResponse before writing files to disk.
|
||||
optional string name = 1;
|
||||
|
||||
// If non-empty, indicates that the named file should already exist, and the
|
||||
// content here is to be inserted into that file at a defined insertion
|
||||
// point. This feature allows a code generator to extend the output
|
||||
// produced by another code generator. The original generator may provide
|
||||
// insertion points by placing special annotations in the file that look
|
||||
// like:
|
||||
// @@protoc_insertion_point(NAME)
|
||||
// The annotation can have arbitrary text before and after it on the line,
|
||||
// which allows it to be placed in a comment. NAME should be replaced with
|
||||
// an identifier naming the point -- this is what other generators will use
|
||||
// as the insertion_point. Code inserted at this point will be placed
|
||||
// immediately above the line containing the insertion point (thus multiple
|
||||
// insertions to the same point will come out in the order they were added).
|
||||
// The double-@ is intended to make it unlikely that the generated code
|
||||
// could contain things that look like insertion points by accident.
|
||||
//
|
||||
// For example, the C++ code generator places the following line in the
|
||||
// .pb.h files that it generates:
|
||||
// // @@protoc_insertion_point(namespace_scope)
|
||||
// This line appears within the scope of the file's package namespace, but
|
||||
// outside of any particular class. Another plugin can then specify the
|
||||
// insertion_point "namespace_scope" to generate additional classes or
|
||||
// other declarations that should be placed in this scope.
|
||||
//
|
||||
// Note that if the line containing the insertion point begins with
|
||||
// whitespace, the same whitespace will be added to every line of the
|
||||
// inserted text. This is useful for languages like Python, where
|
||||
// indentation matters. In these languages, the insertion point comment
|
||||
// should be indented the same amount as any inserted code will need to be
|
||||
// in order to work correctly in that context.
|
||||
//
|
||||
// The code generator that generates the initial file and the one which
|
||||
// inserts into it must both run as part of a single invocation of protoc.
|
||||
// Code generators are executed in the order in which they appear on the
|
||||
// command line.
|
||||
//
|
||||
// If |insertion_point| is present, |name| must also be present.
|
||||
optional string insertion_point = 2;
|
||||
|
||||
// The file contents.
|
||||
optional string content = 15;
|
||||
}
|
||||
repeated File file = 15;
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
// Extra options for C# generator
|
||||
|
||||
import "google/protobuf/descriptor.proto";
|
||||
|
||||
package google.protobuf;
|
||||
|
||||
message CSharpFileOptions {
|
||||
|
||||
// Namespace for generated classes; defaults to the package.
|
||||
optional string namespace = 1;
|
||||
|
||||
// Name of the "umbrella" class used for metadata about all
|
||||
// the messages within this file. Default is based on the name
|
||||
// of the file.
|
||||
optional string umbrella_classname = 2;
|
||||
|
||||
// Whether classes should be public (true) or internal (false)
|
||||
optional bool public_classes = 3 [default = true];
|
||||
|
||||
// Whether to generate a single file for everything within the
|
||||
// .proto file (false), or one file per message (true).
|
||||
// This option is not currently honored; please log a feature
|
||||
// request if you really want it.
|
||||
optional bool multiple_files = 4;
|
||||
|
||||
// Whether to nest messages within a single umbrella class (true)
|
||||
// or create the umbrella class as a peer, with messages as
|
||||
// top-level classes in the namespace (false)
|
||||
optional bool nest_classes = 5;
|
||||
|
||||
// Generate appropriate support for Code Contracts
|
||||
// (Ongoing; support should improve over time)
|
||||
optional bool code_contracts = 6;
|
||||
|
||||
// Create subdirectories for namespaces, e.g. namespace "Foo.Bar"
|
||||
// would generate files within [output directory]/Foo/Bar
|
||||
optional bool expand_namespace_directories = 7;
|
||||
|
||||
// Generate attributes indicating non-CLS-compliance
|
||||
optional bool cls_compliance = 8 [default = true];
|
||||
|
||||
// Generate messages/builders with the [Serializable] attribute
|
||||
optional bool add_serializable = 9 [default = false];
|
||||
|
||||
// Generates a private ctor for Message types
|
||||
optional bool generate_private_ctor = 10 [default = true];
|
||||
|
||||
// The extension that should be appended to the umbrella_classname when creating files.
|
||||
optional string file_extension = 221 [default = ".cs"];
|
||||
|
||||
// A nested namespace for the umbrella class. Helpful for name collisions caused by
|
||||
// umbrella_classname conflicting with an existing type. This will be automatically
|
||||
// set to 'Proto' if a collision is detected with types being generated. This value
|
||||
// is ignored when nest_classes == true
|
||||
optional string umbrella_namespace = 222;
|
||||
|
||||
// The output path for the source file(s) generated
|
||||
optional string output_directory = 223 [default = "."];
|
||||
|
||||
// Will ignore the type generations and remove dependencies for the descriptor proto
|
||||
// files that declare their package to be "google.protobuf"
|
||||
optional bool ignore_google_protobuf = 224 [default = false];
|
||||
|
||||
// Controls how services are generated, GENERIC is the deprecated original implementation
|
||||
// INTERFACE generates service interfaces only, RPCINTEROP generates interfaces and
|
||||
// implementations using the included Windows RPC interop libarary.
|
||||
optional CSharpServiceType service_generator_type = 225 [default = NONE];
|
||||
|
||||
// Used to add the System.Runtime.CompilerServices.CompilerGeneratedAttribute and
|
||||
// System.CodeDom.Compiler.GeneratedCodeAttribute attributes to generated code.
|
||||
optional bool generated_code_attributes = 226 [default = false];
|
||||
}
|
||||
|
||||
enum CSharpServiceType {
|
||||
// Services are ignored by the generator
|
||||
NONE = 0;
|
||||
// Generates the original Java generic service implementations
|
||||
GENERIC = 1;
|
||||
// Generates an interface for the service and nothing else
|
||||
INTERFACE = 2;
|
||||
// Generates an interface for the service and client/server wrappers for the interface
|
||||
IRPCDISPATCH = 3;
|
||||
}
|
||||
|
||||
extend FileOptions {
|
||||
optional CSharpFileOptions csharp_file_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 is applied to all properties
|
||||
// and methods to do with this field, including HasFoo, FooCount,
|
||||
// FooList etc.
|
||||
optional string property_name = 1;
|
||||
}
|
||||
|
||||
message CSharpServiceOptions {
|
||||
optional string interface_id = 1;
|
||||
}
|
||||
|
||||
extend ServiceOptions {
|
||||
optional CSharpServiceOptions csharp_service_options = 1000;
|
||||
}
|
||||
|
||||
message CSharpMethodOptions {
|
||||
optional int32 dispatch_id = 1;
|
||||
}
|
||||
|
||||
extend MethodOptions {
|
||||
optional CSharpMethodOptions csharp_method_options = 1000;
|
||||
}
|
|
@ -1,533 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// The messages in this file describe the definitions found in .proto files.
|
||||
// A valid .proto file can be translated directly to a FileDescriptorProto
|
||||
// without any other information (e.g. without reading its imports).
|
||||
|
||||
|
||||
|
||||
package google.protobuf;
|
||||
option java_package = "com.google.protobuf";
|
||||
option java_outer_classname = "DescriptorProtos";
|
||||
|
||||
// descriptor.proto must be optimized for speed because reflection-based
|
||||
// algorithms don't work during bootstrapping.
|
||||
option optimize_for = SPEED;
|
||||
|
||||
// The protocol compiler can output a FileDescriptorSet containing the .proto
|
||||
// files it parses.
|
||||
message FileDescriptorSet {
|
||||
repeated FileDescriptorProto file = 1;
|
||||
}
|
||||
|
||||
// Describes a complete .proto file.
|
||||
message FileDescriptorProto {
|
||||
optional string name = 1; // file name, relative to root of source tree
|
||||
optional string package = 2; // e.g. "foo", "foo.bar", etc.
|
||||
|
||||
// Names of files imported by this file.
|
||||
repeated string dependency = 3;
|
||||
|
||||
// All top-level definitions in this file.
|
||||
repeated DescriptorProto message_type = 4;
|
||||
repeated EnumDescriptorProto enum_type = 5;
|
||||
repeated ServiceDescriptorProto service = 6;
|
||||
repeated FieldDescriptorProto extension = 7;
|
||||
|
||||
optional FileOptions options = 8;
|
||||
|
||||
// This field contains optional information about the original source code.
|
||||
// You may safely remove this entire field whithout harming runtime
|
||||
// functionality of the descriptors -- the information is needed only by
|
||||
// development tools.
|
||||
optional SourceCodeInfo source_code_info = 9;
|
||||
}
|
||||
|
||||
// Describes a message type.
|
||||
message DescriptorProto {
|
||||
optional string name = 1;
|
||||
|
||||
repeated FieldDescriptorProto field = 2;
|
||||
repeated FieldDescriptorProto extension = 6;
|
||||
|
||||
repeated DescriptorProto nested_type = 3;
|
||||
repeated EnumDescriptorProto enum_type = 4;
|
||||
|
||||
message ExtensionRange {
|
||||
optional int32 start = 1;
|
||||
optional int32 end = 2;
|
||||
}
|
||||
repeated ExtensionRange extension_range = 5;
|
||||
|
||||
optional MessageOptions options = 7;
|
||||
}
|
||||
|
||||
// Describes a field within a message.
|
||||
message FieldDescriptorProto {
|
||||
enum Type {
|
||||
// 0 is reserved for errors.
|
||||
// Order is weird for historical reasons.
|
||||
TYPE_DOUBLE = 1;
|
||||
TYPE_FLOAT = 2;
|
||||
TYPE_INT64 = 3; // Not ZigZag encoded. Negative numbers
|
||||
// take 10 bytes. Use TYPE_SINT64 if negative
|
||||
// values are likely.
|
||||
TYPE_UINT64 = 4;
|
||||
TYPE_INT32 = 5; // Not ZigZag encoded. Negative numbers
|
||||
// take 10 bytes. Use TYPE_SINT32 if negative
|
||||
// values are likely.
|
||||
TYPE_FIXED64 = 6;
|
||||
TYPE_FIXED32 = 7;
|
||||
TYPE_BOOL = 8;
|
||||
TYPE_STRING = 9;
|
||||
TYPE_GROUP = 10; // Tag-delimited aggregate.
|
||||
TYPE_MESSAGE = 11; // Length-delimited aggregate.
|
||||
|
||||
// New in version 2.
|
||||
TYPE_BYTES = 12;
|
||||
TYPE_UINT32 = 13;
|
||||
TYPE_ENUM = 14;
|
||||
TYPE_SFIXED32 = 15;
|
||||
TYPE_SFIXED64 = 16;
|
||||
TYPE_SINT32 = 17; // Uses ZigZag encoding.
|
||||
TYPE_SINT64 = 18; // Uses ZigZag encoding.
|
||||
};
|
||||
|
||||
enum Label {
|
||||
// 0 is reserved for errors
|
||||
LABEL_OPTIONAL = 1;
|
||||
LABEL_REQUIRED = 2;
|
||||
LABEL_REPEATED = 3;
|
||||
// TODO(sanjay): Should we add LABEL_MAP?
|
||||
};
|
||||
|
||||
optional string name = 1;
|
||||
optional int32 number = 3;
|
||||
optional Label label = 4;
|
||||
|
||||
// If type_name is set, this need not be set. If both this and type_name
|
||||
// are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
|
||||
optional Type type = 5;
|
||||
|
||||
// For message and enum types, this is the name of the type. If the name
|
||||
// starts with a '.', it is fully-qualified. Otherwise, C++-like scoping
|
||||
// rules are used to find the type (i.e. first the nested types within this
|
||||
// message are searched, then within the parent, on up to the root
|
||||
// namespace).
|
||||
optional string type_name = 6;
|
||||
|
||||
// For extensions, this is the name of the type being extended. It is
|
||||
// resolved in the same manner as type_name.
|
||||
optional string extendee = 2;
|
||||
|
||||
// For numeric types, contains the original text representation of the value.
|
||||
// For booleans, "true" or "false".
|
||||
// For strings, contains the default text contents (not escaped in any way).
|
||||
// For bytes, contains the C escaped value. All bytes >= 128 are escaped.
|
||||
// TODO(kenton): Base-64 encode?
|
||||
optional string default_value = 7;
|
||||
|
||||
optional FieldOptions options = 8;
|
||||
}
|
||||
|
||||
// Describes an enum type.
|
||||
message EnumDescriptorProto {
|
||||
optional string name = 1;
|
||||
|
||||
repeated EnumValueDescriptorProto value = 2;
|
||||
|
||||
optional EnumOptions options = 3;
|
||||
}
|
||||
|
||||
// Describes a value within an enum.
|
||||
message EnumValueDescriptorProto {
|
||||
optional string name = 1;
|
||||
optional int32 number = 2;
|
||||
|
||||
optional EnumValueOptions options = 3;
|
||||
}
|
||||
|
||||
// Describes a service.
|
||||
message ServiceDescriptorProto {
|
||||
optional string name = 1;
|
||||
repeated MethodDescriptorProto method = 2;
|
||||
|
||||
optional ServiceOptions options = 3;
|
||||
}
|
||||
|
||||
// Describes a method of a service.
|
||||
message MethodDescriptorProto {
|
||||
optional string name = 1;
|
||||
|
||||
// Input and output type names. These are resolved in the same way as
|
||||
// FieldDescriptorProto.type_name, but must refer to a message type.
|
||||
optional string input_type = 2;
|
||||
optional string output_type = 3;
|
||||
|
||||
optional MethodOptions options = 4;
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
// Options
|
||||
|
||||
// Each of the definitions above may have "options" attached. These are
|
||||
// just annotations which may cause code to be generated slightly differently
|
||||
// or may contain hints for code that manipulates protocol messages.
|
||||
//
|
||||
// Clients may define custom options as extensions of the *Options messages.
|
||||
// These extensions may not yet be known at parsing time, so the parser cannot
|
||||
// store the values in them. Instead it stores them in a field in the *Options
|
||||
// message called uninterpreted_option. This field must have the same name
|
||||
// across all *Options messages. We then use this field to populate the
|
||||
// extensions when we build a descriptor, at which point all protos have been
|
||||
// parsed and so all extensions are known.
|
||||
//
|
||||
// Extension numbers for custom options may be chosen as follows:
|
||||
// * For options which will only be used within a single application or
|
||||
// organization, or for experimental options, use field numbers 50000
|
||||
// through 99999. It is up to you to ensure that you do not use the
|
||||
// same number for multiple options.
|
||||
// * For options which will be published and used publicly by multiple
|
||||
// independent entities, e-mail kenton@google.com to reserve extension
|
||||
// numbers. Simply tell me how many you need and I'll send you back a
|
||||
// set of numbers to use -- there's no need to explain how you intend to
|
||||
// use them. If this turns out to be popular, a web service will be set up
|
||||
// to automatically assign option numbers.
|
||||
|
||||
|
||||
message FileOptions {
|
||||
|
||||
// Sets the Java package where classes generated from this .proto will be
|
||||
// placed. By default, the proto package is used, but this is often
|
||||
// inappropriate because proto packages do not normally start with backwards
|
||||
// domain names.
|
||||
optional string java_package = 1;
|
||||
|
||||
|
||||
// If set, all the classes from the .proto file are wrapped in a single
|
||||
// outer class with the given name. This applies to both Proto1
|
||||
// (equivalent to the old "--one_java_file" option) and Proto2 (where
|
||||
// a .proto always translates to a single class, but you may want to
|
||||
// explicitly choose the class name).
|
||||
optional string java_outer_classname = 8;
|
||||
|
||||
// If set true, then the Java code generator will generate a separate .java
|
||||
// file for each top-level message, enum, and service defined in the .proto
|
||||
// file. Thus, these types will *not* be nested inside the outer class
|
||||
// named by java_outer_classname. However, the outer class will still be
|
||||
// generated to contain the file's getDescriptor() method as well as any
|
||||
// top-level extensions defined in the file.
|
||||
optional bool java_multiple_files = 10 [default=false];
|
||||
|
||||
// If set true, then the Java code generator will generate equals() and
|
||||
// hashCode() methods for all messages defined in the .proto file. This is
|
||||
// purely a speed optimization, as the AbstractMessage base class includes
|
||||
// reflection-based implementations of these methods.
|
||||
optional bool java_generate_equals_and_hash = 20 [default=false];
|
||||
|
||||
// Generated classes can be optimized for speed or code size.
|
||||
enum OptimizeMode {
|
||||
SPEED = 1; // Generate complete code for parsing, serialization,
|
||||
// etc.
|
||||
CODE_SIZE = 2; // Use ReflectionOps to implement these methods.
|
||||
LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
|
||||
}
|
||||
optional OptimizeMode optimize_for = 9 [default=SPEED];
|
||||
|
||||
|
||||
|
||||
|
||||
// Should generic services be generated in each language? "Generic" services
|
||||
// are not specific to any particular RPC system. They are generated by the
|
||||
// main code generators in each language (without additional plugins).
|
||||
// Generic services were the only kind of service generation supported by
|
||||
// early versions of proto2.
|
||||
//
|
||||
// Generic services are now considered deprecated in favor of using plugins
|
||||
// that generate code specific to your particular RPC system. Therefore,
|
||||
// these default to false. Old code which depends on generic services should
|
||||
// explicitly set them to true.
|
||||
optional bool cc_generic_services = 16 [default=false];
|
||||
optional bool java_generic_services = 17 [default=false];
|
||||
optional bool py_generic_services = 18 [default=false];
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message MessageOptions {
|
||||
// Set true to use the old proto1 MessageSet wire format for extensions.
|
||||
// This is provided for backwards-compatibility with the MessageSet wire
|
||||
// format. You should not use this for any other reason: It's less
|
||||
// efficient, has fewer features, and is more complicated.
|
||||
//
|
||||
// The message must be defined exactly as follows:
|
||||
// message Foo {
|
||||
// option message_set_wire_format = true;
|
||||
// extensions 4 to max;
|
||||
// }
|
||||
// Note that the message cannot have any defined fields; MessageSets only
|
||||
// have extensions.
|
||||
//
|
||||
// All extensions of your type must be singular messages; e.g. they cannot
|
||||
// be int32s, enums, or repeated messages.
|
||||
//
|
||||
// Because this is an option, the above two restrictions are not enforced by
|
||||
// the protocol compiler.
|
||||
optional bool message_set_wire_format = 1 [default=false];
|
||||
|
||||
// Disables the generation of the standard "descriptor()" accessor, which can
|
||||
// conflict with a field of the same name. This is meant to make migration
|
||||
// from proto1 easier; new code should avoid fields named "descriptor".
|
||||
optional bool no_standard_descriptor_accessor = 2 [default=false];
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message FieldOptions {
|
||||
// The ctype option instructs the C++ code generator to use a different
|
||||
// representation of the field than it normally would. See the specific
|
||||
// options below. This option is not yet implemented in the open source
|
||||
// release -- sorry, we'll try to include it in a future version!
|
||||
optional CType ctype = 1 [default = STRING];
|
||||
enum CType {
|
||||
// Default mode.
|
||||
STRING = 0;
|
||||
|
||||
CORD = 1;
|
||||
|
||||
STRING_PIECE = 2;
|
||||
}
|
||||
// The packed option can be enabled for repeated primitive fields to enable
|
||||
// a more efficient representation on the wire. Rather than repeatedly
|
||||
// writing the tag and type for each element, the entire array is encoded as
|
||||
// a single length-delimited blob.
|
||||
optional bool packed = 2;
|
||||
|
||||
|
||||
// Is this field deprecated?
|
||||
// Depending on the target platform, this can emit Deprecated annotations
|
||||
// for accessors, or it will be completely ignored; in the very least, this
|
||||
// is a formalization for deprecating fields.
|
||||
optional bool deprecated = 3 [default=false];
|
||||
|
||||
// EXPERIMENTAL. DO NOT USE.
|
||||
// For "map" fields, the name of the field in the enclosed type that
|
||||
// is the key for this map. For example, suppose we have:
|
||||
// message Item {
|
||||
// required string name = 1;
|
||||
// required string value = 2;
|
||||
// }
|
||||
// message Config {
|
||||
// repeated Item items = 1 [experimental_map_key="name"];
|
||||
// }
|
||||
// In this situation, the map key for Item will be set to "name".
|
||||
// TODO: Fully-implement this, then remove the "experimental_" prefix.
|
||||
optional string experimental_map_key = 9;
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message EnumOptions {
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message EnumValueOptions {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message ServiceOptions {
|
||||
|
||||
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC
|
||||
// framework. We apologize for hoarding these numbers to ourselves, but
|
||||
// we were already using them long before we decided to release Protocol
|
||||
// Buffers.
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
message MethodOptions {
|
||||
|
||||
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC
|
||||
// framework. We apologize for hoarding these numbers to ourselves, but
|
||||
// we were already using them long before we decided to release Protocol
|
||||
// Buffers.
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
repeated UninterpretedOption uninterpreted_option = 999;
|
||||
|
||||
// Clients can define custom options in extensions of this message. See above.
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
// A message representing a option the parser does not recognize. This only
|
||||
// appears in options protos created by the compiler::Parser class.
|
||||
// DescriptorPool resolves these when building Descriptor objects. Therefore,
|
||||
// options protos in descriptor objects (e.g. returned by Descriptor::options(),
|
||||
// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
|
||||
// in them.
|
||||
message UninterpretedOption {
|
||||
// The name of the uninterpreted option. Each string represents a segment in
|
||||
// a dot-separated name. is_extension is true iff a segment represents an
|
||||
// extension (denoted with parentheses in options specs in .proto files).
|
||||
// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
|
||||
// "foo.(bar.baz).qux".
|
||||
message NamePart {
|
||||
required string name_part = 1;
|
||||
required bool is_extension = 2;
|
||||
}
|
||||
repeated NamePart name = 2;
|
||||
|
||||
// The value of the uninterpreted option, in whatever type the tokenizer
|
||||
// identified it as during parsing. Exactly one of these should be set.
|
||||
optional string identifier_value = 3;
|
||||
optional uint64 positive_int_value = 4;
|
||||
optional int64 negative_int_value = 5;
|
||||
optional double double_value = 6;
|
||||
optional bytes string_value = 7;
|
||||
optional string aggregate_value = 8;
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
// Optional source code info
|
||||
|
||||
// Encapsulates information about the original source file from which a
|
||||
// FileDescriptorProto was generated.
|
||||
message SourceCodeInfo {
|
||||
// A Location identifies a piece of source code in a .proto file which
|
||||
// corresponds to a particular definition. This information is intended
|
||||
// to be useful to IDEs, code indexers, documentation generators, and similar
|
||||
// tools.
|
||||
//
|
||||
// For example, say we have a file like:
|
||||
// message Foo {
|
||||
// optional string foo = 1;
|
||||
// }
|
||||
// Let's look at just the field definition:
|
||||
// optional string foo = 1;
|
||||
// ^ ^^ ^^ ^ ^^^
|
||||
// a bc de f ghi
|
||||
// We have the following locations:
|
||||
// span path represents
|
||||
// [a,i) [ 4, 0, 2, 0 ] The whole field definition.
|
||||
// [a,b) [ 4, 0, 2, 0, 4 ] The label (optional).
|
||||
// [c,d) [ 4, 0, 2, 0, 5 ] The type (string).
|
||||
// [e,f) [ 4, 0, 2, 0, 1 ] The name (foo).
|
||||
// [g,h) [ 4, 0, 2, 0, 3 ] The number (1).
|
||||
//
|
||||
// Notes:
|
||||
// - A location may refer to a repeated field itself (i.e. not to any
|
||||
// particular index within it). This is used whenever a set of elements are
|
||||
// logically enclosed in a single code segment. For example, an entire
|
||||
// extend block (possibly containing multiple extension definitions) will
|
||||
// have an outer location whose path refers to the "extensions" repeated
|
||||
// field without an index.
|
||||
// - Multiple locations may have the same path. This happens when a single
|
||||
// logical declaration is spread out across multiple places. The most
|
||||
// obvious example is the "extend" block again -- there may be multiple
|
||||
// extend blocks in the same scope, each of which will have the same path.
|
||||
// - A location's span is not always a subset of its parent's span. For
|
||||
// example, the "extendee" of an extension declaration appears at the
|
||||
// beginning of the "extend" block and is shared by all extensions within
|
||||
// the block.
|
||||
// - Just because a location's span is a subset of some other location's span
|
||||
// does not mean that it is a descendent. For example, a "group" defines
|
||||
// both a type and a field in a single declaration. Thus, the locations
|
||||
// corresponding to the type and field and their components will overlap.
|
||||
// - Code which tries to interpret locations should probably be designed to
|
||||
// ignore those that it doesn't understand, as more types of locations could
|
||||
// be recorded in the future.
|
||||
repeated Location location = 1;
|
||||
message Location {
|
||||
// Identifies which part of the FileDescriptorProto was defined at this
|
||||
// location.
|
||||
//
|
||||
// Each element is a field number or an index. They form a path from
|
||||
// the root FileDescriptorProto to the place where the definition. For
|
||||
// example, this path:
|
||||
// [ 4, 3, 2, 7, 1 ]
|
||||
// refers to:
|
||||
// file.message_type(3) // 4, 3
|
||||
// .field(7) // 2, 7
|
||||
// .name() // 1
|
||||
// This is because FileDescriptorProto.message_type has field number 4:
|
||||
// repeated DescriptorProto message_type = 4;
|
||||
// and DescriptorProto.field has field number 2:
|
||||
// repeated FieldDescriptorProto field = 2;
|
||||
// and FieldDescriptorProto.name has field number 1:
|
||||
// optional string name = 1;
|
||||
//
|
||||
// Thus, the above path gives the location of a field name. If we removed
|
||||
// the last element:
|
||||
// [ 4, 3, 2, 7 ]
|
||||
// this path refers to the whole field declaration (from the beginning
|
||||
// of the label to the terminating semicolon).
|
||||
repeated int32 path = 1 [packed=true];
|
||||
|
||||
// Always has exactly three or four elements: start line, start column,
|
||||
// end line (optional, otherwise assumed same as start line), end column.
|
||||
// These are packed into a single field for efficiency. Note that line
|
||||
// and column numbers are zero-based -- typically you will want to add
|
||||
// 1 to each before displaying to a user.
|
||||
repeated int32 span = 2 [packed=true];
|
||||
|
||||
// TODO(kenton): Record comments appearing before and after the
|
||||
// declaration.
|
||||
}
|
||||
}
|
|
@ -1,636 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// A proto file we will use for unit testing.
|
||||
|
||||
|
||||
// Some generic_services option(s) added automatically.
|
||||
// See: http://go/proto2-generic-services-default
|
||||
option cc_generic_services = true; // auto-added
|
||||
option java_generic_services = true; // auto-added
|
||||
option py_generic_services = true; // auto-added
|
||||
|
||||
import "google/protobuf/unittest_import.proto";
|
||||
|
||||
// We don't put this in a package within proto2 because we need to make sure
|
||||
// that the generated code doesn't depend on being in the proto2 namespace.
|
||||
// In test_util.h we do "using namespace unittest = protobuf_unittest".
|
||||
package protobuf_unittest;
|
||||
|
||||
// Protos optimized for SPEED use a strict superset of the generated code
|
||||
// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
|
||||
// tests for speed unless explicitly testing code size optimization.
|
||||
option optimize_for = SPEED;
|
||||
|
||||
option java_outer_classname = "UnittestProto";
|
||||
|
||||
// This proto includes every type of field in both singular and repeated
|
||||
// forms.
|
||||
message TestAllTypes {
|
||||
message NestedMessage {
|
||||
// The field name "b" fails to compile in proto1 because it conflicts with
|
||||
// a local variable named "b" in one of the generated methods. Doh.
|
||||
// This file needs to compile in proto1 to test backwards-compatibility.
|
||||
optional int32 bb = 1;
|
||||
}
|
||||
|
||||
enum NestedEnum {
|
||||
FOO = 1;
|
||||
BAR = 2;
|
||||
BAZ = 3;
|
||||
}
|
||||
|
||||
// Singular
|
||||
optional int32 optional_int32 = 1;
|
||||
optional int64 optional_int64 = 2;
|
||||
optional uint32 optional_uint32 = 3;
|
||||
optional uint64 optional_uint64 = 4;
|
||||
optional sint32 optional_sint32 = 5;
|
||||
optional sint64 optional_sint64 = 6;
|
||||
optional fixed32 optional_fixed32 = 7;
|
||||
optional fixed64 optional_fixed64 = 8;
|
||||
optional sfixed32 optional_sfixed32 = 9;
|
||||
optional sfixed64 optional_sfixed64 = 10;
|
||||
optional float optional_float = 11;
|
||||
optional double optional_double = 12;
|
||||
optional bool optional_bool = 13;
|
||||
optional string optional_string = 14;
|
||||
optional bytes optional_bytes = 15;
|
||||
|
||||
optional group OptionalGroup = 16 {
|
||||
optional int32 a = 17;
|
||||
}
|
||||
|
||||
optional NestedMessage optional_nested_message = 18;
|
||||
optional ForeignMessage optional_foreign_message = 19;
|
||||
optional protobuf_unittest_import.ImportMessage optional_import_message = 20;
|
||||
|
||||
optional NestedEnum optional_nested_enum = 21;
|
||||
optional ForeignEnum optional_foreign_enum = 22;
|
||||
optional protobuf_unittest_import.ImportEnum optional_import_enum = 23;
|
||||
|
||||
optional string optional_string_piece = 24 [ctype=STRING_PIECE];
|
||||
optional string optional_cord = 25 [ctype=CORD];
|
||||
|
||||
// Repeated
|
||||
repeated int32 repeated_int32 = 31;
|
||||
repeated int64 repeated_int64 = 32;
|
||||
repeated uint32 repeated_uint32 = 33;
|
||||
repeated uint64 repeated_uint64 = 34;
|
||||
repeated sint32 repeated_sint32 = 35;
|
||||
repeated sint64 repeated_sint64 = 36;
|
||||
repeated fixed32 repeated_fixed32 = 37;
|
||||
repeated fixed64 repeated_fixed64 = 38;
|
||||
repeated sfixed32 repeated_sfixed32 = 39;
|
||||
repeated sfixed64 repeated_sfixed64 = 40;
|
||||
repeated float repeated_float = 41;
|
||||
repeated double repeated_double = 42;
|
||||
repeated bool repeated_bool = 43;
|
||||
repeated string repeated_string = 44;
|
||||
repeated bytes repeated_bytes = 45;
|
||||
|
||||
repeated group RepeatedGroup = 46 {
|
||||
optional int32 a = 47;
|
||||
}
|
||||
|
||||
repeated NestedMessage repeated_nested_message = 48;
|
||||
repeated ForeignMessage repeated_foreign_message = 49;
|
||||
repeated protobuf_unittest_import.ImportMessage repeated_import_message = 50;
|
||||
|
||||
repeated NestedEnum repeated_nested_enum = 51;
|
||||
repeated ForeignEnum repeated_foreign_enum = 52;
|
||||
repeated protobuf_unittest_import.ImportEnum repeated_import_enum = 53;
|
||||
|
||||
repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
|
||||
repeated string repeated_cord = 55 [ctype=CORD];
|
||||
|
||||
// Singular with defaults
|
||||
optional int32 default_int32 = 61 [default = 41 ];
|
||||
optional int64 default_int64 = 62 [default = 42 ];
|
||||
optional uint32 default_uint32 = 63 [default = 43 ];
|
||||
optional uint64 default_uint64 = 64 [default = 44 ];
|
||||
optional sint32 default_sint32 = 65 [default = -45 ];
|
||||
optional sint64 default_sint64 = 66 [default = 46 ];
|
||||
optional fixed32 default_fixed32 = 67 [default = 47 ];
|
||||
optional fixed64 default_fixed64 = 68 [default = 48 ];
|
||||
optional sfixed32 default_sfixed32 = 69 [default = 49 ];
|
||||
optional sfixed64 default_sfixed64 = 70 [default = -50 ];
|
||||
optional float default_float = 71 [default = 51.5 ];
|
||||
optional double default_double = 72 [default = 52e3 ];
|
||||
optional bool default_bool = 73 [default = true ];
|
||||
optional string default_string = 74 [default = "hello"];
|
||||
optional bytes default_bytes = 75 [default = "world"];
|
||||
|
||||
optional NestedEnum default_nested_enum = 81 [default = BAR ];
|
||||
optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
|
||||
optional protobuf_unittest_import.ImportEnum
|
||||
default_import_enum = 83 [default = IMPORT_BAR];
|
||||
|
||||
optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
|
||||
optional string default_cord = 85 [ctype=CORD,default="123"];
|
||||
}
|
||||
|
||||
message TestDeprecatedFields {
|
||||
optional int32 deprecated_int32 = 1 [deprecated=true];
|
||||
}
|
||||
|
||||
// Define these after TestAllTypes to make sure the compiler can handle
|
||||
// that.
|
||||
message ForeignMessage {
|
||||
optional int32 c = 1;
|
||||
}
|
||||
|
||||
enum ForeignEnum {
|
||||
FOREIGN_FOO = 4;
|
||||
FOREIGN_BAR = 5;
|
||||
FOREIGN_BAZ = 6;
|
||||
}
|
||||
|
||||
message TestAllExtensions {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
extend TestAllExtensions {
|
||||
// Singular
|
||||
optional int32 optional_int32_extension = 1;
|
||||
optional int64 optional_int64_extension = 2;
|
||||
optional uint32 optional_uint32_extension = 3;
|
||||
optional uint64 optional_uint64_extension = 4;
|
||||
optional sint32 optional_sint32_extension = 5;
|
||||
optional sint64 optional_sint64_extension = 6;
|
||||
optional fixed32 optional_fixed32_extension = 7;
|
||||
optional fixed64 optional_fixed64_extension = 8;
|
||||
optional sfixed32 optional_sfixed32_extension = 9;
|
||||
optional sfixed64 optional_sfixed64_extension = 10;
|
||||
optional float optional_float_extension = 11;
|
||||
optional double optional_double_extension = 12;
|
||||
optional bool optional_bool_extension = 13;
|
||||
optional string optional_string_extension = 14;
|
||||
optional bytes optional_bytes_extension = 15;
|
||||
|
||||
optional group OptionalGroup_extension = 16 {
|
||||
optional int32 a = 17;
|
||||
}
|
||||
|
||||
optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
|
||||
optional ForeignMessage optional_foreign_message_extension = 19;
|
||||
optional protobuf_unittest_import.ImportMessage
|
||||
optional_import_message_extension = 20;
|
||||
|
||||
optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
|
||||
optional ForeignEnum optional_foreign_enum_extension = 22;
|
||||
optional protobuf_unittest_import.ImportEnum
|
||||
optional_import_enum_extension = 23;
|
||||
|
||||
optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
|
||||
optional string optional_cord_extension = 25 [ctype=CORD];
|
||||
|
||||
// Repeated
|
||||
repeated int32 repeated_int32_extension = 31;
|
||||
repeated int64 repeated_int64_extension = 32;
|
||||
repeated uint32 repeated_uint32_extension = 33;
|
||||
repeated uint64 repeated_uint64_extension = 34;
|
||||
repeated sint32 repeated_sint32_extension = 35;
|
||||
repeated sint64 repeated_sint64_extension = 36;
|
||||
repeated fixed32 repeated_fixed32_extension = 37;
|
||||
repeated fixed64 repeated_fixed64_extension = 38;
|
||||
repeated sfixed32 repeated_sfixed32_extension = 39;
|
||||
repeated sfixed64 repeated_sfixed64_extension = 40;
|
||||
repeated float repeated_float_extension = 41;
|
||||
repeated double repeated_double_extension = 42;
|
||||
repeated bool repeated_bool_extension = 43;
|
||||
repeated string repeated_string_extension = 44;
|
||||
repeated bytes repeated_bytes_extension = 45;
|
||||
|
||||
repeated group RepeatedGroup_extension = 46 {
|
||||
optional int32 a = 47;
|
||||
}
|
||||
|
||||
repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
|
||||
repeated ForeignMessage repeated_foreign_message_extension = 49;
|
||||
repeated protobuf_unittest_import.ImportMessage
|
||||
repeated_import_message_extension = 50;
|
||||
|
||||
repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
|
||||
repeated ForeignEnum repeated_foreign_enum_extension = 52;
|
||||
repeated protobuf_unittest_import.ImportEnum
|
||||
repeated_import_enum_extension = 53;
|
||||
|
||||
repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
|
||||
repeated string repeated_cord_extension = 55 [ctype=CORD];
|
||||
|
||||
// Singular with defaults
|
||||
optional int32 default_int32_extension = 61 [default = 41 ];
|
||||
optional int64 default_int64_extension = 62 [default = 42 ];
|
||||
optional uint32 default_uint32_extension = 63 [default = 43 ];
|
||||
optional uint64 default_uint64_extension = 64 [default = 44 ];
|
||||
optional sint32 default_sint32_extension = 65 [default = -45 ];
|
||||
optional sint64 default_sint64_extension = 66 [default = 46 ];
|
||||
optional fixed32 default_fixed32_extension = 67 [default = 47 ];
|
||||
optional fixed64 default_fixed64_extension = 68 [default = 48 ];
|
||||
optional sfixed32 default_sfixed32_extension = 69 [default = 49 ];
|
||||
optional sfixed64 default_sfixed64_extension = 70 [default = -50 ];
|
||||
optional float default_float_extension = 71 [default = 51.5 ];
|
||||
optional double default_double_extension = 72 [default = 52e3 ];
|
||||
optional bool default_bool_extension = 73 [default = true ];
|
||||
optional string default_string_extension = 74 [default = "hello"];
|
||||
optional bytes default_bytes_extension = 75 [default = "world"];
|
||||
|
||||
optional TestAllTypes.NestedEnum
|
||||
default_nested_enum_extension = 81 [default = BAR];
|
||||
optional ForeignEnum
|
||||
default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
|
||||
optional protobuf_unittest_import.ImportEnum
|
||||
default_import_enum_extension = 83 [default = IMPORT_BAR];
|
||||
|
||||
optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
|
||||
default="abc"];
|
||||
optional string default_cord_extension = 85 [ctype=CORD, default="123"];
|
||||
}
|
||||
|
||||
message TestNestedExtension {
|
||||
extend TestAllExtensions {
|
||||
// Check for bug where string extensions declared in tested scope did not
|
||||
// compile.
|
||||
optional string test = 1002 [default="test"];
|
||||
}
|
||||
}
|
||||
|
||||
// We have separate messages for testing required fields because it's
|
||||
// annoying to have to fill in required fields in TestProto in order to
|
||||
// do anything with it. Note that we don't need to test every type of
|
||||
// required filed because the code output is basically identical to
|
||||
// optional fields for all types.
|
||||
message TestRequired {
|
||||
required int32 a = 1;
|
||||
optional int32 dummy2 = 2;
|
||||
required int32 b = 3;
|
||||
|
||||
extend TestAllExtensions {
|
||||
optional TestRequired single = 1000;
|
||||
repeated TestRequired multi = 1001;
|
||||
}
|
||||
|
||||
// Pad the field count to 32 so that we can test that IsInitialized()
|
||||
// properly checks multiple elements of has_bits_.
|
||||
optional int32 dummy4 = 4;
|
||||
optional int32 dummy5 = 5;
|
||||
optional int32 dummy6 = 6;
|
||||
optional int32 dummy7 = 7;
|
||||
optional int32 dummy8 = 8;
|
||||
optional int32 dummy9 = 9;
|
||||
optional int32 dummy10 = 10;
|
||||
optional int32 dummy11 = 11;
|
||||
optional int32 dummy12 = 12;
|
||||
optional int32 dummy13 = 13;
|
||||
optional int32 dummy14 = 14;
|
||||
optional int32 dummy15 = 15;
|
||||
optional int32 dummy16 = 16;
|
||||
optional int32 dummy17 = 17;
|
||||
optional int32 dummy18 = 18;
|
||||
optional int32 dummy19 = 19;
|
||||
optional int32 dummy20 = 20;
|
||||
optional int32 dummy21 = 21;
|
||||
optional int32 dummy22 = 22;
|
||||
optional int32 dummy23 = 23;
|
||||
optional int32 dummy24 = 24;
|
||||
optional int32 dummy25 = 25;
|
||||
optional int32 dummy26 = 26;
|
||||
optional int32 dummy27 = 27;
|
||||
optional int32 dummy28 = 28;
|
||||
optional int32 dummy29 = 29;
|
||||
optional int32 dummy30 = 30;
|
||||
optional int32 dummy31 = 31;
|
||||
optional int32 dummy32 = 32;
|
||||
|
||||
required int32 c = 33;
|
||||
}
|
||||
|
||||
message TestRequiredForeign {
|
||||
optional TestRequired optional_message = 1;
|
||||
repeated TestRequired repeated_message = 2;
|
||||
optional int32 dummy = 3;
|
||||
}
|
||||
|
||||
// Test that we can use NestedMessage from outside TestAllTypes.
|
||||
message TestForeignNested {
|
||||
optional TestAllTypes.NestedMessage foreign_nested = 1;
|
||||
}
|
||||
|
||||
// TestEmptyMessage is used to test unknown field support.
|
||||
message TestEmptyMessage {
|
||||
}
|
||||
|
||||
// Like above, but declare all field numbers as potential extensions. No
|
||||
// actual extensions should ever be defined for this type.
|
||||
message TestEmptyMessageWithExtensions {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
message TestMultipleExtensionRanges {
|
||||
extensions 42;
|
||||
extensions 4143 to 4243;
|
||||
extensions 65536 to max;
|
||||
}
|
||||
|
||||
// Test that really large tag numbers don't break anything.
|
||||
message TestReallyLargeTagNumber {
|
||||
// The largest possible tag number is 2^28 - 1, since the wire format uses
|
||||
// three bits to communicate wire type.
|
||||
optional int32 a = 1;
|
||||
optional int32 bb = 268435455;
|
||||
}
|
||||
|
||||
message TestRecursiveMessage {
|
||||
optional TestRecursiveMessage a = 1;
|
||||
optional int32 i = 2;
|
||||
}
|
||||
|
||||
// Test that mutual recursion works.
|
||||
message TestMutualRecursionA {
|
||||
optional TestMutualRecursionB bb = 1;
|
||||
}
|
||||
|
||||
message TestMutualRecursionB {
|
||||
optional TestMutualRecursionA a = 1;
|
||||
optional int32 optional_int32 = 2;
|
||||
}
|
||||
|
||||
// Test that groups have disjoint field numbers from their siblings and
|
||||
// parents. This is NOT possible in proto1; only proto2. When attempting
|
||||
// to compile with proto1, this will emit an error; so we only include it
|
||||
// in protobuf_unittest_proto.
|
||||
message TestDupFieldNumber { // NO_PROTO1
|
||||
optional int32 a = 1; // NO_PROTO1
|
||||
optional group Foo = 2 { optional int32 a = 1; } // NO_PROTO1
|
||||
optional group Bar = 3 { optional int32 a = 1; } // NO_PROTO1
|
||||
} // NO_PROTO1
|
||||
|
||||
|
||||
// Needed for a Python test.
|
||||
message TestNestedMessageHasBits {
|
||||
message NestedMessage {
|
||||
repeated int32 nestedmessage_repeated_int32 = 1;
|
||||
repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
|
||||
}
|
||||
optional NestedMessage optional_nested_message = 1;
|
||||
}
|
||||
|
||||
|
||||
// Test an enum that has multiple values with the same number.
|
||||
enum TestEnumWithDupValue {
|
||||
FOO1 = 1;
|
||||
BAR1 = 2;
|
||||
BAZ = 3;
|
||||
FOO2 = 1;
|
||||
BAR2 = 2;
|
||||
}
|
||||
|
||||
// Test an enum with large, unordered values.
|
||||
enum TestSparseEnum {
|
||||
SPARSE_A = 123;
|
||||
SPARSE_B = 62374;
|
||||
SPARSE_C = 12589234;
|
||||
SPARSE_D = -15;
|
||||
SPARSE_E = -53452;
|
||||
SPARSE_F = 0;
|
||||
SPARSE_G = 2;
|
||||
}
|
||||
|
||||
// Test message with CamelCase field names. This violates Protocol Buffer
|
||||
// standard style.
|
||||
message TestCamelCaseFieldNames {
|
||||
optional int32 PrimitiveField = 1;
|
||||
optional string StringField = 2;
|
||||
optional ForeignEnum EnumField = 3;
|
||||
optional ForeignMessage MessageField = 4;
|
||||
optional string StringPieceField = 5 [ctype=STRING_PIECE];
|
||||
optional string CordField = 6 [ctype=CORD];
|
||||
|
||||
repeated int32 RepeatedPrimitiveField = 7;
|
||||
repeated string RepeatedStringField = 8;
|
||||
repeated ForeignEnum RepeatedEnumField = 9;
|
||||
repeated ForeignMessage RepeatedMessageField = 10;
|
||||
repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
|
||||
repeated string RepeatedCordField = 12 [ctype=CORD];
|
||||
}
|
||||
|
||||
|
||||
// We list fields out of order, to ensure that we're using field number and not
|
||||
// field index to determine serialization order.
|
||||
message TestFieldOrderings {
|
||||
optional string my_string = 11;
|
||||
extensions 2 to 10;
|
||||
optional int64 my_int = 1;
|
||||
extensions 12 to 100;
|
||||
optional float my_float = 101;
|
||||
}
|
||||
|
||||
|
||||
extend TestFieldOrderings {
|
||||
optional string my_extension_string = 50;
|
||||
optional int32 my_extension_int = 5;
|
||||
}
|
||||
|
||||
|
||||
message TestExtremeDefaultValues {
|
||||
optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
|
||||
optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
|
||||
optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
|
||||
optional int32 small_int32 = 4 [default = -0x7FFFFFFF];
|
||||
optional int64 small_int64 = 5 [default = -0x7FFFFFFFFFFFFFFF];
|
||||
|
||||
// The default value here is UTF-8 for "\u1234". (We could also just type
|
||||
// the UTF-8 text directly into this text file rather than escape it, but
|
||||
// lots of people use editors that would be confused by this.)
|
||||
optional string utf8_string = 6 [default = "\341\210\264"];
|
||||
|
||||
// Tests for single-precision floating-point values.
|
||||
optional float zero_float = 7 [default = 0];
|
||||
optional float one_float = 8 [default = 1];
|
||||
optional float small_float = 9 [default = 1.5];
|
||||
optional float negative_one_float = 10 [default = -1];
|
||||
optional float negative_float = 11 [default = -1.5];
|
||||
// Using exponents
|
||||
optional float large_float = 12 [default = 2E8];
|
||||
optional float small_negative_float = 13 [default = -8e-28];
|
||||
|
||||
// Text for nonfinite floating-point values.
|
||||
optional double inf_double = 14 [default = inf];
|
||||
optional double neg_inf_double = 15 [default = -inf];
|
||||
optional double nan_double = 16 [default = nan];
|
||||
optional float inf_float = 17 [default = inf];
|
||||
optional float neg_inf_float = 18 [default = -inf];
|
||||
optional float nan_float = 19 [default = nan];
|
||||
|
||||
// Tests for C++ trigraphs.
|
||||
// Trigraphs should be escaped in C++ generated files, but they should not be
|
||||
// escaped for other languages.
|
||||
// Note that in .proto file, "\?" is a valid way to escape ? in string
|
||||
// literals.
|
||||
optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];
|
||||
}
|
||||
|
||||
message SparseEnumMessage {
|
||||
optional TestSparseEnum sparse_enum = 1;
|
||||
}
|
||||
|
||||
// Test String and Bytes: string is for valid UTF-8 strings
|
||||
message OneString {
|
||||
optional string data = 1;
|
||||
}
|
||||
|
||||
message OneBytes {
|
||||
optional bytes data = 1;
|
||||
}
|
||||
|
||||
// Test messages for packed fields
|
||||
|
||||
message TestPackedTypes {
|
||||
repeated int32 packed_int32 = 90 [packed = true];
|
||||
repeated int64 packed_int64 = 91 [packed = true];
|
||||
repeated uint32 packed_uint32 = 92 [packed = true];
|
||||
repeated uint64 packed_uint64 = 93 [packed = true];
|
||||
repeated sint32 packed_sint32 = 94 [packed = true];
|
||||
repeated sint64 packed_sint64 = 95 [packed = true];
|
||||
repeated fixed32 packed_fixed32 = 96 [packed = true];
|
||||
repeated fixed64 packed_fixed64 = 97 [packed = true];
|
||||
repeated sfixed32 packed_sfixed32 = 98 [packed = true];
|
||||
repeated sfixed64 packed_sfixed64 = 99 [packed = true];
|
||||
repeated float packed_float = 100 [packed = true];
|
||||
repeated double packed_double = 101 [packed = true];
|
||||
repeated bool packed_bool = 102 [packed = true];
|
||||
repeated ForeignEnum packed_enum = 103 [packed = true];
|
||||
}
|
||||
|
||||
// A message with the same fields as TestPackedTypes, but without packing. Used
|
||||
// to test packed <-> unpacked wire compatibility.
|
||||
message TestUnpackedTypes {
|
||||
repeated int32 unpacked_int32 = 90 [packed = false];
|
||||
repeated int64 unpacked_int64 = 91 [packed = false];
|
||||
repeated uint32 unpacked_uint32 = 92 [packed = false];
|
||||
repeated uint64 unpacked_uint64 = 93 [packed = false];
|
||||
repeated sint32 unpacked_sint32 = 94 [packed = false];
|
||||
repeated sint64 unpacked_sint64 = 95 [packed = false];
|
||||
repeated fixed32 unpacked_fixed32 = 96 [packed = false];
|
||||
repeated fixed64 unpacked_fixed64 = 97 [packed = false];
|
||||
repeated sfixed32 unpacked_sfixed32 = 98 [packed = false];
|
||||
repeated sfixed64 unpacked_sfixed64 = 99 [packed = false];
|
||||
repeated float unpacked_float = 100 [packed = false];
|
||||
repeated double unpacked_double = 101 [packed = false];
|
||||
repeated bool unpacked_bool = 102 [packed = false];
|
||||
repeated ForeignEnum unpacked_enum = 103 [packed = false];
|
||||
}
|
||||
|
||||
message TestPackedExtensions {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
extend TestPackedExtensions {
|
||||
repeated int32 packed_int32_extension = 90 [packed = true];
|
||||
repeated int64 packed_int64_extension = 91 [packed = true];
|
||||
repeated uint32 packed_uint32_extension = 92 [packed = true];
|
||||
repeated uint64 packed_uint64_extension = 93 [packed = true];
|
||||
repeated sint32 packed_sint32_extension = 94 [packed = true];
|
||||
repeated sint64 packed_sint64_extension = 95 [packed = true];
|
||||
repeated fixed32 packed_fixed32_extension = 96 [packed = true];
|
||||
repeated fixed64 packed_fixed64_extension = 97 [packed = true];
|
||||
repeated sfixed32 packed_sfixed32_extension = 98 [packed = true];
|
||||
repeated sfixed64 packed_sfixed64_extension = 99 [packed = true];
|
||||
repeated float packed_float_extension = 100 [packed = true];
|
||||
repeated double packed_double_extension = 101 [packed = true];
|
||||
repeated bool packed_bool_extension = 102 [packed = true];
|
||||
repeated ForeignEnum packed_enum_extension = 103 [packed = true];
|
||||
}
|
||||
|
||||
// Used by ExtensionSetTest/DynamicExtensions. The test actually builds
|
||||
// a set of extensions to TestAllExtensions dynamically, based on the fields
|
||||
// of this message type.
|
||||
message TestDynamicExtensions {
|
||||
enum DynamicEnumType {
|
||||
DYNAMIC_FOO = 2200;
|
||||
DYNAMIC_BAR = 2201;
|
||||
DYNAMIC_BAZ = 2202;
|
||||
}
|
||||
message DynamicMessageType {
|
||||
optional int32 dynamic_field = 2100;
|
||||
}
|
||||
|
||||
optional fixed32 scalar_extension = 2000;
|
||||
optional ForeignEnum enum_extension = 2001;
|
||||
optional DynamicEnumType dynamic_enum_extension = 2002;
|
||||
|
||||
optional ForeignMessage message_extension = 2003;
|
||||
optional DynamicMessageType dynamic_message_extension = 2004;
|
||||
|
||||
repeated string repeated_extension = 2005;
|
||||
repeated sint32 packed_extension = 2006 [packed = true];
|
||||
}
|
||||
|
||||
message TestRepeatedScalarDifferentTagSizes {
|
||||
// Parsing repeated fixed size values used to fail. This message needs to be
|
||||
// used in order to get a tag of the right size; all of the repeated fields
|
||||
// in TestAllTypes didn't trigger the check.
|
||||
repeated fixed32 repeated_fixed32 = 12;
|
||||
// Check for a varint type, just for good measure.
|
||||
repeated int32 repeated_int32 = 13;
|
||||
|
||||
// These have two-byte tags.
|
||||
repeated fixed64 repeated_fixed64 = 2046;
|
||||
repeated int64 repeated_int64 = 2047;
|
||||
|
||||
// Three byte tags.
|
||||
repeated float repeated_float = 262142;
|
||||
repeated uint64 repeated_uint64 = 262143;
|
||||
}
|
||||
|
||||
|
||||
// Test that RPC services work.
|
||||
message FooRequest {}
|
||||
message FooResponse {}
|
||||
|
||||
service TestService {
|
||||
rpc Foo(FooRequest) returns (FooResponse);
|
||||
rpc Bar(BarRequest) returns (BarResponse);
|
||||
}
|
||||
|
||||
|
||||
message BarRequest {}
|
||||
message BarResponse {}
|
|
@ -1,52 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: jonskeet@google.com (Jon Skeet)
|
||||
//
|
||||
// A proto file for unit testing the custom C# options
|
||||
|
||||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestCSharpOptionsProtoFile";
|
||||
//option (google.protobuf.csharp_file_options).nest_classes = true;
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
message OptionsMessage {
|
||||
|
||||
// Will be left as Normal
|
||||
optional string normal = 1;
|
||||
|
||||
// Will be converted to OptionsMessage_
|
||||
optional string options_message = 2;
|
||||
|
||||
// Will be converted to CustomName
|
||||
optional string customized = 3 [(google.protobuf.csharp_field_options).property_name = "CustomName"];
|
||||
}
|
|
@ -1,372 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: benjy@google.com (Benjy Weinberger)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// A proto file used to test the "custom options" feature of proto2.
|
||||
|
||||
|
||||
// Some generic_services option(s) added automatically.
|
||||
// See: http://go/proto2-generic-services-default
|
||||
option cc_generic_services = true; // auto-added
|
||||
option java_generic_services = true; // auto-added
|
||||
option py_generic_services = true;
|
||||
|
||||
// A custom file option (defined below).
|
||||
option (file_opt1) = 9876543210;
|
||||
|
||||
import "google/protobuf/descriptor.proto";
|
||||
|
||||
// We don't put this in a package within proto2 because we need to make sure
|
||||
// that the generated code doesn't depend on being in the proto2 namespace.
|
||||
package protobuf_unittest;
|
||||
|
||||
|
||||
// Some simple test custom options of various types.
|
||||
|
||||
extend google.protobuf.FileOptions {
|
||||
optional uint64 file_opt1 = 7736974;
|
||||
}
|
||||
|
||||
extend google.protobuf.MessageOptions {
|
||||
optional int32 message_opt1 = 7739036;
|
||||
}
|
||||
|
||||
extend google.protobuf.FieldOptions {
|
||||
optional fixed64 field_opt1 = 7740936;
|
||||
// This is useful for testing that we correctly register default values for
|
||||
// extension options.
|
||||
optional int32 field_opt2 = 7753913 [default=42];
|
||||
}
|
||||
|
||||
extend google.protobuf.EnumOptions {
|
||||
optional sfixed32 enum_opt1 = 7753576;
|
||||
}
|
||||
|
||||
extend google.protobuf.EnumValueOptions {
|
||||
optional int32 enum_value_opt1 = 1560678;
|
||||
}
|
||||
|
||||
extend google.protobuf.ServiceOptions {
|
||||
optional sint64 service_opt1 = 7887650;
|
||||
}
|
||||
|
||||
enum MethodOpt1 {
|
||||
METHODOPT1_VAL1 = 1;
|
||||
METHODOPT1_VAL2 = 2;
|
||||
}
|
||||
|
||||
extend google.protobuf.MethodOptions {
|
||||
optional MethodOpt1 method_opt1 = 7890860;
|
||||
}
|
||||
|
||||
// A test message with custom options at all possible locations (and also some
|
||||
// regular options, to make sure they interact nicely).
|
||||
message TestMessageWithCustomOptions {
|
||||
option message_set_wire_format = false;
|
||||
|
||||
option (message_opt1) = -56;
|
||||
|
||||
optional string field1 = 1 [ctype=CORD,
|
||||
(field_opt1)=8765432109];
|
||||
|
||||
enum AnEnum {
|
||||
option (enum_opt1) = -789;
|
||||
|
||||
ANENUM_VAL1 = 1;
|
||||
ANENUM_VAL2 = 2 [(enum_value_opt1) = 123];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// A test RPC service with custom options at all possible locations (and also
|
||||
// some regular options, to make sure they interact nicely).
|
||||
message CustomOptionFooRequest {
|
||||
}
|
||||
|
||||
message CustomOptionFooResponse {
|
||||
}
|
||||
|
||||
service TestServiceWithCustomOptions {
|
||||
option (service_opt1) = -9876543210;
|
||||
|
||||
rpc Foo(CustomOptionFooRequest) returns (CustomOptionFooResponse) {
|
||||
option (method_opt1) = METHODOPT1_VAL2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Options of every possible field type, so we can test them all exhaustively.
|
||||
|
||||
message DummyMessageContainingEnum {
|
||||
enum TestEnumType {
|
||||
TEST_OPTION_ENUM_TYPE1 = 22;
|
||||
TEST_OPTION_ENUM_TYPE2 = -23;
|
||||
}
|
||||
}
|
||||
|
||||
message DummyMessageInvalidAsOptionType {
|
||||
}
|
||||
|
||||
extend google.protobuf.MessageOptions {
|
||||
optional bool bool_opt = 7706090;
|
||||
optional int32 int32_opt = 7705709;
|
||||
optional int64 int64_opt = 7705542;
|
||||
optional uint32 uint32_opt = 7704880;
|
||||
optional uint64 uint64_opt = 7702367;
|
||||
optional sint32 sint32_opt = 7701568;
|
||||
optional sint64 sint64_opt = 7700863;
|
||||
optional fixed32 fixed32_opt = 7700307;
|
||||
optional fixed64 fixed64_opt = 7700194;
|
||||
optional sfixed32 sfixed32_opt = 7698645;
|
||||
optional sfixed64 sfixed64_opt = 7685475;
|
||||
optional float float_opt = 7675390;
|
||||
optional double double_opt = 7673293;
|
||||
optional string string_opt = 7673285;
|
||||
optional bytes bytes_opt = 7673238;
|
||||
optional DummyMessageContainingEnum.TestEnumType enum_opt = 7673233;
|
||||
optional DummyMessageInvalidAsOptionType message_type_opt = 7665967;
|
||||
}
|
||||
|
||||
message CustomOptionMinIntegerValues {
|
||||
option (bool_opt) = false;
|
||||
option (int32_opt) = -0x80000000;
|
||||
option (int64_opt) = -0x8000000000000000;
|
||||
option (uint32_opt) = 0;
|
||||
option (uint64_opt) = 0;
|
||||
option (sint32_opt) = -0x80000000;
|
||||
option (sint64_opt) = -0x8000000000000000;
|
||||
option (fixed32_opt) = 0;
|
||||
option (fixed64_opt) = 0;
|
||||
option (sfixed32_opt) = -0x80000000;
|
||||
option (sfixed64_opt) = -0x8000000000000000;
|
||||
}
|
||||
|
||||
message CustomOptionMaxIntegerValues {
|
||||
option (bool_opt) = true;
|
||||
option (int32_opt) = 0x7FFFFFFF;
|
||||
option (int64_opt) = 0x7FFFFFFFFFFFFFFF;
|
||||
option (uint32_opt) = 0xFFFFFFFF;
|
||||
option (uint64_opt) = 0xFFFFFFFFFFFFFFFF;
|
||||
option (sint32_opt) = 0x7FFFFFFF;
|
||||
option (sint64_opt) = 0x7FFFFFFFFFFFFFFF;
|
||||
option (fixed32_opt) = 0xFFFFFFFF;
|
||||
option (fixed64_opt) = 0xFFFFFFFFFFFFFFFF;
|
||||
option (sfixed32_opt) = 0x7FFFFFFF;
|
||||
option (sfixed64_opt) = 0x7FFFFFFFFFFFFFFF;
|
||||
}
|
||||
|
||||
message CustomOptionOtherValues {
|
||||
option (int32_opt) = -100; // To test sign-extension.
|
||||
option (float_opt) = 12.3456789;
|
||||
option (double_opt) = 1.234567890123456789;
|
||||
option (string_opt) = "Hello, \"World\"";
|
||||
option (bytes_opt) = "Hello\0World";
|
||||
option (enum_opt) = TEST_OPTION_ENUM_TYPE2;
|
||||
}
|
||||
|
||||
message SettingRealsFromPositiveInts {
|
||||
option (float_opt) = 12;
|
||||
option (double_opt) = 154;
|
||||
}
|
||||
|
||||
message SettingRealsFromNegativeInts {
|
||||
option (float_opt) = -12;
|
||||
option (double_opt) = -154;
|
||||
}
|
||||
|
||||
// Options of complex message types, themselves combined and extended in
|
||||
// various ways.
|
||||
|
||||
message ComplexOptionType1 {
|
||||
optional int32 foo = 1;
|
||||
optional int32 foo2 = 2;
|
||||
optional int32 foo3 = 3;
|
||||
|
||||
extensions 100 to max;
|
||||
}
|
||||
|
||||
message ComplexOptionType2 {
|
||||
optional ComplexOptionType1 bar = 1;
|
||||
optional int32 baz = 2;
|
||||
|
||||
message ComplexOptionType4 {
|
||||
optional int32 waldo = 1;
|
||||
|
||||
extend google.protobuf.MessageOptions {
|
||||
optional ComplexOptionType4 complex_opt4 = 7633546;
|
||||
}
|
||||
}
|
||||
|
||||
optional ComplexOptionType4 fred = 3;
|
||||
|
||||
extensions 100 to max;
|
||||
}
|
||||
|
||||
message ComplexOptionType3 {
|
||||
optional int32 qux = 1;
|
||||
|
||||
optional group ComplexOptionType5 = 2 {
|
||||
optional int32 plugh = 3;
|
||||
}
|
||||
}
|
||||
|
||||
extend ComplexOptionType1 {
|
||||
optional int32 quux = 7663707;
|
||||
optional ComplexOptionType3 corge = 7663442;
|
||||
}
|
||||
|
||||
extend ComplexOptionType2 {
|
||||
optional int32 grault = 7650927;
|
||||
optional ComplexOptionType1 garply = 7649992;
|
||||
}
|
||||
|
||||
extend google.protobuf.MessageOptions {
|
||||
optional protobuf_unittest.ComplexOptionType1 complex_opt1 = 7646756;
|
||||
optional ComplexOptionType2 complex_opt2 = 7636949;
|
||||
optional ComplexOptionType3 complex_opt3 = 7636463;
|
||||
optional group ComplexOpt6 = 7595468 {
|
||||
optional int32 xyzzy = 7593951;
|
||||
}
|
||||
}
|
||||
|
||||
// Note that we try various different ways of naming the same extension.
|
||||
message VariousComplexOptions {
|
||||
option (.protobuf_unittest.complex_opt1).foo = 42;
|
||||
option (protobuf_unittest.complex_opt1).(.protobuf_unittest.quux) = 324;
|
||||
option (.protobuf_unittest.complex_opt1).(protobuf_unittest.corge).qux = 876;
|
||||
option (complex_opt2).baz = 987;
|
||||
option (complex_opt2).(grault) = 654;
|
||||
option (complex_opt2).bar.foo = 743;
|
||||
option (complex_opt2).bar.(quux) = 1999;
|
||||
option (complex_opt2).bar.(protobuf_unittest.corge).qux = 2008;
|
||||
option (complex_opt2).(garply).foo = 741;
|
||||
option (complex_opt2).(garply).(.protobuf_unittest.quux) = 1998;
|
||||
option (complex_opt2).(protobuf_unittest.garply).(corge).qux = 2121;
|
||||
option (ComplexOptionType2.ComplexOptionType4.complex_opt4).waldo = 1971;
|
||||
option (complex_opt2).fred.waldo = 321;
|
||||
option (protobuf_unittest.complex_opt3).qux = 9;
|
||||
option (complex_opt3).complexoptiontype5.plugh = 22;
|
||||
option (complexopt6).xyzzy = 24;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------
|
||||
// Definitions for testing aggregate option parsing.
|
||||
// See descriptor_unittest.cc.
|
||||
|
||||
message AggregateMessageSet {
|
||||
option message_set_wire_format = true;
|
||||
extensions 4 to max;
|
||||
}
|
||||
|
||||
message AggregateMessageSetElement {
|
||||
extend AggregateMessageSet {
|
||||
optional AggregateMessageSetElement message_set_extension = 15447542;
|
||||
}
|
||||
optional string s = 1;
|
||||
}
|
||||
|
||||
// A helper type used to test aggregate option parsing
|
||||
message Aggregate {
|
||||
optional int32 i = 1;
|
||||
optional string s = 2;
|
||||
|
||||
// A nested object
|
||||
optional Aggregate sub = 3;
|
||||
|
||||
// To test the parsing of extensions inside aggregate values
|
||||
optional google.protobuf.FileOptions file = 4;
|
||||
extend google.protobuf.FileOptions {
|
||||
optional Aggregate nested = 15476903;
|
||||
}
|
||||
|
||||
// An embedded message set
|
||||
optional AggregateMessageSet mset = 5;
|
||||
}
|
||||
|
||||
// Allow Aggregate to be used as an option at all possible locations
|
||||
// in the .proto grammer.
|
||||
extend google.protobuf.FileOptions { optional Aggregate fileopt = 15478479; }
|
||||
extend google.protobuf.MessageOptions { optional Aggregate msgopt = 15480088; }
|
||||
extend google.protobuf.FieldOptions { optional Aggregate fieldopt = 15481374; }
|
||||
extend google.protobuf.EnumOptions { optional Aggregate enumopt_renamed = 15483218; }
|
||||
extend google.protobuf.EnumValueOptions { optional Aggregate enumvalopt = 15486921; }
|
||||
extend google.protobuf.ServiceOptions { optional Aggregate serviceopt = 15497145; }
|
||||
extend google.protobuf.MethodOptions { optional Aggregate methodopt = 15512713; }
|
||||
|
||||
// Try using AggregateOption at different points in the proto grammar
|
||||
option (fileopt) = {
|
||||
s: 'FileAnnotation'
|
||||
// Also test the handling of comments
|
||||
/* of both types */ i: 100
|
||||
|
||||
sub { s: 'NestedFileAnnotation' }
|
||||
|
||||
// Include a google.protobuf.FileOptions and recursively extend it with
|
||||
// another fileopt.
|
||||
file {
|
||||
[protobuf_unittest.fileopt] {
|
||||
s:'FileExtensionAnnotation'
|
||||
}
|
||||
}
|
||||
|
||||
// A message set inside an option value
|
||||
mset {
|
||||
[protobuf_unittest.AggregateMessageSetElement.message_set_extension] {
|
||||
s: 'EmbeddedMessageSetElement'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
message AggregateMessage {
|
||||
option (msgopt) = { i:101 s:'MessageAnnotation' };
|
||||
optional int32 fieldname = 1 [(fieldopt) = { s:'FieldAnnotation' }];
|
||||
}
|
||||
|
||||
service AggregateService {
|
||||
option (serviceopt) = { s:'ServiceAnnotation' };
|
||||
rpc Method (AggregateMessage) returns (AggregateMessage) {
|
||||
option (methodopt) = { s:'MethodAnnotation' };
|
||||
}
|
||||
}
|
||||
|
||||
enum AggregateEnum {
|
||||
option (enumopt_renamed) = { s:'EnumAnnotation' };
|
||||
VALUE = 1 [(enumvalopt) = { s:'EnumValueAnnotation' }];
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// A proto file which imports a proto file that uses optimize_for = CODE_SIZE.
|
||||
|
||||
import "google/protobuf/unittest_optimize_for.proto";
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
// We optimize for speed here, but we are importing a proto that is optimized
|
||||
// for code size.
|
||||
option optimize_for = SPEED;
|
||||
|
||||
message TestEmbedOptimizedForSize {
|
||||
// Test that embedding a message which has optimize_for = CODE_SIZE into
|
||||
// one optimized for speed works.
|
||||
optional TestOptimizedForSize optional_message = 1;
|
||||
repeated TestOptimizedForSize repeated_message = 2;
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestEmptyProtoFile";
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// This file intentionally left blank. (At one point this wouldn't compile
|
||||
// correctly.)
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,67 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// A proto file which is imported by unittest.proto to test importing.
|
||||
|
||||
|
||||
// We don't put this in a package within proto2 because we need to make sure
|
||||
// that the generated code doesn't depend on being in the proto2 namespace.
|
||||
// In test_util.h we do
|
||||
// "using namespace unittest_import = protobuf_unittest_import".
|
||||
package protobuf_unittest_import;
|
||||
|
||||
option optimize_for = SPEED;
|
||||
|
||||
// Excercise the java_package option.
|
||||
option java_package = "com.google.protobuf.test";
|
||||
|
||||
// Do not set a java_outer_classname here to verify that Proto2 works without
|
||||
// one.
|
||||
|
||||
message ImportMessage {
|
||||
optional int32 d = 1;
|
||||
}
|
||||
|
||||
enum ImportEnum {
|
||||
IMPORT_FOO = 7;
|
||||
IMPORT_BAR = 8;
|
||||
IMPORT_BAZ = 9;
|
||||
}
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestImportLiteProtoFile";
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
//
|
||||
// This is like unittest_import.proto but with optimize_for = LITE_RUNTIME.
|
||||
|
||||
package protobuf_unittest_import;
|
||||
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
|
||||
option java_package = "com.google.protobuf";
|
||||
|
||||
message ImportMessageLite {
|
||||
optional int32 d = 1;
|
||||
}
|
||||
|
||||
enum ImportEnumLite {
|
||||
IMPORT_LITE_FOO = 7;
|
||||
IMPORT_LITE_BAR = 8;
|
||||
IMPORT_LITE_BAZ = 9;
|
||||
}
|
|
@ -1,318 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestLiteProtoFile";
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
//
|
||||
// This is like unittest.proto but with optimize_for = LITE_RUNTIME.
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
import "google/protobuf/unittest_import_lite.proto";
|
||||
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
|
||||
option java_package = "com.google.protobuf";
|
||||
|
||||
// Same as TestAllTypes but with the lite runtime.
|
||||
message TestAllTypesLite {
|
||||
message NestedMessage {
|
||||
optional int32 bb = 1;
|
||||
}
|
||||
|
||||
enum NestedEnum {
|
||||
FOO = 1;
|
||||
BAR = 2;
|
||||
BAZ = 3;
|
||||
}
|
||||
|
||||
// Singular
|
||||
optional int32 optional_int32 = 1;
|
||||
optional int64 optional_int64 = 2;
|
||||
optional uint32 optional_uint32 = 3;
|
||||
optional uint64 optional_uint64 = 4;
|
||||
optional sint32 optional_sint32 = 5;
|
||||
optional sint64 optional_sint64 = 6;
|
||||
optional fixed32 optional_fixed32 = 7;
|
||||
optional fixed64 optional_fixed64 = 8;
|
||||
optional sfixed32 optional_sfixed32 = 9;
|
||||
optional sfixed64 optional_sfixed64 = 10;
|
||||
optional float optional_float = 11;
|
||||
optional double optional_double = 12;
|
||||
optional bool optional_bool = 13;
|
||||
optional string optional_string = 14;
|
||||
optional bytes optional_bytes = 15;
|
||||
|
||||
optional group OptionalGroup = 16 {
|
||||
optional int32 a = 17;
|
||||
}
|
||||
|
||||
optional NestedMessage optional_nested_message = 18;
|
||||
optional ForeignMessageLite optional_foreign_message = 19;
|
||||
optional protobuf_unittest_import.ImportMessageLite
|
||||
optional_import_message = 20;
|
||||
|
||||
optional NestedEnum optional_nested_enum = 21;
|
||||
optional ForeignEnumLite optional_foreign_enum = 22;
|
||||
optional protobuf_unittest_import.ImportEnumLite optional_import_enum = 23;
|
||||
|
||||
optional string optional_string_piece = 24 [ctype=STRING_PIECE];
|
||||
optional string optional_cord = 25 [ctype=CORD];
|
||||
|
||||
// Repeated
|
||||
repeated int32 repeated_int32 = 31;
|
||||
repeated int64 repeated_int64 = 32;
|
||||
repeated uint32 repeated_uint32 = 33;
|
||||
repeated uint64 repeated_uint64 = 34;
|
||||
repeated sint32 repeated_sint32 = 35;
|
||||
repeated sint64 repeated_sint64 = 36;
|
||||
repeated fixed32 repeated_fixed32 = 37;
|
||||
repeated fixed64 repeated_fixed64 = 38;
|
||||
repeated sfixed32 repeated_sfixed32 = 39;
|
||||
repeated sfixed64 repeated_sfixed64 = 40;
|
||||
repeated float repeated_float = 41;
|
||||
repeated double repeated_double = 42;
|
||||
repeated bool repeated_bool = 43;
|
||||
repeated string repeated_string = 44;
|
||||
repeated bytes repeated_bytes = 45;
|
||||
|
||||
repeated group RepeatedGroup = 46 {
|
||||
optional int32 a = 47;
|
||||
}
|
||||
|
||||
repeated NestedMessage repeated_nested_message = 48;
|
||||
repeated ForeignMessageLite repeated_foreign_message = 49;
|
||||
repeated protobuf_unittest_import.ImportMessageLite
|
||||
repeated_import_message = 50;
|
||||
|
||||
repeated NestedEnum repeated_nested_enum = 51;
|
||||
repeated ForeignEnumLite repeated_foreign_enum = 52;
|
||||
repeated protobuf_unittest_import.ImportEnumLite repeated_import_enum = 53;
|
||||
|
||||
repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
|
||||
repeated string repeated_cord = 55 [ctype=CORD];
|
||||
|
||||
// Singular with defaults
|
||||
optional int32 default_int32 = 61 [default = 41 ];
|
||||
optional int64 default_int64 = 62 [default = 42 ];
|
||||
optional uint32 default_uint32 = 63 [default = 43 ];
|
||||
optional uint64 default_uint64 = 64 [default = 44 ];
|
||||
optional sint32 default_sint32 = 65 [default = -45 ];
|
||||
optional sint64 default_sint64 = 66 [default = 46 ];
|
||||
optional fixed32 default_fixed32 = 67 [default = 47 ];
|
||||
optional fixed64 default_fixed64 = 68 [default = 48 ];
|
||||
optional sfixed32 default_sfixed32 = 69 [default = 49 ];
|
||||
optional sfixed64 default_sfixed64 = 70 [default = -50 ];
|
||||
optional float default_float = 71 [default = 51.5 ];
|
||||
optional double default_double = 72 [default = 52e3 ];
|
||||
optional bool default_bool = 73 [default = true ];
|
||||
optional string default_string = 74 [default = "hello"];
|
||||
optional bytes default_bytes = 75 [default = "world"];
|
||||
|
||||
optional NestedEnum default_nested_enum = 81 [default = BAR];
|
||||
optional ForeignEnumLite default_foreign_enum = 82
|
||||
[default = FOREIGN_LITE_BAR];
|
||||
optional protobuf_unittest_import.ImportEnumLite
|
||||
default_import_enum = 83 [default = IMPORT_LITE_BAR];
|
||||
|
||||
optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
|
||||
optional string default_cord = 85 [ctype=CORD,default="123"];
|
||||
}
|
||||
|
||||
message ForeignMessageLite {
|
||||
optional int32 c = 1;
|
||||
}
|
||||
|
||||
enum ForeignEnumLite {
|
||||
FOREIGN_LITE_FOO = 4;
|
||||
FOREIGN_LITE_BAR = 5;
|
||||
FOREIGN_LITE_BAZ = 6;
|
||||
}
|
||||
|
||||
message TestPackedTypesLite {
|
||||
repeated int32 packed_int32 = 90 [packed = true];
|
||||
repeated int64 packed_int64 = 91 [packed = true];
|
||||
repeated uint32 packed_uint32 = 92 [packed = true];
|
||||
repeated uint64 packed_uint64 = 93 [packed = true];
|
||||
repeated sint32 packed_sint32 = 94 [packed = true];
|
||||
repeated sint64 packed_sint64 = 95 [packed = true];
|
||||
repeated fixed32 packed_fixed32 = 96 [packed = true];
|
||||
repeated fixed64 packed_fixed64 = 97 [packed = true];
|
||||
repeated sfixed32 packed_sfixed32 = 98 [packed = true];
|
||||
repeated sfixed64 packed_sfixed64 = 99 [packed = true];
|
||||
repeated float packed_float = 100 [packed = true];
|
||||
repeated double packed_double = 101 [packed = true];
|
||||
repeated bool packed_bool = 102 [packed = true];
|
||||
repeated ForeignEnumLite packed_enum = 103 [packed = true];
|
||||
}
|
||||
|
||||
message TestAllExtensionsLite {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
extend TestAllExtensionsLite {
|
||||
// Singular
|
||||
optional int32 optional_int32_extension_lite = 1;
|
||||
optional int64 optional_int64_extension_lite = 2;
|
||||
optional uint32 optional_uint32_extension_lite = 3;
|
||||
optional uint64 optional_uint64_extension_lite = 4;
|
||||
optional sint32 optional_sint32_extension_lite = 5;
|
||||
optional sint64 optional_sint64_extension_lite = 6;
|
||||
optional fixed32 optional_fixed32_extension_lite = 7;
|
||||
optional fixed64 optional_fixed64_extension_lite = 8;
|
||||
optional sfixed32 optional_sfixed32_extension_lite = 9;
|
||||
optional sfixed64 optional_sfixed64_extension_lite = 10;
|
||||
optional float optional_float_extension_lite = 11;
|
||||
optional double optional_double_extension_lite = 12;
|
||||
optional bool optional_bool_extension_lite = 13;
|
||||
optional string optional_string_extension_lite = 14;
|
||||
optional bytes optional_bytes_extension_lite = 15;
|
||||
|
||||
optional group OptionalGroup_extension_lite = 16 {
|
||||
optional int32 a = 17;
|
||||
}
|
||||
|
||||
optional TestAllTypesLite.NestedMessage optional_nested_message_extension_lite
|
||||
= 18;
|
||||
optional ForeignMessageLite optional_foreign_message_extension_lite = 19;
|
||||
optional protobuf_unittest_import.ImportMessageLite
|
||||
optional_import_message_extension_lite = 20;
|
||||
|
||||
optional TestAllTypesLite.NestedEnum optional_nested_enum_extension_lite = 21;
|
||||
optional ForeignEnumLite optional_foreign_enum_extension_lite = 22;
|
||||
optional protobuf_unittest_import.ImportEnumLite
|
||||
optional_import_enum_extension_lite = 23;
|
||||
|
||||
optional string optional_string_piece_extension_lite = 24
|
||||
[ctype=STRING_PIECE];
|
||||
optional string optional_cord_extension_lite = 25 [ctype=CORD];
|
||||
|
||||
// Repeated
|
||||
repeated int32 repeated_int32_extension_lite = 31;
|
||||
repeated int64 repeated_int64_extension_lite = 32;
|
||||
repeated uint32 repeated_uint32_extension_lite = 33;
|
||||
repeated uint64 repeated_uint64_extension_lite = 34;
|
||||
repeated sint32 repeated_sint32_extension_lite = 35;
|
||||
repeated sint64 repeated_sint64_extension_lite = 36;
|
||||
repeated fixed32 repeated_fixed32_extension_lite = 37;
|
||||
repeated fixed64 repeated_fixed64_extension_lite = 38;
|
||||
repeated sfixed32 repeated_sfixed32_extension_lite = 39;
|
||||
repeated sfixed64 repeated_sfixed64_extension_lite = 40;
|
||||
repeated float repeated_float_extension_lite = 41;
|
||||
repeated double repeated_double_extension_lite = 42;
|
||||
repeated bool repeated_bool_extension_lite = 43;
|
||||
repeated string repeated_string_extension_lite = 44;
|
||||
repeated bytes repeated_bytes_extension_lite = 45;
|
||||
|
||||
repeated group RepeatedGroup_extension_lite = 46 {
|
||||
optional int32 a = 47;
|
||||
}
|
||||
|
||||
repeated TestAllTypesLite.NestedMessage repeated_nested_message_extension_lite
|
||||
= 48;
|
||||
repeated ForeignMessageLite repeated_foreign_message_extension_lite = 49;
|
||||
repeated protobuf_unittest_import.ImportMessageLite
|
||||
repeated_import_message_extension_lite = 50;
|
||||
|
||||
repeated TestAllTypesLite.NestedEnum repeated_nested_enum_extension_lite = 51;
|
||||
repeated ForeignEnumLite repeated_foreign_enum_extension_lite = 52;
|
||||
repeated protobuf_unittest_import.ImportEnumLite
|
||||
repeated_import_enum_extension_lite = 53;
|
||||
|
||||
repeated string repeated_string_piece_extension_lite = 54
|
||||
[ctype=STRING_PIECE];
|
||||
repeated string repeated_cord_extension_lite = 55 [ctype=CORD];
|
||||
|
||||
// Singular with defaults
|
||||
optional int32 default_int32_extension_lite = 61 [default = 41 ];
|
||||
optional int64 default_int64_extension_lite = 62 [default = 42 ];
|
||||
optional uint32 default_uint32_extension_lite = 63 [default = 43 ];
|
||||
optional uint64 default_uint64_extension_lite = 64 [default = 44 ];
|
||||
optional sint32 default_sint32_extension_lite = 65 [default = -45 ];
|
||||
optional sint64 default_sint64_extension_lite = 66 [default = 46 ];
|
||||
optional fixed32 default_fixed32_extension_lite = 67 [default = 47 ];
|
||||
optional fixed64 default_fixed64_extension_lite = 68 [default = 48 ];
|
||||
optional sfixed32 default_sfixed32_extension_lite = 69 [default = 49 ];
|
||||
optional sfixed64 default_sfixed64_extension_lite = 70 [default = -50 ];
|
||||
optional float default_float_extension_lite = 71 [default = 51.5 ];
|
||||
optional double default_double_extension_lite = 72 [default = 52e3 ];
|
||||
optional bool default_bool_extension_lite = 73 [default = true ];
|
||||
optional string default_string_extension_lite = 74 [default = "hello"];
|
||||
optional bytes default_bytes_extension_lite = 75 [default = "world"];
|
||||
|
||||
optional TestAllTypesLite.NestedEnum
|
||||
default_nested_enum_extension_lite = 81 [default = BAR];
|
||||
optional ForeignEnumLite
|
||||
default_foreign_enum_extension_lite = 82 [default = FOREIGN_LITE_BAR];
|
||||
optional protobuf_unittest_import.ImportEnumLite
|
||||
default_import_enum_extension_lite = 83 [default = IMPORT_LITE_BAR];
|
||||
|
||||
optional string default_string_piece_extension_lite = 84 [ctype=STRING_PIECE,
|
||||
default="abc"];
|
||||
optional string default_cord_extension_lite = 85 [ctype=CORD, default="123"];
|
||||
}
|
||||
|
||||
message TestPackedExtensionsLite {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
extend TestPackedExtensionsLite {
|
||||
repeated int32 packed_int32_extension_lite = 90 [packed = true];
|
||||
repeated int64 packed_int64_extension_lite = 91 [packed = true];
|
||||
repeated uint32 packed_uint32_extension_lite = 92 [packed = true];
|
||||
repeated uint64 packed_uint64_extension_lite = 93 [packed = true];
|
||||
repeated sint32 packed_sint32_extension_lite = 94 [packed = true];
|
||||
repeated sint64 packed_sint64_extension_lite = 95 [packed = true];
|
||||
repeated fixed32 packed_fixed32_extension_lite = 96 [packed = true];
|
||||
repeated fixed64 packed_fixed64_extension_lite = 97 [packed = true];
|
||||
repeated sfixed32 packed_sfixed32_extension_lite = 98 [packed = true];
|
||||
repeated sfixed64 packed_sfixed64_extension_lite = 99 [packed = true];
|
||||
repeated float packed_float_extension_lite = 100 [packed = true];
|
||||
repeated double packed_double_extension_lite = 101 [packed = true];
|
||||
repeated bool packed_bool_extension_lite = 102 [packed = true];
|
||||
repeated ForeignEnumLite packed_enum_extension_lite = 103 [packed = true];
|
||||
}
|
||||
|
||||
message TestNestedExtensionLite {
|
||||
extend TestAllExtensionsLite {
|
||||
optional int32 nested_extension = 12345;
|
||||
}
|
||||
}
|
||||
|
||||
// Test that deprecated fields work. We only verify that they compile (at one
|
||||
// point this failed).
|
||||
message TestDeprecatedLite {
|
||||
optional int32 deprecated_field = 1 [deprecated = true];
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestLiteImportNonLiteProtoFile";
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
//
|
||||
// Tests that a "lite" message can import a regular message.
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
import "google/protobuf/unittest.proto";
|
||||
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
|
||||
message TestLiteImportsNonlite {
|
||||
optional TestAllTypes message = 1;
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// This file contains messages for testing message_set_wire_format.
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
option optimize_for = SPEED;
|
||||
|
||||
// A message with message_set_wire_format.
|
||||
message TestMessageSet {
|
||||
option message_set_wire_format = true;
|
||||
extensions 4 to max;
|
||||
}
|
||||
|
||||
message TestMessageSetContainer {
|
||||
optional TestMessageSet message_set = 1;
|
||||
}
|
||||
|
||||
message TestMessageSetExtension1 {
|
||||
extend TestMessageSet {
|
||||
optional TestMessageSetExtension1 message_set_extension = 1545008;
|
||||
}
|
||||
optional int32 i = 15;
|
||||
}
|
||||
|
||||
message TestMessageSetExtension2 {
|
||||
extend TestMessageSet {
|
||||
optional TestMessageSetExtension2 message_set_extension = 1547769;
|
||||
}
|
||||
optional string str = 25;
|
||||
}
|
||||
|
||||
// MessageSet wire format is equivalent to this.
|
||||
message RawMessageSet {
|
||||
repeated group Item = 1 {
|
||||
required int32 type_id = 2;
|
||||
required bytes message = 3;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
// 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.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos.NoGenericService";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestNoGenericServicesProtoFile";
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
|
||||
package google.protobuf.no_generic_services_test;
|
||||
|
||||
// *_generic_services are false by default.
|
||||
|
||||
message TestMessage {
|
||||
optional int32 a = 1;
|
||||
extensions 1000 to max;
|
||||
}
|
||||
|
||||
enum TestEnum {
|
||||
FOO = 1;
|
||||
}
|
||||
|
||||
extend TestMessage {
|
||||
optional int32 test_extension = 1000;
|
||||
}
|
||||
|
||||
service TestService {
|
||||
rpc Foo(TestMessage) returns(TestMessage);
|
||||
}
|
|
@ -1,67 +0,0 @@
|
|||
// 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.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.
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
//
|
||||
// A proto file which uses optimize_for = CODE_SIZE.
|
||||
|
||||
import "google/protobuf/unittest.proto";
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
|
||||
message TestOptimizedForSize {
|
||||
optional int32 i = 1;
|
||||
optional ForeignMessage msg = 19;
|
||||
|
||||
extensions 1000 to max;
|
||||
|
||||
extend TestOptimizedForSize {
|
||||
optional int32 test_extension = 1234;
|
||||
optional TestRequiredOptimizedForSize test_extension2 = 1235;
|
||||
}
|
||||
}
|
||||
|
||||
message TestRequiredOptimizedForSize {
|
||||
required int32 x = 1;
|
||||
}
|
||||
|
||||
message TestOptionalOptimizedForSize {
|
||||
optional TestRequiredOptimizedForSize o = 1;
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
package unittest_google_size;
|
||||
|
||||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestGoogleSizeProtoFile";
|
||||
|
||||
option java_outer_classname = "GoogleSize";
|
||||
option optimize_for = CODE_SIZE;
|
||||
|
||||
message SizeMessage1 {
|
||||
required string field1 = 1;
|
||||
optional string field9 = 9;
|
||||
optional string field18 = 18;
|
||||
optional bool field80 = 80 [default=false];
|
||||
optional bool field81 = 81 [default=true];
|
||||
required int32 field2 = 2;
|
||||
required int32 field3 = 3;
|
||||
optional int32 field280 = 280;
|
||||
optional int32 field6 = 6 [default=0];
|
||||
optional int64 field22 = 22;
|
||||
optional string field4 = 4;
|
||||
repeated fixed64 field5 = 5;
|
||||
optional bool field59 = 59 [default=false];
|
||||
optional string field7 = 7;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field130 = 130 [default=0];
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional bool field17 = 17 [default=true];
|
||||
optional bool field13 = 13 [default=true];
|
||||
optional bool field14 = 14 [default=true];
|
||||
optional int32 field104 = 104 [default=0];
|
||||
optional int32 field100 = 100 [default=0];
|
||||
optional int32 field101 = 101 [default=0];
|
||||
optional string field102 = 102;
|
||||
optional string field103 = 103;
|
||||
optional int32 field29 = 29 [default=0];
|
||||
optional bool field30 = 30 [default=false];
|
||||
optional int32 field60 = 60 [default=-1];
|
||||
optional int32 field271 = 271 [default=-1];
|
||||
optional int32 field272 = 272 [default=-1];
|
||||
optional int32 field150 = 150;
|
||||
optional int32 field23 = 23 [default=0];
|
||||
optional bool field24 = 24 [default=false];
|
||||
optional int32 field25 = 25 [default=0];
|
||||
optional SizeMessage1SubMessage field15 = 15;
|
||||
optional bool field78 = 78;
|
||||
optional int32 field67 = 67 [default=0];
|
||||
optional int32 field68 = 68;
|
||||
optional int32 field128 = 128 [default=0];
|
||||
optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
|
||||
optional int32 field131 = 131 [default=0];
|
||||
}
|
||||
|
||||
message SizeMessage1SubMessage {
|
||||
optional int32 field1 = 1 [default=0];
|
||||
optional int32 field2 = 2 [default=0];
|
||||
optional int32 field3 = 3 [default=0];
|
||||
optional string field15 = 15;
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional int64 field13 = 13;
|
||||
optional int64 field14 = 14;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field19 = 19 [default=2];
|
||||
optional bool field20 = 20 [default=true];
|
||||
optional bool field28 = 28 [default=true];
|
||||
optional fixed64 field21 = 21;
|
||||
optional int32 field22 = 22;
|
||||
optional bool field23 = 23 [ default=false ];
|
||||
optional bool field206 = 206 [default=false];
|
||||
optional fixed32 field203 = 203;
|
||||
optional int32 field204 = 204;
|
||||
optional string field205 = 205;
|
||||
optional uint64 field207 = 207;
|
||||
optional uint64 field300 = 300;
|
||||
}
|
||||
|
||||
message SizeMessage2 {
|
||||
optional string field1 = 1;
|
||||
optional int64 field3 = 3;
|
||||
optional int64 field4 = 4;
|
||||
optional int64 field30 = 30;
|
||||
optional bool field75 = 75 [default=false];
|
||||
optional string field6 = 6;
|
||||
optional bytes field2 = 2;
|
||||
optional int32 field21 = 21 [default=0];
|
||||
optional int32 field71 = 71;
|
||||
optional float field25 = 25;
|
||||
optional int32 field109 = 109 [default=0];
|
||||
optional int32 field210 = 210 [default=0];
|
||||
optional int32 field211 = 211 [default=0];
|
||||
optional int32 field212 = 212 [default=0];
|
||||
optional int32 field213 = 213 [default=0];
|
||||
optional int32 field216 = 216 [default=0];
|
||||
optional int32 field217 = 217 [default=0];
|
||||
optional int32 field218 = 218 [default=0];
|
||||
optional int32 field220 = 220 [default=0];
|
||||
optional int32 field221 = 221 [default=0];
|
||||
optional float field222 = 222 [default=0.0];
|
||||
optional int32 field63 = 63;
|
||||
|
||||
repeated group Group1 = 10 {
|
||||
required float field11 = 11;
|
||||
optional float field26 = 26;
|
||||
optional string field12 = 12;
|
||||
optional string field13 = 13;
|
||||
repeated string field14 = 14;
|
||||
required uint64 field15 = 15;
|
||||
optional int32 field5 = 5;
|
||||
optional string field27 = 27;
|
||||
optional int32 field28 = 28;
|
||||
optional string field29 = 29;
|
||||
optional string field16 = 16;
|
||||
repeated string field22 = 22;
|
||||
repeated int32 field73 = 73;
|
||||
optional int32 field20 = 20 [default=0];
|
||||
optional string field24 = 24;
|
||||
optional SizeMessage2GroupedMessage field31 = 31;
|
||||
}
|
||||
repeated string field128 = 128;
|
||||
optional int64 field131 = 131;
|
||||
repeated string field127 = 127;
|
||||
optional int32 field129 = 129;
|
||||
repeated int64 field130 = 130;
|
||||
optional bool field205 = 205 [default=false];
|
||||
optional bool field206 = 206 [default=false];
|
||||
}
|
||||
|
||||
message SizeMessage2GroupedMessage {
|
||||
optional float field1 = 1;
|
||||
optional float field2 = 2;
|
||||
optional float field3 = 3 [default=0.0];
|
||||
optional bool field4 = 4;
|
||||
optional bool field5 = 5;
|
||||
optional bool field6 = 6 [default=true];
|
||||
optional bool field7 = 7 [default=false];
|
||||
optional float field8 = 8;
|
||||
optional bool field9 = 9;
|
||||
optional float field10 = 10;
|
||||
optional int64 field11 = 11;
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
package unittest_google_speed;
|
||||
|
||||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestGoogleSpeedProtoFile";
|
||||
|
||||
option java_outer_classname = "GoogleSpeed";
|
||||
option optimize_for = SPEED;
|
||||
|
||||
message SpeedMessage1 {
|
||||
required string field1 = 1;
|
||||
optional string field9 = 9;
|
||||
optional string field18 = 18;
|
||||
optional bool field80 = 80 [default=false];
|
||||
optional bool field81 = 81 [default=true];
|
||||
required int32 field2 = 2;
|
||||
required int32 field3 = 3;
|
||||
optional int32 field280 = 280;
|
||||
optional int32 field6 = 6 [default=0];
|
||||
optional int64 field22 = 22;
|
||||
optional string field4 = 4;
|
||||
repeated fixed64 field5 = 5;
|
||||
optional bool field59 = 59 [default=false];
|
||||
optional string field7 = 7;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field130 = 130 [default=0];
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional bool field17 = 17 [default=true];
|
||||
optional bool field13 = 13 [default=true];
|
||||
optional bool field14 = 14 [default=true];
|
||||
optional int32 field104 = 104 [default=0];
|
||||
optional int32 field100 = 100 [default=0];
|
||||
optional int32 field101 = 101 [default=0];
|
||||
optional string field102 = 102;
|
||||
optional string field103 = 103;
|
||||
optional int32 field29 = 29 [default=0];
|
||||
optional bool field30 = 30 [default=false];
|
||||
optional int32 field60 = 60 [default=-1];
|
||||
optional int32 field271 = 271 [default=-1];
|
||||
optional int32 field272 = 272 [default=-1];
|
||||
optional int32 field150 = 150;
|
||||
optional int32 field23 = 23 [default=0];
|
||||
optional bool field24 = 24 [default=false];
|
||||
optional int32 field25 = 25 [default=0];
|
||||
optional SpeedMessage1SubMessage field15 = 15;
|
||||
optional bool field78 = 78;
|
||||
optional int32 field67 = 67 [default=0];
|
||||
optional int32 field68 = 68;
|
||||
optional int32 field128 = 128 [default=0];
|
||||
optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
|
||||
optional int32 field131 = 131 [default=0];
|
||||
}
|
||||
|
||||
message SpeedMessage1SubMessage {
|
||||
optional int32 field1 = 1 [default=0];
|
||||
optional int32 field2 = 2 [default=0];
|
||||
optional int32 field3 = 3 [default=0];
|
||||
optional string field15 = 15;
|
||||
optional bool field12 = 12 [default=true];
|
||||
optional int64 field13 = 13;
|
||||
optional int64 field14 = 14;
|
||||
optional int32 field16 = 16;
|
||||
optional int32 field19 = 19 [default=2];
|
||||
optional bool field20 = 20 [default=true];
|
||||
optional bool field28 = 28 [default=true];
|
||||
optional fixed64 field21 = 21;
|
||||
optional int32 field22 = 22;
|
||||
optional bool field23 = 23 [ default=false ];
|
||||
optional bool field206 = 206 [default=false];
|
||||
optional fixed32 field203 = 203;
|
||||
optional int32 field204 = 204;
|
||||
optional string field205 = 205;
|
||||
optional uint64 field207 = 207;
|
||||
optional uint64 field300 = 300;
|
||||
}
|
||||
|
||||
message SpeedMessage2 {
|
||||
optional string field1 = 1;
|
||||
optional int64 field3 = 3;
|
||||
optional int64 field4 = 4;
|
||||
optional int64 field30 = 30;
|
||||
optional bool field75 = 75 [default=false];
|
||||
optional string field6 = 6;
|
||||
optional bytes field2 = 2;
|
||||
optional int32 field21 = 21 [default=0];
|
||||
optional int32 field71 = 71;
|
||||
optional float field25 = 25;
|
||||
optional int32 field109 = 109 [default=0];
|
||||
optional int32 field210 = 210 [default=0];
|
||||
optional int32 field211 = 211 [default=0];
|
||||
optional int32 field212 = 212 [default=0];
|
||||
optional int32 field213 = 213 [default=0];
|
||||
optional int32 field216 = 216 [default=0];
|
||||
optional int32 field217 = 217 [default=0];
|
||||
optional int32 field218 = 218 [default=0];
|
||||
optional int32 field220 = 220 [default=0];
|
||||
optional int32 field221 = 221 [default=0];
|
||||
optional float field222 = 222 [default=0.0];
|
||||
optional int32 field63 = 63;
|
||||
|
||||
repeated group Group1 = 10 {
|
||||
required float field11 = 11;
|
||||
optional float field26 = 26;
|
||||
optional string field12 = 12;
|
||||
optional string field13 = 13;
|
||||
repeated string field14 = 14;
|
||||
required uint64 field15 = 15;
|
||||
optional int32 field5 = 5;
|
||||
optional string field27 = 27;
|
||||
optional int32 field28 = 28;
|
||||
optional string field29 = 29;
|
||||
optional string field16 = 16;
|
||||
repeated string field22 = 22;
|
||||
repeated int32 field73 = 73;
|
||||
optional int32 field20 = 20 [default=0];
|
||||
optional string field24 = 24;
|
||||
optional SpeedMessage2GroupedMessage field31 = 31;
|
||||
}
|
||||
repeated string field128 = 128;
|
||||
optional int64 field131 = 131;
|
||||
repeated string field127 = 127;
|
||||
optional int32 field129 = 129;
|
||||
repeated int64 field130 = 130;
|
||||
optional bool field205 = 205 [default=false];
|
||||
optional bool field206 = 206 [default=false];
|
||||
}
|
||||
|
||||
message SpeedMessage2GroupedMessage {
|
||||
optional float field1 = 1;
|
||||
optional float field2 = 2;
|
||||
optional float field3 = 3 [default=0.0];
|
||||
optional bool field4 = 4;
|
||||
optional bool field5 = 5;
|
||||
optional bool field6 = 6 [default=true];
|
||||
optional bool field7 = 7 [default=false];
|
||||
optional float field8 = 8;
|
||||
optional bool field9 = 9;
|
||||
optional float field10 = 10;
|
||||
optional int64 field11 = 11;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<NotepadPlus>
|
||||
<!--
|
||||
Defines syntax highlighting for Notepad++.
|
||||
1. Install Notepad++ from http://notepad-plus-plus.org
|
||||
2. Open Notepad++, from the View menu, select "User-Defined Dialog..."
|
||||
3. Click the "Import..." button and select this file
|
||||
4. Restart Notepad++
|
||||
5. Open and edit any *.proto file
|
||||
-->
|
||||
<UserLang name="Proto Buffer" ext="proto">
|
||||
<Settings>
|
||||
<Global caseIgnored="no" />
|
||||
<TreatAsSymbol comment="no" commentLine="yes" />
|
||||
<Prefix words1="no" words2="no" words3="no" words4="yes" />
|
||||
</Settings>
|
||||
<KeywordLists>
|
||||
<Keywords name="Delimiters">[00]00</Keywords>
|
||||
<Keywords name="Folder+">{</Keywords>
|
||||
<Keywords name="Folder-">}</Keywords>
|
||||
<Keywords name="Operators">=</Keywords>
|
||||
<Keywords name="Comment"> 1option 1package 1import 2; 0//</Keywords>
|
||||
<Keywords name="Words1">message enum service extend</Keywords>
|
||||
<Keywords name="Words2">required optional repeated extensions to rpc returns</Keywords>
|
||||
<Keywords name="Words3">double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes</Keywords>
|
||||
<Keywords name="Words4"></Keywords>
|
||||
</KeywordLists>
|
||||
<Styles>
|
||||
<WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="FOLDEROPEN" styleID="12" fgColor="000000" bgColor="FFFFFF" fontStyle="1" />
|
||||
<WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="000000" bgColor="FFFFFF" fontStyle="1" />
|
||||
<WordsStyle name="KEYWORD1" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="KEYWORD2" styleID="6" fgColor="0080C0" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="KEYWORD3" styleID="7" fgColor="0000FF" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="KEYWORD4" styleID="8" fgColor="008040" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="COMMENT LINE" styleID="2" fgColor="949494" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="NUMBER" styleID="4" fgColor="FF0000" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="DELIMINER1" styleID="14" fgColor="800080" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="DELIMINER2" styleID="15" fgColor="808080" bgColor="FFFFFF" fontStyle="0" />
|
||||
<WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />
|
||||
</Styles>
|
||||
</UserLang>
|
||||
</NotepadPlus>
|
|
@ -1,31 +0,0 @@
|
|||
package tutorial;
|
||||
|
||||
import "google/protobuf/csharp_options.proto";
|
||||
option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.Examples.AddressBook";
|
||||
option (google.protobuf.csharp_file_options).umbrella_classname = "AddressBookProtos";
|
||||
|
||||
option optimize_for = SPEED;
|
||||
|
||||
message Person {
|
||||
required string name = 1;
|
||||
required int32 id = 2; // Unique ID number for this person.
|
||||
optional string email = 3;
|
||||
|
||||
enum PhoneType {
|
||||
MOBILE = 0;
|
||||
HOME = 1;
|
||||
WORK = 2;
|
||||
}
|
||||
|
||||
message PhoneNumber {
|
||||
required string number = 1;
|
||||
optional PhoneType type = 2 [default = HOME];
|
||||
}
|
||||
|
||||
repeated PhoneNumber phone = 4;
|
||||
}
|
||||
|
||||
// Our address book file is just one of these.
|
||||
message AddressBook {
|
||||
repeated Person person = 1;
|
||||
}
|
|
@ -49,7 +49,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AddPerson.cs" />
|
||||
<Compile Include="AddressBookProtos.cs" />
|
||||
<Compile Include="Addressbook.cs" />
|
||||
<Compile Include="SampleUsage.cs" />
|
||||
<Compile Include="ListPeople.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,150 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests for the dependency resolution in Generator.
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class DependencyResolutionTest
|
||||
{
|
||||
[Test]
|
||||
public void TwoDistinctFiles()
|
||||
{
|
||||
FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();
|
||||
FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();
|
||||
var set = new List<FileDescriptorProto> { first, second };
|
||||
|
||||
IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.AreEqual(2, converted.Count);
|
||||
Assert.AreEqual("First", converted[0].Name);
|
||||
Assert.AreEqual(0, converted[0].Dependencies.Count);
|
||||
Assert.AreEqual("Second", converted[1].Name);
|
||||
Assert.AreEqual(0, converted[1].Dependencies.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FirstDependsOnSecond()
|
||||
{
|
||||
FileDescriptorProto first =
|
||||
new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
|
||||
FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();
|
||||
var set = new List<FileDescriptorProto> { first, second };
|
||||
IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.AreEqual(2, converted.Count);
|
||||
Assert.AreEqual("First", converted[0].Name);
|
||||
Assert.AreEqual(1, converted[0].Dependencies.Count);
|
||||
Assert.AreEqual(converted[1], converted[0].Dependencies[0]);
|
||||
Assert.AreEqual("Second", converted[1].Name);
|
||||
Assert.AreEqual(0, converted[1].Dependencies.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SecondDependsOnFirst()
|
||||
{
|
||||
FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();
|
||||
FileDescriptorProto second =
|
||||
new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();
|
||||
var set = new List<FileDescriptorProto> { first, second };
|
||||
IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.AreEqual(2, converted.Count);
|
||||
Assert.AreEqual("First", converted[0].Name);
|
||||
Assert.AreEqual(0, converted[0].Dependencies.Count);
|
||||
Assert.AreEqual("Second", converted[1].Name);
|
||||
Assert.AreEqual(1, converted[1].Dependencies.Count);
|
||||
Assert.AreEqual(converted[0], converted[1].Dependencies[0]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CircularDependency()
|
||||
{
|
||||
FileDescriptorProto first =
|
||||
new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
|
||||
FileDescriptorProto second =
|
||||
new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();
|
||||
var set = new List<FileDescriptorProto> { first, second };
|
||||
try
|
||||
{
|
||||
Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.Fail("Expected exception");
|
||||
}
|
||||
catch (DependencyResolutionException)
|
||||
{
|
||||
// Expected
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MissingDependency()
|
||||
{
|
||||
FileDescriptorProto first =
|
||||
new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
|
||||
var set = new List<FileDescriptorProto> { first };
|
||||
try
|
||||
{
|
||||
Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.Fail("Expected exception");
|
||||
}
|
||||
catch (DependencyResolutionException)
|
||||
{
|
||||
// Expected
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SelfDependency()
|
||||
{
|
||||
FileDescriptorProto first =
|
||||
new FileDescriptorProto.Builder {Name = "First", DependencyList = {"First"}}.Build();
|
||||
var set = new List<FileDescriptorProto> { first };
|
||||
try
|
||||
{
|
||||
Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
|
||||
Assert.Fail("Expected exception");
|
||||
}
|
||||
catch (DependencyResolutionException)
|
||||
{
|
||||
// Expected
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
|
||||
[assembly: AssemblyTitle("ProtoGen.Test")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ProtoGen.Test")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2008")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("2.4.1.555")]
|
||||
|
||||
[assembly: AssemblyVersion("2.4.1.555")]
|
||||
[assembly: AssemblyFileVersion("2.4.1.555")]
|
|
@ -1,99 +0,0 @@
|
|||
<?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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{C268DA4C-4004-47DA-AF23-44C983281A68}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.ProtoGen.Test</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="nunit.framework">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DependencyResolutionTest.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TempFile.cs" />
|
||||
<Compile Include="TestPreprocessing.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ProtoGen\ProtoGen.csproj">
|
||||
<Project>{250ADE34-82FD-4BAE-86D5-985FBE589C4A}</Project>
|
||||
<Name>ProtoGen</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="..\..\lib\protoc.exe">
|
||||
<Link>protoc.exe</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\protos\google\protobuf\csharp_options.proto">
|
||||
<Link>google\protobuf\csharp_options.proto</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\..\protos\google\protobuf\descriptor.proto">
|
||||
<Link>google\protobuf\descriptor.proto</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<StartAction>Program</StartAction>
|
||||
<StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>
|
||||
<StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>
|
||||
<StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,683 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests protoc-gen-cs plugin.
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
[Category("Preprocessor")]
|
||||
public partial class ProtocGenCsUnittests
|
||||
{
|
||||
private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "protoc-gen-cs.Test");
|
||||
|
||||
private const string DefaultProto =
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}";
|
||||
|
||||
#region TestFixture SetUp/TearDown
|
||||
|
||||
private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory;
|
||||
|
||||
private StringBuilder buffer = new StringBuilder();
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public virtual void Setup()
|
||||
{
|
||||
Teardown();
|
||||
Directory.CreateDirectory(TempPath);
|
||||
Environment.CurrentDirectory = TempPath;
|
||||
this.buffer.Length = 0;
|
||||
}
|
||||
|
||||
[TestFixtureTearDown]
|
||||
public virtual void Teardown()
|
||||
{
|
||||
Environment.CurrentDirectory = OriginalWorkingDirectory;
|
||||
if (Directory.Exists(TempPath))
|
||||
{
|
||||
Directory.Delete(TempPath, true);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods RunProtoGen / RunCsc
|
||||
|
||||
private void RunProtoc(int expect, string protoFile, params string[] args)
|
||||
{
|
||||
string protoPath = string.Format("-I. -I\"{0}\"", OriginalWorkingDirectory);
|
||||
string plugin = string.Format("--plugin=\"{0}\"", Path.Combine(OriginalWorkingDirectory, "protoc-gen-cs.exe"));
|
||||
string csOut = args.Length == 0 ? "--cs_out=." : string.Format("--cs_out=\"{0}:.\"", string.Join(" ", args));
|
||||
// Start the child process.
|
||||
Process p = new Process();
|
||||
// Redirect the output stream of the child process.
|
||||
p.StartInfo.CreateNoWindow = true;
|
||||
p.StartInfo.UseShellExecute = false;
|
||||
p.StartInfo.RedirectStandardError = true;
|
||||
p.StartInfo.RedirectStandardOutput = true;
|
||||
p.StartInfo.WorkingDirectory = TempPath;
|
||||
p.StartInfo.FileName = Path.Combine(OriginalWorkingDirectory, "protoc.exe");
|
||||
p.StartInfo.Arguments = string.Join(" ", new string[] { plugin, csOut, protoPath, protoFile });
|
||||
p.Start();
|
||||
// Read the output stream first and then wait.
|
||||
buffer.AppendLine(string.Format("{0}> \"{1}\" {2}", p.StartInfo.WorkingDirectory, p.StartInfo.FileName, p.StartInfo.Arguments));
|
||||
buffer.AppendLine(p.StandardError.ReadToEnd());
|
||||
buffer.AppendLine(p.StandardOutput.ReadToEnd());
|
||||
p.WaitForExit();
|
||||
Assert.AreEqual(expect, p.ExitCode, this.buffer.ToString());
|
||||
}
|
||||
|
||||
private Assembly RunCsc(int expect, params string[] sources)
|
||||
{
|
||||
using (TempFile tempDll = new TempFile(String.Empty))
|
||||
{
|
||||
tempDll.ChangeExtension(".dll");
|
||||
List<string> args = new List<string>();
|
||||
args.Add("/nologo");
|
||||
args.Add("/target:library");
|
||||
args.Add("/debug-");
|
||||
args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath));
|
||||
args.Add("/r:System.dll");
|
||||
args.Add(String.Format(@"""/r:{0}""",
|
||||
typeof(Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.
|
||||
Location));
|
||||
args.AddRange(sources);
|
||||
|
||||
string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),
|
||||
"csc.exe");
|
||||
ProcessStartInfo psi = new ProcessStartInfo(exe);
|
||||
psi.WorkingDirectory = TempPath;
|
||||
psi.CreateNoWindow = true;
|
||||
psi.UseShellExecute = false;
|
||||
psi.RedirectStandardOutput = true;
|
||||
psi.RedirectStandardError = true;
|
||||
psi.Arguments = string.Join(" ", args.ToArray());
|
||||
Process p = Process.Start(psi);
|
||||
buffer.AppendLine(string.Format("{0}> \"{1}\" {2}", p.StartInfo.WorkingDirectory, p.StartInfo.FileName, p.StartInfo.Arguments));
|
||||
buffer.AppendLine(p.StandardError.ReadToEnd());
|
||||
buffer.AppendLine(p.StandardOutput.ReadToEnd());
|
||||
p.WaitForExit();
|
||||
Assert.AreEqual(expect, p.ExitCode, this.buffer.ToString());
|
||||
|
||||
Assembly asm = null;
|
||||
if (p.ExitCode == 0)
|
||||
{
|
||||
byte[] allbytes = File.ReadAllBytes(tempDll.TempPath);
|
||||
asm = Assembly.Load(allbytes);
|
||||
|
||||
foreach (Type t in asm.GetTypes())
|
||||
{
|
||||
Debug.WriteLine(t.FullName, asm.FullName);
|
||||
}
|
||||
}
|
||||
return asm;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// *******************************************************************
|
||||
// The following tests excercise options for protogen.exe
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestProtoFile()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithConflictingType()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message " +
|
||||
test + @" {
|
||||
optional string name = 1;
|
||||
} "))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test, true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-namespace=MyNewNamespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithUmbrellaClassName()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.MyUmbrellaClassname", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNestedClass()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-nest_classes=true");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithExpandedNsDirectories()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-expand_namespace_directories=true");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNewExtension()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".Generated.cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-file_extension=.Generated.cs");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithUmbrellaNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-umbrella_namespace=MyUmbrella.Namespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(0, proto.TempPath, "-nest_classes=true", "-umbrella_namespace=MyUmbrella.Namespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithExplicitEmptyUmbrellaNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message " +
|
||||
test + @" {
|
||||
optional string name = 1;
|
||||
} "))
|
||||
{
|
||||
//Forces the umbrella class to not use a namespace even if a collision with a type is detected.
|
||||
RunProtoc(0, proto.TempPath, "-umbrella_namespace=");
|
||||
//error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed
|
||||
RunCsc(1, source.TempPath);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNewOutputFolder()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoc(1, proto.TempPath, "-output_directory=generated-code");
|
||||
Directory.CreateDirectory("generated-code");
|
||||
RunProtoc(0, proto.TempPath, "-output_directory=generated-code");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileAndIgnoreGoogleProtobuf()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
" +
|
||||
DefaultProto))
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
RunProtoc(0, proto.TempPath);
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithoutIgnoreGoogleProtobuf()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
" +
|
||||
DefaultProto))
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
//Without the option this fails due to being unable to resolve google/protobuf descriptors
|
||||
RunProtoc(0, proto.TempPath);
|
||||
}
|
||||
}
|
||||
|
||||
// *******************************************************************
|
||||
// The following tests excercise options for protoc.exe
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithIncludeImports()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
} ")
|
||||
)
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
//if you specify the protoc option --include_imports this should build three source files
|
||||
RunProtoc(0, proto.TempPath);
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
//you can (and should) simply omit the inclusion of the extra source files in your project
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
//Seems the --proto_path or -I option is non-functional for me. Maybe others have luck?
|
||||
[Test]
|
||||
public void TestProtoFileInDifferentDirectory()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
Environment.CurrentDirectory = OriginalWorkingDirectory;
|
||||
RunProtoc(0, proto.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
// *******************************************************************
|
||||
// Handling of mutliple input files
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestMultipleProtoFiles()
|
||||
{
|
||||
Setup();
|
||||
using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
|
||||
using (
|
||||
ProtoFile proto1 = new ProtoFile("MyMessage.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}")
|
||||
)
|
||||
using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
|
||||
using (
|
||||
ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
import ""MyMessage.proto"";
|
||||
// Test a very simple message.
|
||||
message MyMessageList {
|
||||
repeated MyMessage messages = 1;
|
||||
}")
|
||||
)
|
||||
{
|
||||
RunProtoc(0, proto1.TempPath);
|
||||
RunProtoc(0, proto2.TempPath);
|
||||
Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto.MyMessage", true, true);
|
||||
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestOneProtoFileWithBufferFile()
|
||||
{
|
||||
Setup();
|
||||
using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
|
||||
using (
|
||||
ProtoFile proto1 = new ProtoFile("MyMessage.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}")
|
||||
)
|
||||
using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
|
||||
using (
|
||||
ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
import ""MyMessage.proto"";
|
||||
// Test a very simple message.
|
||||
message MyMessageList {
|
||||
repeated MyMessage messages = 1;
|
||||
}")
|
||||
)
|
||||
{
|
||||
//build the proto buffer for MyMessage
|
||||
RunProtoc(0, proto1.TempPath);
|
||||
//build the MyMessageList proto-buffer and generate code by including MyMessage.pb
|
||||
RunProtoc(0, proto2.TempPath);
|
||||
Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto.MyMessage", true, true);
|
||||
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithService()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}
|
||||
// test a very simple service.
|
||||
service TestService {
|
||||
rpc Execute (MyMessage) returns (MyMessage);
|
||||
}"))
|
||||
{
|
||||
CopyInGoogleProtoFiles();
|
||||
|
||||
RunProtoc(0, proto.TempPath, "-nest_classes=false");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the service type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
||||
Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
||||
Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
||||
//assert that the Stub subclass type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
||||
Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
||||
Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithServiceInternal()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}
|
||||
// test a very simple service.
|
||||
service TestService {
|
||||
rpc Execute (MyMessage) returns (MyMessage);
|
||||
}"))
|
||||
{
|
||||
CopyInGoogleProtoFiles();
|
||||
|
||||
RunProtoc(0, proto.TempPath, "-nest_classes=false", "-public_classes=false");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the service type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
||||
Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
||||
Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
||||
//assert that the Stub subclass type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
||||
Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
||||
Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
||||
}
|
||||
}
|
||||
|
||||
private static void CopyInGoogleProtoFiles()
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class ProtoFile : TempFile
|
||||
{
|
||||
public ProtoFile(string filename, string contents)
|
||||
: base(filename, contents)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
internal class TempFile : IDisposable
|
||||
{
|
||||
private string tempFile;
|
||||
|
||||
public static TempFile Attach(string path)
|
||||
{
|
||||
return new TempFile(path, null);
|
||||
}
|
||||
|
||||
protected TempFile(string filename, string contents)
|
||||
{
|
||||
tempFile = filename;
|
||||
if (contents != null)
|
||||
{
|
||||
File.WriteAllText(tempFile, contents, new UTF8Encoding(false));
|
||||
}
|
||||
}
|
||||
|
||||
public TempFile(string contents)
|
||||
: this(Path.GetTempFileName(), contents)
|
||||
{
|
||||
}
|
||||
|
||||
public string TempPath
|
||||
{
|
||||
get { return tempFile; }
|
||||
}
|
||||
|
||||
public void ChangeExtension(string ext)
|
||||
{
|
||||
string newFile = Path.ChangeExtension(tempFile, ext);
|
||||
File.Move(tempFile, newFile);
|
||||
tempFile = newFile;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (File.Exists(tempFile))
|
||||
{
|
||||
File.Delete(tempFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,733 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
[TestFixture]
|
||||
[Category("Preprocessor")]
|
||||
public partial class TestPreprocessing
|
||||
{
|
||||
private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "proto-gen-test");
|
||||
|
||||
private const string DefaultProto =
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}";
|
||||
|
||||
#region TestFixture SetUp/TearDown
|
||||
|
||||
private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory;
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public virtual void Setup()
|
||||
{
|
||||
Teardown();
|
||||
Directory.CreateDirectory(TempPath);
|
||||
Environment.CurrentDirectory = TempPath;
|
||||
}
|
||||
|
||||
[TestFixtureTearDown]
|
||||
public virtual void Teardown()
|
||||
{
|
||||
Environment.CurrentDirectory = OriginalWorkingDirectory;
|
||||
if (Directory.Exists(TempPath))
|
||||
{
|
||||
Directory.Delete(TempPath, true);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods RunProtoGen / RunCsc
|
||||
|
||||
private void RunProtoGen(int expect, params string[] args)
|
||||
{
|
||||
TextWriter tout = Console.Out, terr = Console.Error;
|
||||
StringWriter temp = new StringWriter();
|
||||
Console.SetOut(temp);
|
||||
Console.SetError(temp);
|
||||
try
|
||||
{
|
||||
Assert.AreEqual(expect, ProgramPreprocess.Run(args), "ProtoGen Failed: {0}", temp);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console.SetOut(tout);
|
||||
Console.SetError(terr);
|
||||
}
|
||||
}
|
||||
|
||||
private Assembly RunCsc(int expect, params string[] sources)
|
||||
{
|
||||
using (TempFile tempDll = new TempFile(String.Empty))
|
||||
{
|
||||
tempDll.ChangeExtension(".dll");
|
||||
List<string> args = new List<string>();
|
||||
args.Add("/nologo");
|
||||
args.Add("/target:library");
|
||||
args.Add("/debug-");
|
||||
args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath));
|
||||
args.Add("/r:System.dll");
|
||||
args.Add(String.Format(@"""/r:{0}""",
|
||||
typeof(Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.
|
||||
Location));
|
||||
args.AddRange(sources);
|
||||
|
||||
string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),
|
||||
"csc.exe");
|
||||
ProcessStartInfo psi = new ProcessStartInfo(exe);
|
||||
psi.CreateNoWindow = true;
|
||||
psi.UseShellExecute = false;
|
||||
psi.RedirectStandardOutput = true;
|
||||
psi.RedirectStandardError = true;
|
||||
psi.Arguments = string.Join(" ", args.ToArray());
|
||||
Process p = Process.Start(psi);
|
||||
p.WaitForExit();
|
||||
string errorText = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();
|
||||
Assert.AreEqual(expect, p.ExitCode, "CSC.exe Failed: {0}", errorText);
|
||||
|
||||
Assembly asm = null;
|
||||
if (p.ExitCode == 0)
|
||||
{
|
||||
byte[] allbytes = File.ReadAllBytes(tempDll.TempPath);
|
||||
asm = Assembly.Load(allbytes);
|
||||
|
||||
foreach (Type t in asm.GetTypes())
|
||||
{
|
||||
Debug.WriteLine(t.FullName, asm.FullName);
|
||||
}
|
||||
}
|
||||
return asm;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// *******************************************************************
|
||||
// The following tests excercise options for protogen.exe
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestProtoFile()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithConflictingType()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message " +
|
||||
test + @" {
|
||||
optional string name = 1;
|
||||
} "))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test, true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-namespace:MyNewNamespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithUmbrellaClassName()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.MyUmbrellaClassname", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNestedClass()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-nest_classes:true");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithExpandedNsDirectories()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-expand_namespace_directories:true");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNewExtension()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".Generated.cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-file_extension:.Generated.cs");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithUmbrellaNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-umbrella_namespace:MyUmbrella.Namespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "-nest_classes:true", "-umbrella_namespace:MyUmbrella.Namespace");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithExplicitEmptyUmbrellaNamespace()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message " +
|
||||
test + @" {
|
||||
optional string name = 1;
|
||||
} "))
|
||||
{
|
||||
//Forces the umbrella class to not use a namespace even if a collision with a type is detected.
|
||||
RunProtoGen(0, proto.TempPath, "-umbrella_namespace:");
|
||||
//error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed
|
||||
RunCsc(1, source.TempPath);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithNewOutputFolder()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
RunProtoGen(1, proto.TempPath, "-output_directory:generated-code");
|
||||
Directory.CreateDirectory("generated-code");
|
||||
RunProtoGen(0, proto.TempPath, "-output_directory:generated-code");
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileAndIgnoreGoogleProtobuf()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
" +
|
||||
DefaultProto))
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithoutIgnoreGoogleProtobuf()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
" +
|
||||
DefaultProto))
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
//Without the option this fails due to being unable to resolve google/protobuf descriptors
|
||||
RunProtoGen(1, proto.TempPath, "-ignore_google_protobuf:false");
|
||||
}
|
||||
}
|
||||
|
||||
// *******************************************************************
|
||||
// The following tests excercise options for protoc.exe
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithIncludeImports()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
} ")
|
||||
)
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
//if you specify the protoc option --include_imports this should build three source files
|
||||
RunProtoGen(0, proto.TempPath, "--include_imports");
|
||||
Assert.AreEqual(3, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
//you can (and should) simply omit the inclusion of the extra source files in your project
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithIncludeImportsAndIgnoreGoogleProtobuf()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
} ")
|
||||
)
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
|
||||
Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
//Even with --include_imports, if you provide -ignore_google_protobuf:true you only get the one source file
|
||||
RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "--include_imports");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
//you can (and should) simply omit the inclusion of the extra source files in your project
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("MyNewNamespace." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileKeepingTheProtoBuffer()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile protobuf = TempFile.Attach(test + ".pb"))
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (
|
||||
ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
} ")
|
||||
)
|
||||
{
|
||||
RunProtoGen(0, proto.TempPath, "--descriptor_set_out=" + protobuf.TempPath);
|
||||
Assert.IsTrue(File.Exists(protobuf.TempPath), "Missing: " + protobuf.TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
//Seems the --proto_path or -I option is non-functional for me. Maybe others have luck?
|
||||
[Test]
|
||||
public void TestProtoFileInDifferentDirectory()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
|
||||
{
|
||||
Environment.CurrentDirectory = OriginalWorkingDirectory;
|
||||
RunProtoGen(0, proto.TempPath, "--proto_path=" + TempPath);
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple." + test, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
// *******************************************************************
|
||||
// Handling of mutliple input files
|
||||
// *******************************************************************
|
||||
|
||||
[Test]
|
||||
public void TestMultipleProtoFiles()
|
||||
{
|
||||
Setup();
|
||||
using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
|
||||
using (
|
||||
ProtoFile proto1 = new ProtoFile("MyMessage.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}")
|
||||
)
|
||||
using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
|
||||
using (
|
||||
ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
import ""MyMessage.proto"";
|
||||
// Test a very simple message.
|
||||
message MyMessageList {
|
||||
repeated MyMessage messages = 1;
|
||||
}")
|
||||
)
|
||||
{
|
||||
RunProtoGen(0, proto1.TempPath, proto2.TempPath);
|
||||
Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto.MyMessage", true, true);
|
||||
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestOneProtoFileWithBufferFile()
|
||||
{
|
||||
Setup();
|
||||
using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
|
||||
using (TempFile protobuf = TempFile.Attach("MyMessage.pb"))
|
||||
using (
|
||||
ProtoFile proto1 = new ProtoFile("MyMessage.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}")
|
||||
)
|
||||
using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
|
||||
using (
|
||||
ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
|
||||
@"
|
||||
package nunit.simple;
|
||||
import ""MyMessage.proto"";
|
||||
// Test a very simple message.
|
||||
message MyMessageList {
|
||||
repeated MyMessage messages = 1;
|
||||
}")
|
||||
)
|
||||
{
|
||||
//build the proto buffer for MyMessage
|
||||
RunProtoGen(0, proto1.TempPath, "--descriptor_set_out=" + protobuf.TempPath);
|
||||
//build the MyMessageList proto-buffer and generate code by including MyMessage.pb
|
||||
RunProtoGen(0, proto2.TempPath, protobuf.TempPath);
|
||||
Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");
|
||||
//assert that the message type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
|
||||
Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");
|
||||
//assert that we can find the static descriptor type
|
||||
a.GetType("nunit.simple.Proto.MyMessage", true, true);
|
||||
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithService()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}
|
||||
// test a very simple service.
|
||||
service TestService {
|
||||
rpc Execute (MyMessage) returns (MyMessage);
|
||||
}"))
|
||||
{
|
||||
CopyInGoogleProtoFiles();
|
||||
|
||||
RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the service type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
||||
Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
||||
Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
||||
//assert that the Stub subclass type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
||||
Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
||||
Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestProtoFileWithServiceInternal()
|
||||
{
|
||||
string test = new StackFrame(false).GetMethod().Name;
|
||||
Setup();
|
||||
using (TempFile source = TempFile.Attach(test + ".cs"))
|
||||
using (ProtoFile proto = new ProtoFile(test + ".proto",
|
||||
@"
|
||||
import ""google/protobuf/csharp_options.proto"";
|
||||
option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
||||
|
||||
package nunit.simple;
|
||||
// Test a very simple message.
|
||||
message MyMessage {
|
||||
optional string name = 1;
|
||||
}
|
||||
// test a very simple service.
|
||||
service TestService {
|
||||
rpc Execute (MyMessage) returns (MyMessage);
|
||||
}"))
|
||||
{
|
||||
CopyInGoogleProtoFiles();
|
||||
|
||||
RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false", "-public_classes=false");
|
||||
Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
||||
|
||||
Assembly a = RunCsc(0, source.TempPath);
|
||||
//assert that the service type is in the expected namespace
|
||||
Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
||||
Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
||||
Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
||||
//assert that the Stub subclass type is in the expected namespace
|
||||
Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
||||
Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
||||
Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
||||
}
|
||||
}
|
||||
|
||||
private static void CopyInGoogleProtoFiles()
|
||||
{
|
||||
string google = Path.Combine(TempPath, "google\\protobuf");
|
||||
Directory.CreateDirectory(google);
|
||||
foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
||||
{
|
||||
File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
<?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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>
|
||||
<AssemblyName>protoc-gen-cs.Test</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="nunit.framework">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ProtocGenCsUnittests.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TempFile.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">
|
||||
<Project>{6908bdce-d925-43f3-94ac-a531e6df2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ProtoGen\protoc-gen-cs.csproj">
|
||||
<Project>{250ade34-82fd-4bae-86d5-985fbe589c4b}</Project>
|
||||
<Name>protoc-gen-cs</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="..\..\lib\protoc.exe">
|
||||
<Link>protoc.exe</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\protos\google\protobuf\csharp_options.proto">
|
||||
<Link>google\protobuf\csharp_options.proto</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\..\protos\google\protobuf\descriptor.proto">
|
||||
<Link>google\protobuf\descriptor.proto</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<StartAction>Program</StartAction>
|
||||
<StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>
|
||||
<StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>
|
||||
<StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,55 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception thrown when dependencies within a descriptor set can't be resolved.
|
||||
/// </summary>
|
||||
public sealed class DependencyResolutionException : Exception
|
||||
{
|
||||
public DependencyResolutionException(string message) : base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public DependencyResolutionException(string format, params object[] args)
|
||||
: base(string.Format(format, args))
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Utility class for determining namespaces etc.
|
||||
/// </summary>
|
||||
internal static class DescriptorUtil
|
||||
{
|
||||
internal static string GetFullUmbrellaClassName(IDescriptor descriptor)
|
||||
{
|
||||
CSharpFileOptions options = descriptor.File.CSharpOptions;
|
||||
string result = options.Namespace;
|
||||
if (result != "")
|
||||
{
|
||||
result += '.';
|
||||
}
|
||||
result += GetQualifiedUmbrellaClassName(options);
|
||||
return "global::" + result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Evaluates the options and returns the qualified name of the umbrella class
|
||||
/// relative to the descriptor type's namespace. Basically concatenates the
|
||||
/// UmbrellaNamespace + UmbrellaClassname fields.
|
||||
/// </summary>
|
||||
internal static string GetQualifiedUmbrellaClassName(CSharpFileOptions options)
|
||||
{
|
||||
string fullName = options.UmbrellaClassname;
|
||||
if (!options.NestClasses && options.UmbrellaNamespace != "")
|
||||
{
|
||||
fullName = String.Format("{0}.{1}", options.UmbrellaNamespace, options.UmbrellaClassname);
|
||||
}
|
||||
return fullName;
|
||||
}
|
||||
|
||||
internal static string GetMappedTypeName(MappedType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MappedType.Int32:
|
||||
return "int";
|
||||
case MappedType.Int64:
|
||||
return "long";
|
||||
case MappedType.UInt32:
|
||||
return "uint";
|
||||
case MappedType.UInt64:
|
||||
return "ulong";
|
||||
case MappedType.Single:
|
||||
return "float";
|
||||
case MappedType.Double:
|
||||
return "double";
|
||||
case MappedType.Boolean:
|
||||
return "bool";
|
||||
case MappedType.String:
|
||||
return "string";
|
||||
case MappedType.ByteString:
|
||||
return "pb::ByteString";
|
||||
case MappedType.Enum:
|
||||
return null;
|
||||
case MappedType.Message:
|
||||
return null;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("Unknown mapped type " + type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class EnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal EnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("private bool has{0};", PropertyName);
|
||||
writer.WriteLine("private {0} {1}_ = {2};", TypeName, Name, DefaultValue);
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}; }}", PropertyName);
|
||||
writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = false;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.Has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" {0} = other.{0};", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
// Nothing to do here for enum types
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("object unknown;");
|
||||
writer.WriteLine("if(input.ReadEnum(ref result.{0}_, out unknown)) {{", Name);
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine("} else if(unknown is int) {");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now
|
||||
writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)unknown);", Number);
|
||||
}
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" output.WriteEnum({0}, field_names[{2}], (int) {1}, {1});", Number, PropertyName,
|
||||
FieldOrdinal);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" size += pb::CodedOutputStream.ComputeEnumSize({0}, (int) {1});", Number, PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",
|
||||
PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class EnumGenerator : SourceGeneratorBase<EnumDescriptor>, ISourceGenerator
|
||||
{
|
||||
internal EnumGenerator(EnumDescriptor descriptor) : base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
// TODO(jonskeet): Write out enum descriptors? Can be retrieved from file...
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} enum {1} {{", ClassAccessLevel, Descriptor.Name);
|
||||
writer.Indent();
|
||||
foreach (EnumValueDescriptor value in Descriptor.Values)
|
||||
{
|
||||
writer.WriteLine("{0} = {1},", value.Name, value.Number);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,183 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class ExtensionGenerator : FieldGeneratorBase, ISourceGenerator
|
||||
{
|
||||
private readonly string extends;
|
||||
private readonly string scope;
|
||||
private readonly string type;
|
||||
private readonly string name;
|
||||
|
||||
internal ExtensionGenerator(FieldDescriptor descriptor)
|
||||
: base(descriptor, 0)
|
||||
{
|
||||
if (Descriptor.ExtensionScope != null)
|
||||
{
|
||||
scope = GetClassName(Descriptor.ExtensionScope);
|
||||
}
|
||||
else
|
||||
{
|
||||
scope = DescriptorUtil.GetFullUmbrellaClassName(Descriptor.File);
|
||||
}
|
||||
switch (Descriptor.MappedType)
|
||||
{
|
||||
case MappedType.Message:
|
||||
type = GetClassName(Descriptor.MessageType);
|
||||
break;
|
||||
case MappedType.Enum:
|
||||
type = GetClassName(Descriptor.EnumType);
|
||||
break;
|
||||
default:
|
||||
type = DescriptorUtil.GetMappedTypeName(Descriptor.MappedType);
|
||||
break;
|
||||
}
|
||||
extends = GetClassName(Descriptor.ContainingType);
|
||||
name = Descriptor.CSharpOptions.PropertyName;
|
||||
}
|
||||
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(Descriptor).StartsWith("_"))
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
|
||||
writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(Descriptor), Descriptor.FieldNumber);
|
||||
|
||||
if (UseLiteRuntime)
|
||||
{
|
||||
if (Descriptor.MappedType == MappedType.Message && Descriptor.MessageType.Options.MessageSetWireFormat)
|
||||
{
|
||||
throw new ArgumentException(
|
||||
"option message_set_wire_format = true; is not supported in Lite runtime extensions.");
|
||||
}
|
||||
if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("{0} static pb::{4}<{1}, {2}> {3};", ClassAccessLevel, extends, type, name,
|
||||
Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite");
|
||||
}
|
||||
else if (Descriptor.IsRepeated)
|
||||
{
|
||||
if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("{0} static pb::GeneratedExtensionBase<scg::IList<{1}>> {2};", ClassAccessLevel, type,
|
||||
name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("{0} static pb::GeneratedExtensionBase<{1}> {2};", ClassAccessLevel, type, name);
|
||||
}
|
||||
}
|
||||
|
||||
internal void GenerateStaticVariableInitializers(TextGenerator writer)
|
||||
{
|
||||
if (UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("{0}.{1} = ", scope, name);
|
||||
writer.Indent();
|
||||
writer.WriteLine("new pb::{0}<{1}, {2}>(",
|
||||
Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite",
|
||||
extends, type);
|
||||
writer.Indent();
|
||||
writer.WriteLine("\"{0}\",", Descriptor.FullName);
|
||||
writer.WriteLine("{0}.DefaultInstance,", extends);
|
||||
if (!Descriptor.IsRepeated)
|
||||
{
|
||||
writer.WriteLine("{0},",
|
||||
Descriptor.HasDefaultValue
|
||||
? DefaultValue
|
||||
: IsNullableType ? "null" : "default(" + type + ")");
|
||||
}
|
||||
writer.WriteLine("{0},",
|
||||
(Descriptor.MappedType == MappedType.Message) ? type + ".DefaultInstance" : "null");
|
||||
writer.WriteLine("{0},",
|
||||
(Descriptor.MappedType == MappedType.Enum) ? "new EnumLiteMap<" + type + ">()" : "null");
|
||||
writer.WriteLine("{0}.{1}FieldNumber,", scope, name);
|
||||
writer.Write("pbd::FieldType.{0}", Descriptor.FieldType);
|
||||
if (Descriptor.IsRepeated)
|
||||
{
|
||||
writer.WriteLine(",");
|
||||
writer.Write(Descriptor.IsPacked ? "true" : "false");
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine(");");
|
||||
writer.Outdent();
|
||||
}
|
||||
else if (Descriptor.IsRepeated)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"{0}.{1} = pb::GeneratedRepeatExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope,
|
||||
name, type, Descriptor.Index);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine(
|
||||
"{0}.{1} = pb::GeneratedSingleExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope,
|
||||
name, type, Descriptor.Index);
|
||||
}
|
||||
}
|
||||
|
||||
internal void GenerateExtensionRegistrationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("registry.Add({0}.{1});", scope, name);
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,389 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Globalization;
|
||||
using System.Text;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal abstract class FieldGeneratorBase : SourceGeneratorBase<FieldDescriptor>
|
||||
{
|
||||
private readonly int _fieldOrdinal;
|
||||
|
||||
protected FieldGeneratorBase(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor)
|
||||
{
|
||||
_fieldOrdinal = fieldOrdinal;
|
||||
}
|
||||
|
||||
public abstract void WriteHash(TextGenerator writer);
|
||||
public abstract void WriteEquals(TextGenerator writer);
|
||||
public abstract void WriteToString(TextGenerator writer);
|
||||
|
||||
public int FieldOrdinal
|
||||
{
|
||||
get { return _fieldOrdinal; }
|
||||
}
|
||||
|
||||
private static bool AllPrintableAscii(string text)
|
||||
{
|
||||
foreach (char c in text)
|
||||
{
|
||||
if (c < 0x20 || c > 0x7e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This returns true if the field has a non-default default value. For instance this returns
|
||||
/// false for numerics with a default of zero '0', or booleans with a default of false.
|
||||
/// </summary>
|
||||
protected bool HasDefaultValue
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.Float:
|
||||
case FieldType.Double:
|
||||
case FieldType.Int32:
|
||||
case FieldType.Int64:
|
||||
case FieldType.SInt32:
|
||||
case FieldType.SInt64:
|
||||
case FieldType.SFixed32:
|
||||
case FieldType.SFixed64:
|
||||
case FieldType.UInt32:
|
||||
case FieldType.UInt64:
|
||||
case FieldType.Fixed32:
|
||||
case FieldType.Fixed64:
|
||||
{
|
||||
IConvertible value = (IConvertible) Descriptor.DefaultValue;
|
||||
return value.ToString(CultureInfo.InvariantCulture) != "0";
|
||||
}
|
||||
case FieldType.Bool:
|
||||
return ((bool) Descriptor.DefaultValue) == true;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks>Copy exists in ExtensionGenerator.cs</remarks>
|
||||
protected string DefaultValue
|
||||
{
|
||||
get
|
||||
{
|
||||
string suffix = "";
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.Float:
|
||||
suffix = "F";
|
||||
break;
|
||||
case FieldType.Double:
|
||||
suffix = "D";
|
||||
break;
|
||||
case FieldType.Int64:
|
||||
suffix = "L";
|
||||
break;
|
||||
case FieldType.UInt64:
|
||||
suffix = "UL";
|
||||
break;
|
||||
}
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.Float:
|
||||
case FieldType.Double:
|
||||
case FieldType.Int32:
|
||||
case FieldType.Int64:
|
||||
case FieldType.SInt32:
|
||||
case FieldType.SInt64:
|
||||
case FieldType.SFixed32:
|
||||
case FieldType.SFixed64:
|
||||
case FieldType.UInt32:
|
||||
case FieldType.UInt64:
|
||||
case FieldType.Fixed32:
|
||||
case FieldType.Fixed64:
|
||||
{
|
||||
// The simple Object.ToString converts using the current culture.
|
||||
// We want to always use the invariant culture so it's predictable.
|
||||
IConvertible value = (IConvertible) Descriptor.DefaultValue;
|
||||
//a few things that must be handled explicitly
|
||||
if (Descriptor.FieldType == FieldType.Double && value is double)
|
||||
{
|
||||
if (double.IsNaN((double) value))
|
||||
{
|
||||
return "double.NaN";
|
||||
}
|
||||
if (double.IsPositiveInfinity((double) value))
|
||||
{
|
||||
return "double.PositiveInfinity";
|
||||
}
|
||||
if (double.IsNegativeInfinity((double) value))
|
||||
{
|
||||
return "double.NegativeInfinity";
|
||||
}
|
||||
}
|
||||
else if (Descriptor.FieldType == FieldType.Float && value is float)
|
||||
{
|
||||
if (float.IsNaN((float) value))
|
||||
{
|
||||
return "float.NaN";
|
||||
}
|
||||
if (float.IsPositiveInfinity((float) value))
|
||||
{
|
||||
return "float.PositiveInfinity";
|
||||
}
|
||||
if (float.IsNegativeInfinity((float) value))
|
||||
{
|
||||
return "float.NegativeInfinity";
|
||||
}
|
||||
}
|
||||
return value.ToString(CultureInfo.InvariantCulture) + suffix;
|
||||
}
|
||||
case FieldType.Bool:
|
||||
return (bool) Descriptor.DefaultValue ? "true" : "false";
|
||||
|
||||
case FieldType.Bytes:
|
||||
if (!Descriptor.HasDefaultValue)
|
||||
{
|
||||
return "pb::ByteString.Empty";
|
||||
}
|
||||
if (UseLiteRuntime && Descriptor.DefaultValue is ByteString)
|
||||
{
|
||||
string temp = (((ByteString) Descriptor.DefaultValue).ToBase64());
|
||||
return String.Format("pb::ByteString.FromBase64(\"{0}\")", temp);
|
||||
}
|
||||
return string.Format("(pb::ByteString) {0}.Descriptor.Fields[{1}].DefaultValue",
|
||||
GetClassName(Descriptor.ContainingType), Descriptor.Index);
|
||||
case FieldType.String:
|
||||
if (AllPrintableAscii(Descriptor.Proto.DefaultValue))
|
||||
{
|
||||
// All chars are ASCII and printable. In this case we only
|
||||
// need to escape quotes and backslashes.
|
||||
return "\"" + Descriptor.Proto.DefaultValue
|
||||
.Replace("\\", "\\\\")
|
||||
.Replace("'", "\\'")
|
||||
.Replace("\"", "\\\"")
|
||||
+ "\"";
|
||||
}
|
||||
if (UseLiteRuntime && Descriptor.DefaultValue is String)
|
||||
{
|
||||
string temp = Convert.ToBase64String(
|
||||
Encoding.UTF8.GetBytes((String) Descriptor.DefaultValue));
|
||||
return String.Format("pb::ByteString.FromBase64(\"{0}\").ToStringUtf8()", temp);
|
||||
}
|
||||
return string.Format("(string) {0}.Descriptor.Fields[{1}].DefaultValue",
|
||||
GetClassName(Descriptor.ContainingType), Descriptor.Index);
|
||||
case FieldType.Enum:
|
||||
return TypeName + "." + ((EnumValueDescriptor) Descriptor.DefaultValue).Name;
|
||||
case FieldType.Message:
|
||||
case FieldType.Group:
|
||||
return TypeName + ".DefaultInstance";
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid field descriptor type");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected string PropertyName
|
||||
{
|
||||
get { return Descriptor.CSharpOptions.PropertyName; }
|
||||
}
|
||||
|
||||
protected string Name
|
||||
{
|
||||
get { return NameHelpers.UnderscoresToCamelCase(GetFieldName(Descriptor)); }
|
||||
}
|
||||
|
||||
protected int Number
|
||||
{
|
||||
get { return Descriptor.FieldNumber; }
|
||||
}
|
||||
|
||||
protected void AddNullCheck(TextGenerator writer)
|
||||
{
|
||||
AddNullCheck(writer, "value");
|
||||
}
|
||||
|
||||
protected void AddNullCheck(TextGenerator writer, string name)
|
||||
{
|
||||
if (IsNullableType)
|
||||
{
|
||||
writer.WriteLine(" pb::ThrowHelper.ThrowIfNull({0}, \"{0}\");", name);
|
||||
}
|
||||
}
|
||||
|
||||
protected void AddPublicMemberAttributes(TextGenerator writer)
|
||||
{
|
||||
AddDeprecatedFlag(writer);
|
||||
AddClsComplianceCheck(writer);
|
||||
}
|
||||
|
||||
protected void AddClsComplianceCheck(TextGenerator writer)
|
||||
{
|
||||
if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
}
|
||||
|
||||
protected bool IsObsolete { get { return Descriptor.Options.Deprecated; } }
|
||||
|
||||
/// <summary>
|
||||
/// Writes [global::System.ObsoleteAttribute()] if the member is obsolete
|
||||
/// </summary>
|
||||
protected void AddDeprecatedFlag(TextGenerator writer)
|
||||
{
|
||||
if (IsObsolete)
|
||||
{
|
||||
writer.WriteLine("[global::System.ObsoleteAttribute()]");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For encodings with fixed sizes, returns that size in bytes. Otherwise
|
||||
/// returns -1. TODO(jonskeet): Make this less ugly.
|
||||
/// </summary>
|
||||
protected int FixedSize
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.UInt32:
|
||||
case FieldType.UInt64:
|
||||
case FieldType.Int32:
|
||||
case FieldType.Int64:
|
||||
case FieldType.SInt32:
|
||||
case FieldType.SInt64:
|
||||
case FieldType.Enum:
|
||||
case FieldType.Bytes:
|
||||
case FieldType.String:
|
||||
case FieldType.Message:
|
||||
case FieldType.Group:
|
||||
return -1;
|
||||
case FieldType.Float:
|
||||
return WireFormat.FloatSize;
|
||||
case FieldType.SFixed32:
|
||||
return WireFormat.SFixed32Size;
|
||||
case FieldType.Fixed32:
|
||||
return WireFormat.Fixed32Size;
|
||||
case FieldType.Double:
|
||||
return WireFormat.DoubleSize;
|
||||
case FieldType.SFixed64:
|
||||
return WireFormat.SFixed64Size;
|
||||
case FieldType.Fixed64:
|
||||
return WireFormat.Fixed64Size;
|
||||
case FieldType.Bool:
|
||||
return WireFormat.BoolSize;
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid field descriptor type");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected bool IsNullableType
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.Float:
|
||||
case FieldType.Double:
|
||||
case FieldType.Int32:
|
||||
case FieldType.Int64:
|
||||
case FieldType.SInt32:
|
||||
case FieldType.SInt64:
|
||||
case FieldType.SFixed32:
|
||||
case FieldType.SFixed64:
|
||||
case FieldType.UInt32:
|
||||
case FieldType.UInt64:
|
||||
case FieldType.Fixed32:
|
||||
case FieldType.Fixed64:
|
||||
case FieldType.Bool:
|
||||
case FieldType.Enum:
|
||||
return false;
|
||||
case FieldType.Bytes:
|
||||
case FieldType.String:
|
||||
case FieldType.Message:
|
||||
case FieldType.Group:
|
||||
return true;
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid field descriptor type");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected string TypeName
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Descriptor.FieldType)
|
||||
{
|
||||
case FieldType.Enum:
|
||||
return GetClassName(Descriptor.EnumType);
|
||||
case FieldType.Message:
|
||||
case FieldType.Group:
|
||||
return GetClassName(Descriptor.MessageType);
|
||||
default:
|
||||
return DescriptorUtil.GetMappedTypeName(Descriptor.MappedType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected string MessageOrGroup
|
||||
{
|
||||
get { return Descriptor.FieldType == FieldType.Group ? "Group" : "Message"; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the type name as used in CodedInputStream method names: SFixed32, UInt32 etc.
|
||||
/// </summary>
|
||||
protected string CapitalizedTypeName
|
||||
{
|
||||
get
|
||||
{
|
||||
// Our enum names match perfectly. How serendipitous.
|
||||
return Descriptor.FieldType.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,267 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Google.ProtocolBuffers.Collections;
|
||||
using Google.ProtocolBuffers.Compiler.PluginProto;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Code generator for protocol buffers. Only C# is supported at the moment.
|
||||
/// </summary>
|
||||
public sealed class Generator
|
||||
{
|
||||
private readonly GeneratorOptions options;
|
||||
|
||||
private Generator(GeneratorOptions options)
|
||||
{
|
||||
options.Validate();
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a generator configured with the specified options.
|
||||
/// </summary>
|
||||
public static Generator CreateGenerator(GeneratorOptions options)
|
||||
{
|
||||
return new Generator(options);
|
||||
}
|
||||
|
||||
public void Generate(CodeGeneratorRequest request, CodeGeneratorResponse.Builder response)
|
||||
{
|
||||
IList<FileDescriptor> descriptors = ConvertDescriptors(options.FileOptions, request.ProtoFileList);
|
||||
|
||||
// Combine with options from command line
|
||||
foreach (FileDescriptor descriptor in descriptors)
|
||||
{
|
||||
descriptor.ConfigureWithDefaultOptions(options.FileOptions);
|
||||
}
|
||||
|
||||
bool duplicates = false;
|
||||
Dictionary<string, bool> names = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (FileDescriptor descriptor in descriptors)
|
||||
{
|
||||
string file = GetOutputFile(descriptor, false);
|
||||
if (names.ContainsKey(file))
|
||||
{
|
||||
duplicates = true;
|
||||
break;
|
||||
}
|
||||
names.Add(file, true);
|
||||
}
|
||||
|
||||
//ROK - Changed to dictionary from HashSet to allow 2.0 compile
|
||||
var filesToGenerate = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var item in request.FileToGenerateList)
|
||||
{
|
||||
filesToGenerate[item] = null;
|
||||
}
|
||||
foreach (FileDescriptor descriptor in descriptors)
|
||||
{
|
||||
// Optionally exclude descriptors in google.protobuf
|
||||
if (descriptor.CSharpOptions.IgnoreGoogleProtobuf && descriptor.Package == "google.protobuf")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (filesToGenerate.ContainsKey(descriptor.Name))
|
||||
{
|
||||
Generate(descriptor, duplicates, response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates code for a particular file. All dependencies must
|
||||
/// already have been resolved.
|
||||
/// </summary>
|
||||
private void Generate(FileDescriptor descriptor, bool duplicates, CodeGeneratorResponse.Builder response)
|
||||
{
|
||||
var code = new StringBuilder();
|
||||
var ucg = new UmbrellaClassGenerator(descriptor);
|
||||
using (StringWriter textWriter = new StringWriter(code))
|
||||
{
|
||||
TextGenerator writer = new TextGenerator(textWriter, options.LineBreak);
|
||||
ucg.Generate(writer);
|
||||
}
|
||||
response.AddFile(new CodeGeneratorResponse.Types.File.Builder
|
||||
{
|
||||
Name = GetOutputFile(descriptor, duplicates),
|
||||
Content = code.ToString(),
|
||||
}.Build());
|
||||
}
|
||||
|
||||
private string GetOutputFile(FileDescriptor descriptor, bool duplicates)
|
||||
{
|
||||
CSharpFileOptions fileOptions = descriptor.CSharpOptions;
|
||||
|
||||
string filename = descriptor.CSharpOptions.UmbrellaClassname + descriptor.CSharpOptions.FileExtension;
|
||||
if (duplicates)
|
||||
{
|
||||
string namepart;
|
||||
if (String.IsNullOrEmpty(descriptor.Name) || String.IsNullOrEmpty(namepart = Path.GetFileNameWithoutExtension(descriptor.Name)))
|
||||
throw new ApplicationException("Duplicate UmbrellaClassname options created a file name collision.");
|
||||
|
||||
filename = namepart + descriptor.CSharpOptions.FileExtension;
|
||||
}
|
||||
|
||||
string outputDirectory = descriptor.CSharpOptions.OutputDirectory;
|
||||
if (fileOptions.ExpandNamespaceDirectories)
|
||||
{
|
||||
string package = fileOptions.Namespace;
|
||||
if (!string.IsNullOrEmpty(package))
|
||||
{
|
||||
string[] bits = package.Split('.');
|
||||
foreach (string bit in bits)
|
||||
{
|
||||
outputDirectory = Path.Combine(outputDirectory, bit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// As the directory can be explicitly specified in options, we need to make sure it exists
|
||||
Directory.CreateDirectory(outputDirectory);
|
||||
return Path.Combine(outputDirectory, filename);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolves any dependencies and converts FileDescriptorProtos into FileDescriptors.
|
||||
/// The list returned is in the same order as the protos are listed in the descriptor set.
|
||||
/// Note: this method is internal rather than private to allow testing.
|
||||
/// </summary>
|
||||
/// <exception cref="DependencyResolutionException">Not all dependencies could be resolved.</exception>
|
||||
public static IList<FileDescriptor> ConvertDescriptors(CSharpFileOptions options,
|
||||
IList<FileDescriptorProto> fileList)
|
||||
{
|
||||
FileDescriptor[] converted = new FileDescriptor[fileList.Count];
|
||||
|
||||
Dictionary<string, FileDescriptor> convertedMap = new Dictionary<string, FileDescriptor>();
|
||||
|
||||
int totalConverted = 0;
|
||||
|
||||
bool madeProgress = true;
|
||||
while (madeProgress && totalConverted < converted.Length)
|
||||
{
|
||||
madeProgress = false;
|
||||
for (int i = 0; i < converted.Length; i++)
|
||||
{
|
||||
if (converted[i] != null)
|
||||
{
|
||||
// Already done this one
|
||||
continue;
|
||||
}
|
||||
FileDescriptorProto candidate = fileList[i];
|
||||
FileDescriptor[] dependencies = new FileDescriptor[candidate.DependencyList.Count];
|
||||
|
||||
|
||||
CSharpFileOptions.Builder builder = options.ToBuilder();
|
||||
if (candidate.Options.HasExtension(CSharpOptions.CSharpFileOptions))
|
||||
{
|
||||
builder.MergeFrom(
|
||||
candidate.Options.GetExtension(CSharpOptions.CSharpFileOptions));
|
||||
}
|
||||
CSharpFileOptions localOptions = builder.Build();
|
||||
|
||||
bool foundAllDependencies = true;
|
||||
for (int j = 0; j < dependencies.Length; j++)
|
||||
{
|
||||
if (!convertedMap.TryGetValue(candidate.DependencyList[j], out dependencies[j]))
|
||||
{
|
||||
// We can auto-magically resolve these since we already have their description
|
||||
// This way if the file is only referencing options it does not need to be built with the
|
||||
// --include_imports definition.
|
||||
if (localOptions.IgnoreGoogleProtobuf &&
|
||||
(candidate.DependencyList[j] == "google/protobuf/csharp_options.proto"))
|
||||
{
|
||||
dependencies[j] = CSharpOptions.Descriptor;
|
||||
continue;
|
||||
}
|
||||
if (localOptions.IgnoreGoogleProtobuf &&
|
||||
(candidate.DependencyList[j] == "google/protobuf/descriptor.proto"))
|
||||
{
|
||||
dependencies[j] = DescriptorProtoFile.Descriptor;
|
||||
continue;
|
||||
}
|
||||
foundAllDependencies = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!foundAllDependencies)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
madeProgress = true;
|
||||
totalConverted++;
|
||||
converted[i] = FileDescriptor.BuildFrom(candidate, dependencies);
|
||||
convertedMap[candidate.Name] = converted[i];
|
||||
}
|
||||
}
|
||||
if (!madeProgress)
|
||||
{
|
||||
StringBuilder remaining = new StringBuilder();
|
||||
for (int i = 0; i < converted.Length; i++)
|
||||
{
|
||||
if (converted[i] == null)
|
||||
{
|
||||
if (remaining.Length != 0)
|
||||
{
|
||||
remaining.Append(", ");
|
||||
}
|
||||
FileDescriptorProto failure = fileList[i];
|
||||
remaining.Append(failure.Name);
|
||||
remaining.Append(":");
|
||||
foreach (string dependency in failure.DependencyList)
|
||||
{
|
||||
if (!convertedMap.ContainsKey(dependency))
|
||||
{
|
||||
remaining.Append(" ");
|
||||
remaining.Append(dependency);
|
||||
}
|
||||
}
|
||||
remaining.Append(";");
|
||||
}
|
||||
}
|
||||
throw new DependencyResolutionException("Unable to resolve all dependencies: " + remaining);
|
||||
}
|
||||
return Lists.AsReadOnly(converted);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,330 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// All the configuration required for the generator - where to generate
|
||||
/// output files, the location of input files etc. While this isn't immutable
|
||||
/// in practice, the contents shouldn't be changed after being passed to
|
||||
/// the generator.
|
||||
/// </summary>
|
||||
public sealed class GeneratorOptions
|
||||
{
|
||||
private static Dictionary<string, string> LineBreaks =
|
||||
new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
|
||||
{
|
||||
{"Windows", "\r\n"},
|
||||
{"Unix", "\n"},
|
||||
{"Default", Environment.NewLine}
|
||||
};
|
||||
|
||||
public IList<string> InputFiles { get; set; }
|
||||
|
||||
public GeneratorOptions()
|
||||
{
|
||||
LineBreak = Environment.NewLine;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to validate the options, but doesn't throw an exception if they're invalid.
|
||||
/// Instead, when this method returns false, the output variable will contain a collection
|
||||
/// of reasons for the validation failure.
|
||||
/// </summary>
|
||||
/// <param name="reasons">Variable to receive a list of reasons in case of validation failure.</param>
|
||||
/// <returns>true if the options are valid; false otherwise</returns>
|
||||
public bool TryValidate(out IList<string> reasons)
|
||||
{
|
||||
List<string> tmpReasons = new List<string>();
|
||||
|
||||
ParseArguments(tmpReasons);
|
||||
|
||||
// Output directory validation
|
||||
if (string.IsNullOrEmpty(FileOptions.OutputDirectory))
|
||||
{
|
||||
tmpReasons.Add("No output directory specified");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Directory.Exists(FileOptions.OutputDirectory))
|
||||
{
|
||||
tmpReasons.Add("Specified output directory (" + FileOptions.OutputDirectory + " doesn't exist.");
|
||||
}
|
||||
}
|
||||
|
||||
// Input file validation (just in terms of presence)
|
||||
if (InputFiles == null || InputFiles.Count == 0)
|
||||
{
|
||||
tmpReasons.Add("No input files specified");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (string input in InputFiles)
|
||||
{
|
||||
FileInfo fi = new FileInfo(input);
|
||||
if (!fi.Exists)
|
||||
{
|
||||
tmpReasons.Add("Input file " + input + " doesn't exist.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tmpReasons.Count != 0)
|
||||
{
|
||||
reasons = tmpReasons;
|
||||
return false;
|
||||
}
|
||||
|
||||
reasons = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates that all the options have been set and are valid,
|
||||
/// throwing an exception if they haven't.
|
||||
/// </summary>
|
||||
/// <exception cref="InvalidOptionsException">The options are invalid.</exception>
|
||||
public void Validate()
|
||||
{
|
||||
IList<string> reasons;
|
||||
if (!TryValidate(out reasons))
|
||||
{
|
||||
throw new InvalidOptionsException(reasons);
|
||||
}
|
||||
}
|
||||
|
||||
// Raw arguments, used to provide defaults for proto file options
|
||||
public IList<string> Arguments { get; set; }
|
||||
|
||||
[Obsolete("Please use GeneratorOptions.FileOptions.OutputDirectory instead")]
|
||||
public string OutputDirectory
|
||||
{
|
||||
get { return FileOptions.OutputDirectory; }
|
||||
set
|
||||
{
|
||||
CSharpFileOptions.Builder bld = FileOptions.ToBuilder();
|
||||
bld.OutputDirectory = value;
|
||||
FileOptions = bld.Build();
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly Regex ArgMatch = new Regex(@"^[-/](?<name>[\w_]+?)[:=](?<value>.*)$");
|
||||
private CSharpFileOptions fileOptions;
|
||||
|
||||
public CSharpFileOptions FileOptions
|
||||
{
|
||||
get { return fileOptions ?? (fileOptions = CSharpFileOptions.DefaultInstance); }
|
||||
set { fileOptions = value; }
|
||||
}
|
||||
|
||||
public string LineBreak { get; set; }
|
||||
|
||||
private void ParseArguments(IList<string> tmpReasons)
|
||||
{
|
||||
bool doHelp = Arguments.Count == 0;
|
||||
|
||||
InputFiles = new List<string>();
|
||||
CSharpFileOptions.Builder builder = FileOptions.ToBuilder();
|
||||
Dictionary<string, FieldDescriptor> fields =
|
||||
new Dictionary<string, FieldDescriptor>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (FieldDescriptor fld in builder.DescriptorForType.Fields)
|
||||
{
|
||||
fields.Add(fld.Name, fld);
|
||||
}
|
||||
|
||||
foreach (string argument in Arguments)
|
||||
{
|
||||
if (StringComparer.OrdinalIgnoreCase.Equals("-help", argument) ||
|
||||
StringComparer.OrdinalIgnoreCase.Equals("/help", argument) ||
|
||||
StringComparer.OrdinalIgnoreCase.Equals("-?", argument) ||
|
||||
StringComparer.OrdinalIgnoreCase.Equals("/?", argument))
|
||||
{
|
||||
doHelp = true;
|
||||
break;
|
||||
}
|
||||
|
||||
Match m = ArgMatch.Match(argument);
|
||||
if (m.Success)
|
||||
{
|
||||
FieldDescriptor fld;
|
||||
string name = m.Groups["name"].Value;
|
||||
string value = m.Groups["value"].Value;
|
||||
|
||||
if (fields.TryGetValue(name, out fld))
|
||||
{
|
||||
object obj;
|
||||
if (TryCoerceType(value, fld, out obj, tmpReasons))
|
||||
{
|
||||
builder[fld] = obj;
|
||||
}
|
||||
}
|
||||
else if (name == "line_break")
|
||||
{
|
||||
string tmp;
|
||||
if (LineBreaks.TryGetValue(value, out tmp))
|
||||
{
|
||||
LineBreak = tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpReasons.Add("Invalid value for 'line_break': " + value + ".");
|
||||
}
|
||||
}
|
||||
else if (!File.Exists(argument))
|
||||
{
|
||||
doHelp = true;
|
||||
tmpReasons.Add("Unknown argument '" + name + "'.");
|
||||
}
|
||||
else
|
||||
{
|
||||
InputFiles.Add(argument);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
InputFiles.Add(argument);
|
||||
}
|
||||
}
|
||||
|
||||
if (doHelp || InputFiles.Count == 0)
|
||||
{
|
||||
tmpReasons.Add("Arguments:");
|
||||
foreach (KeyValuePair<string, FieldDescriptor> field in fields)
|
||||
{
|
||||
tmpReasons.Add(String.Format("-{0}=[{1}]", field.Key, field.Value.FieldType));
|
||||
}
|
||||
tmpReasons.Add("-line_break=[" + string.Join("|", new List<string>(LineBreaks.Keys).ToArray()) + "]");
|
||||
tmpReasons.Add("followed by one or more file paths.");
|
||||
}
|
||||
else
|
||||
{
|
||||
FileOptions = builder.Build();
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryCoerceType(string text, FieldDescriptor field, out object value, IList<string> tmpReasons)
|
||||
{
|
||||
value = null;
|
||||
|
||||
switch (field.FieldType)
|
||||
{
|
||||
case FieldType.Int32:
|
||||
case FieldType.SInt32:
|
||||
case FieldType.SFixed32:
|
||||
value = Int32.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.Int64:
|
||||
case FieldType.SInt64:
|
||||
case FieldType.SFixed64:
|
||||
value = Int64.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.UInt32:
|
||||
case FieldType.Fixed32:
|
||||
value = UInt32.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.UInt64:
|
||||
case FieldType.Fixed64:
|
||||
value = UInt64.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.Float:
|
||||
value = float.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.Double:
|
||||
value = Double.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.Bool:
|
||||
value = Boolean.Parse(text);
|
||||
break;
|
||||
|
||||
case FieldType.String:
|
||||
value = text;
|
||||
break;
|
||||
|
||||
case FieldType.Enum:
|
||||
{
|
||||
EnumDescriptor enumType = field.EnumType;
|
||||
|
||||
int number;
|
||||
if (int.TryParse(text, out number))
|
||||
{
|
||||
value = enumType.FindValueByNumber(number);
|
||||
if (value == null)
|
||||
{
|
||||
tmpReasons.Add(
|
||||
"Enum type \"" + enumType.FullName +
|
||||
"\" has no value with number " + number + ".");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
value = enumType.FindValueByName(text);
|
||||
if (value == null)
|
||||
{
|
||||
tmpReasons.Add(
|
||||
"Enum type \"" + enumType.FullName +
|
||||
"\" has no value named \"" + text + "\".");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case FieldType.Bytes:
|
||||
case FieldType.Message:
|
||||
case FieldType.Group:
|
||||
tmpReasons.Add("Unhandled field type " + field.FieldType.ToString() + ".");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Helpers to resolve class names etc.
|
||||
/// </summary>
|
||||
internal static class Helpers
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal interface IFieldSourceGenerator
|
||||
{
|
||||
void GenerateMembers(TextGenerator writer);
|
||||
void GenerateBuilderMembers(TextGenerator writer);
|
||||
void GenerateMergingCode(TextGenerator writer);
|
||||
void GenerateBuildingCode(TextGenerator writer);
|
||||
void GenerateParsingCode(TextGenerator writer);
|
||||
void GenerateSerializationCode(TextGenerator writer);
|
||||
void GenerateSerializedSizeCode(TextGenerator writer);
|
||||
|
||||
void WriteHash(TextGenerator writer);
|
||||
void WriteEquals(TextGenerator writer);
|
||||
void WriteToString(TextGenerator writer);
|
||||
}
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal interface ISourceGenerator
|
||||
{
|
||||
void Generate(TextGenerator writer);
|
||||
}
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using System.Text;
|
||||
using Google.ProtocolBuffers.Collections;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception thrown to indicate that the options passed were invalid.
|
||||
/// </summary>
|
||||
public sealed class InvalidOptionsException : Exception
|
||||
{
|
||||
private readonly IList<string> reasons;
|
||||
|
||||
/// <summary>
|
||||
/// An immutable list of reasons why the options were invalid.
|
||||
/// </summary>
|
||||
public IList<string> Reasons
|
||||
{
|
||||
get { return reasons; }
|
||||
}
|
||||
|
||||
public InvalidOptionsException(IList<string> reasons)
|
||||
: base(BuildMessage(reasons))
|
||||
{
|
||||
this.reasons = Lists.AsReadOnly(reasons);
|
||||
}
|
||||
|
||||
private static string BuildMessage(IEnumerable<string> reasons)
|
||||
{
|
||||
StringBuilder builder = new StringBuilder("Invalid options:");
|
||||
builder.AppendLine();
|
||||
foreach (string reason in reasons)
|
||||
{
|
||||
builder.Append(" ");
|
||||
builder.AppendLine(reason);
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,174 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class MessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal MessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("private bool has{0};", PropertyName);
|
||||
writer.WriteLine("private {0} {1}_;", TypeName, Name);
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_ ?? {1}; }}", Name, DefaultValue);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}; }}", PropertyName);
|
||||
writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Set{0}({1}.Builder builderForValue) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer, "builderForValue");
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = builderForValue.Build();", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Merge{0}({1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" if (result.has{0} &&", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ != {1}) {{", Name, DefaultValue);
|
||||
writer.WriteLine(" result.{0}_ = {1}.CreateBuilder(result.{0}_).MergeFrom(value).BuildPartial();", Name,
|
||||
TypeName);
|
||||
writer.WriteLine(" } else {");
|
||||
writer.WriteLine(" result.{0}_ = value;", Name);
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = false;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = null;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.Has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" Merge{0}(other.{0});", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
// Nothing to do for singular fields
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{0}.Builder subBuilder = {0}.CreateBuilder();", TypeName);
|
||||
writer.WriteLine("if (result.has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" subBuilder.MergeFrom({0});", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
if (Descriptor.FieldType == FieldType.Group)
|
||||
{
|
||||
writer.WriteLine("input.ReadGroup({0}, subBuilder, extensionRegistry);", Number);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("input.ReadMessage(subBuilder, extensionRegistry);");
|
||||
}
|
||||
writer.WriteLine("{0} = subBuilder.BuildPartial();", PropertyName);
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", MessageOrGroup, Number, PropertyName,
|
||||
FieldOrdinal);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});",
|
||||
MessageOrGroup, Number, PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",
|
||||
PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{2}\", has{0}, {1}_, writer);", PropertyName, Name,
|
||||
Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,893 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class MessageGenerator : SourceGeneratorBase<MessageDescriptor>, ISourceGenerator
|
||||
{
|
||||
private string[] _fieldNames;
|
||||
|
||||
internal MessageGenerator(MessageDescriptor descriptor) : base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
private string ClassName
|
||||
{
|
||||
get { return Descriptor.Name; }
|
||||
}
|
||||
|
||||
private string FullClassName
|
||||
{
|
||||
get { return GetClassName(Descriptor); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get an identifier that uniquely identifies this type within the file.
|
||||
/// This is used to declare static variables related to this type at the
|
||||
/// outermost file scope.
|
||||
/// </summary>
|
||||
private static string GetUniqueFileScopeIdentifier(IDescriptor descriptor)
|
||||
{
|
||||
return "static_" + descriptor.FullName.Replace(".", "_");
|
||||
}
|
||||
|
||||
internal void GenerateStaticVariables(TextGenerator writer)
|
||||
{
|
||||
// Because descriptor.proto (Google.ProtocolBuffers.DescriptorProtos) is
|
||||
// used in the construction of descriptors, we have a tricky bootstrapping
|
||||
// problem. To help control static initialization order, we make sure all
|
||||
// descriptors and other static data that depends on them are members of
|
||||
// the proto-descriptor class. This way, they will be initialized in
|
||||
// a deterministic order.
|
||||
|
||||
string identifier = GetUniqueFileScopeIdentifier(Descriptor);
|
||||
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
// The descriptor for this type.
|
||||
string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal";
|
||||
writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier);
|
||||
writer.WriteLine(
|
||||
"{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;",
|
||||
access, FullClassName, identifier);
|
||||
}
|
||||
// Generate static members for all nested types.
|
||||
foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)
|
||||
{
|
||||
new MessageGenerator(nestedMessage).GenerateStaticVariables(writer);
|
||||
}
|
||||
}
|
||||
|
||||
internal void GenerateStaticVariableInitializers(TextGenerator writer)
|
||||
{
|
||||
string identifier = GetUniqueFileScopeIdentifier(Descriptor);
|
||||
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.Write("internal__{0}__Descriptor = ", identifier);
|
||||
if (Descriptor.ContainingType == null)
|
||||
{
|
||||
writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];",
|
||||
GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index);
|
||||
}
|
||||
|
||||
writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier);
|
||||
writer.WriteLine(
|
||||
" new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,",
|
||||
identifier, FullClassName);
|
||||
writer.Print(" new string[] { ");
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName);
|
||||
}
|
||||
writer.WriteLine("});");
|
||||
}
|
||||
|
||||
// Generate static member initializers for all nested types.
|
||||
foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)
|
||||
{
|
||||
new MessageGenerator(nestedMessage).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
|
||||
foreach (FieldDescriptor extension in Descriptor.Extensions)
|
||||
{
|
||||
new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
}
|
||||
|
||||
public string[] FieldNames
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_fieldNames == null)
|
||||
{
|
||||
List<string> names = new List<string>();
|
||||
foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)
|
||||
{
|
||||
names.Add(fieldDescriptor.Name);
|
||||
}
|
||||
//if you change this, the search must also change in GenerateBuilderParsingMethods
|
||||
names.Sort(StringComparer.Ordinal);
|
||||
_fieldNames = names.ToArray();
|
||||
}
|
||||
return _fieldNames;
|
||||
}
|
||||
}
|
||||
|
||||
internal int FieldOrdinal(FieldDescriptor field)
|
||||
{
|
||||
return Array.BinarySearch(FieldNames, field.Name, StringComparer.Ordinal);
|
||||
}
|
||||
|
||||
private IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor fieldDescriptor)
|
||||
{
|
||||
return SourceGenerators.CreateFieldGenerator(fieldDescriptor, FieldOrdinal(fieldDescriptor));
|
||||
}
|
||||
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.AddSerializable)
|
||||
{
|
||||
writer.WriteLine("[global::System.SerializableAttribute()]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message{3}<{1}, {1}.Builder> {{",
|
||||
ClassAccessLevel, ClassName,
|
||||
Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated",
|
||||
RuntimeSuffix);
|
||||
writer.Indent();
|
||||
if (Descriptor.File.CSharpOptions.GeneratePrivateCtor)
|
||||
{
|
||||
writer.WriteLine("private {0}() {{ }}", ClassName);
|
||||
}
|
||||
// Must call MakeReadOnly() to make sure all lists are made read-only
|
||||
writer.WriteLine("private static readonly {0} defaultInstance = new {0}().MakeReadOnly();", ClassName);
|
||||
|
||||
if (OptimizeSpeed)
|
||||
{
|
||||
writer.WriteLine("private static readonly string[] _{0}FieldNames = new string[] {{ {2}{1}{2} }};",
|
||||
NameHelpers.UnderscoresToCamelCase(ClassName), String.Join("\", \"", FieldNames),
|
||||
FieldNames.Length > 0 ? "\"" : "");
|
||||
List<string> tags = new List<string>();
|
||||
foreach (string name in FieldNames)
|
||||
{
|
||||
tags.Add(WireFormat.MakeTag(Descriptor.FindFieldByName(name)).ToString());
|
||||
}
|
||||
|
||||
writer.WriteLine("private static readonly uint[] _{0}FieldTags = new uint[] {{ {1} }};",
|
||||
NameHelpers.UnderscoresToCamelCase(ClassName), String.Join(", ", tags.ToArray()));
|
||||
}
|
||||
writer.WriteLine("public static {0} DefaultInstance {{", ClassName);
|
||||
writer.WriteLine(" get { return defaultInstance; }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName);
|
||||
writer.WriteLine(" get { return DefaultInstance; }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("protected override {0} ThisMessage {{", ClassName);
|
||||
writer.WriteLine(" get { return this; }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("public static pbd::MessageDescriptor Descriptor {");
|
||||
writer.WriteLine(" get {{ return {0}.internal__{1}__Descriptor; }}",
|
||||
DescriptorUtil.GetFullUmbrellaClassName(Descriptor),
|
||||
GetUniqueFileScopeIdentifier(Descriptor));
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine(
|
||||
"protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" get {{ return {0}.internal__{1}__FieldAccessorTable; }}",
|
||||
DescriptorUtil.GetFullUmbrellaClassName(Descriptor),
|
||||
GetUniqueFileScopeIdentifier(Descriptor));
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
// Extensions don't need to go in an extra nested type
|
||||
WriteChildren(writer, null, Descriptor.Extensions);
|
||||
|
||||
if (Descriptor.EnumTypes.Count + Descriptor.NestedTypes.Count > 0)
|
||||
{
|
||||
writer.WriteLine("#region Nested types");
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("public static partial class Types {");
|
||||
writer.Indent();
|
||||
WriteChildren(writer, null, Descriptor.EnumTypes);
|
||||
WriteChildren(writer, null, Descriptor.NestedTypes);
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("#endregion");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(fieldDescriptor).StartsWith("_"))
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
|
||||
// Rats: we lose the debug comment here :(
|
||||
writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(fieldDescriptor),
|
||||
fieldDescriptor.FieldNumber);
|
||||
CreateFieldGenerator(fieldDescriptor).GenerateMembers(writer);
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
if (OptimizeSpeed)
|
||||
{
|
||||
GenerateIsInitialized(writer);
|
||||
GenerateMessageSerializationMethods(writer);
|
||||
}
|
||||
if (UseLiteRuntime)
|
||||
{
|
||||
GenerateLiteRuntimeMethods(writer);
|
||||
}
|
||||
|
||||
GenerateParseFromMethods(writer);
|
||||
GenerateBuilder(writer);
|
||||
|
||||
// Force the static initialization code for the file to run, since it may
|
||||
// initialize static variables declared in this class.
|
||||
writer.WriteLine("static {0}() {{", ClassName);
|
||||
// We call object.ReferenceEquals() just to make it a valid statement on its own.
|
||||
// Another option would be GetType(), but that causes problems in DescriptorProtoFile,
|
||||
// where the bootstrapping is somewhat recursive - type initializers call
|
||||
// each other, effectively. We temporarily see Descriptor as null.
|
||||
writer.WriteLine(" object.ReferenceEquals({0}.Descriptor, null);",
|
||||
DescriptorUtil.GetFullUmbrellaClassName(Descriptor));
|
||||
writer.WriteLine("}");
|
||||
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void GenerateLiteRuntimeMethods(TextGenerator writer)
|
||||
{
|
||||
bool callbase = Descriptor.Proto.ExtensionRangeCount > 0;
|
||||
writer.WriteLine("#region Lite runtime methods");
|
||||
writer.WriteLine("public override int GetHashCode() {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("int hash = GetType().GetHashCode();");
|
||||
foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)
|
||||
{
|
||||
CreateFieldGenerator(fieldDescriptor).WriteHash(writer);
|
||||
}
|
||||
if (callbase)
|
||||
{
|
||||
writer.WriteLine("hash ^= base.GetHashCode();");
|
||||
}
|
||||
writer.WriteLine("return hash;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public override bool Equals(object obj) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("{0} other = obj as {0};", ClassName);
|
||||
writer.WriteLine("if (other == null) return false;");
|
||||
foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)
|
||||
{
|
||||
CreateFieldGenerator(fieldDescriptor).WriteEquals(writer);
|
||||
}
|
||||
if (callbase)
|
||||
{
|
||||
writer.WriteLine("if (!base.Equals(other)) return false;");
|
||||
}
|
||||
writer.WriteLine("return true;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public override void PrintTo(global::System.IO.TextWriter writer) {");
|
||||
writer.Indent();
|
||||
List<FieldDescriptor> sorted = new List<FieldDescriptor>(Descriptor.Fields);
|
||||
sorted.Sort(
|
||||
new Comparison<FieldDescriptor>(
|
||||
delegate(FieldDescriptor a, FieldDescriptor b) { return a.FieldNumber.CompareTo(b.FieldNumber); }));
|
||||
foreach (FieldDescriptor fieldDescriptor in sorted)
|
||||
{
|
||||
CreateFieldGenerator(fieldDescriptor).WriteToString(writer);
|
||||
}
|
||||
if (callbase)
|
||||
{
|
||||
writer.WriteLine("base.PrintTo(writer);");
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("#endregion");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void GenerateMessageSerializationMethods(TextGenerator writer)
|
||||
{
|
||||
List<FieldDescriptor> sortedFields = new List<FieldDescriptor>(Descriptor.Fields);
|
||||
sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber));
|
||||
|
||||
List<DescriptorProto.Types.ExtensionRange> sortedExtensions =
|
||||
new List<DescriptorProto.Types.ExtensionRange>(Descriptor.Proto.ExtensionRangeList);
|
||||
sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start)));
|
||||
|
||||
writer.WriteLine("public override void WriteTo(pb::ICodedOutputStream output) {");
|
||||
writer.Indent();
|
||||
// Make sure we've computed the serialized length, so that packed fields are generated correctly.
|
||||
writer.WriteLine("CalcSerializedSize();");
|
||||
writer.WriteLine("string[] field_names = _{0}FieldNames;", NameHelpers.UnderscoresToCamelCase(ClassName));
|
||||
if (Descriptor.Proto.ExtensionRangeList.Count > 0)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"pb::ExtendableMessage{1}<{0}, {0}.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);",
|
||||
ClassName, RuntimeSuffix);
|
||||
}
|
||||
|
||||
// Merge the fields and the extension ranges, both sorted by field number.
|
||||
for (int i = 0, j = 0; i < Descriptor.Fields.Count || j < sortedExtensions.Count;)
|
||||
{
|
||||
if (i == Descriptor.Fields.Count)
|
||||
{
|
||||
GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]);
|
||||
}
|
||||
else if (j == sortedExtensions.Count)
|
||||
{
|
||||
GenerateSerializeOneField(writer, sortedFields[i++]);
|
||||
}
|
||||
else if (sortedFields[i].FieldNumber < sortedExtensions[j].Start)
|
||||
{
|
||||
GenerateSerializeOneField(writer, sortedFields[i++]);
|
||||
}
|
||||
else
|
||||
{
|
||||
GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
if (Descriptor.Proto.Options.MessageSetWireFormat)
|
||||
{
|
||||
writer.WriteLine("UnknownFields.WriteAsMessageSetTo(output);");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("UnknownFields.WriteTo(output);");
|
||||
}
|
||||
}
|
||||
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("private int memoizedSerializedSize = -1;");
|
||||
writer.WriteLine("public override int SerializedSize {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("get {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("int size = memoizedSerializedSize;");
|
||||
writer.WriteLine("if (size != -1) return size;");
|
||||
writer.WriteLine("return CalcSerializedSize();");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("private int CalcSerializedSize() {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("int size = memoizedSerializedSize;");
|
||||
writer.WriteLine("if (size != -1) return size;");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("size = 0;");
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
CreateFieldGenerator(field).GenerateSerializedSizeCode(writer);
|
||||
}
|
||||
if (Descriptor.Proto.ExtensionRangeCount > 0)
|
||||
{
|
||||
writer.WriteLine("size += ExtensionsSerializedSize;");
|
||||
}
|
||||
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
if (Descriptor.Options.MessageSetWireFormat)
|
||||
{
|
||||
writer.WriteLine("size += UnknownFields.SerializedSizeAsMessageSet;");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("size += UnknownFields.SerializedSize;");
|
||||
}
|
||||
}
|
||||
writer.WriteLine("memoizedSerializedSize = size;");
|
||||
writer.WriteLine("return size;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
private void GenerateSerializeOneField(TextGenerator writer, FieldDescriptor fieldDescriptor)
|
||||
{
|
||||
CreateFieldGenerator(fieldDescriptor).GenerateSerializationCode(writer);
|
||||
}
|
||||
|
||||
private static void GenerateSerializeOneExtensionRange(TextGenerator writer,
|
||||
DescriptorProto.Types.ExtensionRange extensionRange)
|
||||
{
|
||||
writer.WriteLine("extensionWriter.WriteUntil({0}, output);", extensionRange.End);
|
||||
}
|
||||
|
||||
private void GenerateParseFromMethods(TextGenerator writer)
|
||||
{
|
||||
// Note: These are separate from GenerateMessageSerializationMethods()
|
||||
// because they need to be generated even for messages that are optimized
|
||||
// for code size.
|
||||
|
||||
writer.WriteLine("public static {0} ParseFrom(pb::ByteString data) {{", ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine(
|
||||
"public static {0} ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public static {0} ParseFrom(byte[] data) {{", ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public static {0} ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public static {0} ParseFrom(global::System.IO.Stream input) {{", ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine(
|
||||
"public static {0} ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public static {0} ParseDelimitedFrom(global::System.IO.Stream input) {{", ClassName);
|
||||
writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine(
|
||||
"public static {0} ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public static {0} ParseFrom(pb::ICodedInputStream input) {{", ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine(
|
||||
"public static {0} ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {{",
|
||||
ClassName);
|
||||
writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether or not the specified message type has any required fields.
|
||||
/// If it doesn't, calls to check for initialization can be optimised.
|
||||
/// TODO(jonskeet): Move this into MessageDescriptor?
|
||||
/// </summary>
|
||||
private static bool HasRequiredFields(MessageDescriptor descriptor,
|
||||
Dictionary<MessageDescriptor, object> alreadySeen)
|
||||
{
|
||||
if (alreadySeen.ContainsKey(descriptor))
|
||||
{
|
||||
// The type is already in cache. This means that either:
|
||||
// a. The type has no required fields.
|
||||
// b. We are in the midst of checking if the type has required fields,
|
||||
// somewhere up the stack. In this case, we know that if the type
|
||||
// has any required fields, they'll be found when we return to it,
|
||||
// and the whole call to HasRequiredFields() will return true.
|
||||
// Therefore, we don't have to check if this type has required fields
|
||||
// here.
|
||||
return false;
|
||||
}
|
||||
alreadySeen[descriptor] = descriptor; // Value is irrelevant
|
||||
|
||||
// If the type has extensions, an extension with message type could contain
|
||||
// required fields, so we have to be conservative and assume such an
|
||||
// extension exists.
|
||||
if (descriptor.Extensions.Count > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (FieldDescriptor field in descriptor.Fields)
|
||||
{
|
||||
if (field.IsRequired)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// Message or group
|
||||
if (field.MappedType == MappedType.Message)
|
||||
{
|
||||
if (HasRequiredFields(field.MessageType, alreadySeen))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void GenerateBuilder(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("private {0} MakeReadOnly() {{", ClassName);
|
||||
writer.Indent();
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
CreateFieldGenerator(field).GenerateBuildingCode(writer);
|
||||
}
|
||||
writer.WriteLine("return this;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public static Builder CreateBuilder() { return new Builder(); }");
|
||||
writer.WriteLine("public override Builder ToBuilder() { return CreateBuilder(this); }");
|
||||
writer.WriteLine("public override Builder CreateBuilderForType() { return new Builder(); }");
|
||||
writer.WriteLine("public static Builder CreateBuilder({0} prototype) {{", ClassName);
|
||||
writer.WriteLine(" return new Builder(prototype);");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
if (Descriptor.File.CSharpOptions.AddSerializable)
|
||||
{
|
||||
writer.WriteLine("[global::System.SerializableAttribute()]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} sealed partial class Builder : pb::{2}Builder{3}<{1}, Builder> {{",
|
||||
ClassAccessLevel, ClassName,
|
||||
Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", RuntimeSuffix);
|
||||
writer.Indent();
|
||||
writer.WriteLine("protected override Builder ThisBuilder {");
|
||||
writer.WriteLine(" get { return this; }");
|
||||
writer.WriteLine("}");
|
||||
GenerateCommonBuilderMethods(writer);
|
||||
if (OptimizeSpeed)
|
||||
{
|
||||
GenerateBuilderParsingMethods(writer);
|
||||
}
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
writer.WriteLine();
|
||||
// No field comment :(
|
||||
CreateFieldGenerator(field).GenerateBuilderMembers(writer);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
private void GenerateCommonBuilderMethods(TextGenerator writer)
|
||||
{
|
||||
//default constructor
|
||||
writer.WriteLine("public Builder() {");
|
||||
//Durring static initialization of message, DefaultInstance is expected to return null.
|
||||
writer.WriteLine(" result = DefaultInstance;");
|
||||
writer.WriteLine(" resultIsReadOnly = true;");
|
||||
writer.WriteLine("}");
|
||||
//clone constructor
|
||||
writer.WriteLine("internal Builder({0} cloneFrom) {{", ClassName);
|
||||
writer.WriteLine(" result = cloneFrom;");
|
||||
writer.WriteLine(" resultIsReadOnly = true;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("private bool resultIsReadOnly;");
|
||||
writer.WriteLine("private {0} result;", ClassName);
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("private {0} PrepareBuilder() {{", ClassName);
|
||||
writer.WriteLine(" if (resultIsReadOnly) {");
|
||||
writer.WriteLine(" {0} original = result;", ClassName);
|
||||
writer.WriteLine(" result = new {0}();", ClassName);
|
||||
writer.WriteLine(" resultIsReadOnly = false;");
|
||||
writer.WriteLine(" MergeFrom(original);");
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine(" return result;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public override bool IsInitialized {");
|
||||
writer.WriteLine(" get { return result.IsInitialized; }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("protected override {0} MessageBeingBuilt {{", ClassName);
|
||||
writer.WriteLine(" get { return PrepareBuilder(); }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
//Not actually expecting that DefaultInstance would ever be null here; however, we will ensure it does not break
|
||||
writer.WriteLine("public override Builder Clear() {");
|
||||
writer.WriteLine(" result = DefaultInstance;", ClassName);
|
||||
writer.WriteLine(" resultIsReadOnly = true;");
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public override Builder Clone() {");
|
||||
writer.WriteLine(" if (resultIsReadOnly) {");
|
||||
writer.WriteLine(" return new Builder(result);");
|
||||
writer.WriteLine(" } else {");
|
||||
writer.WriteLine(" return new Builder().MergeFrom(result);");
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("public override pbd::MessageDescriptor DescriptorForType {");
|
||||
writer.WriteLine(" get {{ return {0}.Descriptor; }}", FullClassName);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName);
|
||||
writer.WriteLine(" get {{ return {0}.DefaultInstance; }}", FullClassName);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public override {0} BuildPartial() {{", ClassName);
|
||||
writer.Indent();
|
||||
writer.WriteLine("if (resultIsReadOnly) {");
|
||||
writer.WriteLine(" return result;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("resultIsReadOnly = true;");
|
||||
writer.WriteLine("return result.MakeReadOnly();");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
if (OptimizeSpeed)
|
||||
{
|
||||
writer.WriteLine("public override Builder MergeFrom(pb::IMessage{0} other) {{", RuntimeSuffix);
|
||||
writer.WriteLine(" if (other is {0}) {{", ClassName);
|
||||
writer.WriteLine(" return MergeFrom(({0}) other);", ClassName);
|
||||
writer.WriteLine(" } else {");
|
||||
writer.WriteLine(" base.MergeFrom(other);");
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public override Builder MergeFrom({0} other) {{", ClassName);
|
||||
// Optimization: If other is the default instance, we know none of its
|
||||
// fields are set so we can skip the merge.
|
||||
writer.Indent();
|
||||
writer.WriteLine("if (other == {0}.DefaultInstance) return this;", FullClassName);
|
||||
writer.WriteLine("PrepareBuilder();");
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
CreateFieldGenerator(field).GenerateMergingCode(writer);
|
||||
}
|
||||
// if message type has extensions
|
||||
if (Descriptor.Proto.ExtensionRangeCount > 0)
|
||||
{
|
||||
writer.WriteLine(" this.MergeExtensionFields(other);");
|
||||
}
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("this.MergeUnknownFields(other.UnknownFields);");
|
||||
}
|
||||
writer.WriteLine("return this;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateBuilderParsingMethods(TextGenerator writer)
|
||||
{
|
||||
List<FieldDescriptor> sortedFields = new List<FieldDescriptor>(Descriptor.Fields);
|
||||
sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber));
|
||||
|
||||
writer.WriteLine("public override Builder MergeFrom(pb::ICodedInputStream input) {");
|
||||
writer.WriteLine(" return MergeFrom(input, pb::ExtensionRegistry.Empty);");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine(
|
||||
"public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("PrepareBuilder();");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("pb::UnknownFieldSet.Builder unknownFields = null;");
|
||||
}
|
||||
writer.WriteLine("uint tag;");
|
||||
writer.WriteLine("string field_name;");
|
||||
writer.WriteLine("while (input.ReadTag(out tag, out field_name)) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("if(tag == 0 && field_name != null) {");
|
||||
writer.Indent();
|
||||
//if you change from StringComparer.Ordinal, the array sort in FieldNames { get; } must also change
|
||||
writer.WriteLine(
|
||||
"int field_ordinal = global::System.Array.BinarySearch(_{0}FieldNames, field_name, global::System.StringComparer.Ordinal);",
|
||||
NameHelpers.UnderscoresToCamelCase(ClassName));
|
||||
writer.WriteLine("if(field_ordinal >= 0)");
|
||||
writer.WriteLine(" tag = _{0}FieldTags[field_ordinal];", NameHelpers.UnderscoresToCamelCase(ClassName));
|
||||
writer.WriteLine("else {");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now
|
||||
writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
|
||||
writer.WriteLine(" }");
|
||||
}
|
||||
writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);",
|
||||
UseLiteRuntime ? "" : "unknownFields, ");
|
||||
writer.WriteLine(" continue;");
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
|
||||
writer.WriteLine("switch (tag) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("case 0: {"); // 0 signals EOF / limit reached
|
||||
writer.WriteLine(" throw pb::InvalidProtocolBufferException.InvalidTag();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("default: {");
|
||||
writer.WriteLine(" if (pb::WireFormat.IsEndGroupTag(tag)) {");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine(" if (unknownFields != null) {");
|
||||
writer.WriteLine(" this.UnknownFields = unknownFields.Build();");
|
||||
writer.WriteLine(" }");
|
||||
}
|
||||
writer.WriteLine(" return this;"); // it's an endgroup tag
|
||||
writer.WriteLine(" }");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now
|
||||
writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
|
||||
writer.WriteLine(" }");
|
||||
}
|
||||
writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);",
|
||||
UseLiteRuntime ? "" : "unknownFields, ");
|
||||
writer.WriteLine(" break;");
|
||||
writer.WriteLine("}");
|
||||
foreach (FieldDescriptor field in sortedFields)
|
||||
{
|
||||
WireFormat.WireType wt = WireFormat.GetWireType(field.FieldType);
|
||||
uint tag = WireFormat.MakeTag(field.FieldNumber, wt);
|
||||
|
||||
if (field.IsRepeated &&
|
||||
(wt == WireFormat.WireType.Varint || wt == WireFormat.WireType.Fixed32 ||
|
||||
wt == WireFormat.WireType.Fixed64))
|
||||
{
|
||||
writer.WriteLine("case {0}:",
|
||||
WireFormat.MakeTag(field.FieldNumber, WireFormat.WireType.LengthDelimited));
|
||||
}
|
||||
|
||||
writer.WriteLine("case {0}: {{", tag);
|
||||
writer.Indent();
|
||||
CreateFieldGenerator(field).GenerateParsingCode(writer);
|
||||
writer.WriteLine("break;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("if (unknownFields != null) {");
|
||||
writer.WriteLine(" this.UnknownFields = unknownFields.Build();");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
writer.WriteLine("return this;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void GenerateIsInitialized(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("public override bool IsInitialized {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("get {");
|
||||
writer.Indent();
|
||||
|
||||
// Check that all required fields in this message are set.
|
||||
// TODO(kenton): We can optimize this when we switch to putting all the
|
||||
// "has" fields into a single bitfield.
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
if (field.IsRequired)
|
||||
{
|
||||
writer.WriteLine("if (!has{0}) return false;", field.CSharpOptions.PropertyName);
|
||||
}
|
||||
}
|
||||
|
||||
// Now check that all embedded messages are initialized.
|
||||
foreach (FieldDescriptor field in Descriptor.Fields)
|
||||
{
|
||||
if (field.FieldType != FieldType.Message ||
|
||||
!HasRequiredFields(field.MessageType, new Dictionary<MessageDescriptor, object>()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string propertyName = NameHelpers.UnderscoresToPascalCase(GetFieldName(field));
|
||||
if (field.IsRepeated)
|
||||
{
|
||||
writer.WriteLine("foreach ({0} element in {1}List) {{", GetClassName(field.MessageType),
|
||||
propertyName);
|
||||
writer.WriteLine(" if (!element.IsInitialized) return false;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
else if (field.IsOptional)
|
||||
{
|
||||
writer.WriteLine("if (Has{0}) {{", propertyName);
|
||||
writer.WriteLine(" if (!{0}.IsInitialized) return false;", propertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("if (!{0}.IsInitialized) return false;", propertyName);
|
||||
}
|
||||
}
|
||||
|
||||
if (Descriptor.Proto.ExtensionRangeCount > 0)
|
||||
{
|
||||
writer.WriteLine("if (!ExtensionsAreInitialized) return false;");
|
||||
}
|
||||
writer.WriteLine("return true;");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
internal void GenerateExtensionRegistrationCode(TextGenerator writer)
|
||||
{
|
||||
foreach (FieldDescriptor extension in Descriptor.Extensions)
|
||||
{
|
||||
new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer);
|
||||
}
|
||||
foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)
|
||||
{
|
||||
new MessageGenerator(nestedMessage).GenerateExtensionRegistrationCode(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,140 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
// TODO(jonskeet): Refactor this. There's loads of common code here.
|
||||
internal class PrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal PrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("private bool has{0};", PropertyName);
|
||||
writer.WriteLine("private {0} {1}_{2};", TypeName, Name, HasDefaultValue ? " = " + DefaultValue : "");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public bool Has{0} {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}; }}", PropertyName);
|
||||
writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = true;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.has{0} = false;", PropertyName);
|
||||
writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.Has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" {0} = other.{0};", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
// Nothing to do here for primitive types
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("result.has{0} = input.Read{1}(ref result.{2}_);", PropertyName, CapitalizedTypeName, Name);
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", CapitalizedTypeName, Number, PropertyName,
|
||||
FieldOrdinal);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) {{", PropertyName);
|
||||
writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});",
|
||||
CapitalizedTypeName, Number, PropertyName);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",
|
||||
PropertyName, Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.IO;
|
||||
using System.Collections.Generic;
|
||||
using Google.ProtocolBuffers.Compiler.PluginProto;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Entry point for the Protocol Buffers generator.
|
||||
/// </summary>
|
||||
internal class Program
|
||||
{
|
||||
internal static int Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Hack to make sure everything's initialized
|
||||
DescriptorProtoFile.Descriptor.ToString();
|
||||
GeneratorOptions options = new GeneratorOptions {Arguments = args};
|
||||
|
||||
IList<string> validationFailures;
|
||||
if (!options.TryValidate(out validationFailures))
|
||||
{
|
||||
// We've already got the message-building logic in the exception...
|
||||
InvalidOptionsException exception = new InvalidOptionsException(validationFailures);
|
||||
Console.WriteLine(exception.Message);
|
||||
return 1;
|
||||
}
|
||||
|
||||
var request = new CodeGeneratorRequest.Builder();
|
||||
foreach (string inputFile in options.InputFiles)
|
||||
{
|
||||
ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
|
||||
CSharpOptions.RegisterAllExtensions(extensionRegistry);
|
||||
using (Stream inputStream = File.OpenRead(inputFile))
|
||||
{
|
||||
var fileSet = FileDescriptorSet.ParseFrom(inputStream, extensionRegistry);
|
||||
foreach (var fileProto in fileSet.FileList)
|
||||
{
|
||||
request.AddFileToGenerate(fileProto.Name);
|
||||
request.AddProtoFile(fileProto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Generator generator = Generator.CreateGenerator(options);
|
||||
var response = new CodeGeneratorResponse.Builder();
|
||||
generator.Generate(request.Build(), response);
|
||||
if (response.HasError)
|
||||
{
|
||||
throw new Exception(response.Error);
|
||||
}
|
||||
foreach (var file in response.FileList)
|
||||
{
|
||||
File.WriteAllText(file.Name, file.Content);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.Error.WriteLine("Error: {0}", e.Message);
|
||||
Console.Error.WriteLine();
|
||||
Console.Error.WriteLine("Detailed exception information: {0}", e);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,276 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Preprocesses any input files with an extension of '.proto' by running protoc.exe. If arguments
|
||||
/// are supplied with '--' prefix they are provided to protoc.exe, otherwise they are assumed to
|
||||
/// be used for ProtoGen.exe which is run on the resulting output proto buffer. If the option
|
||||
/// --descriptor_set_out= is specified the proto buffer file is kept, otherwise it will be removed
|
||||
/// after code generation.
|
||||
/// </summary>
|
||||
public class ProgramPreprocess
|
||||
{
|
||||
private const string ProtocExecutable = "protoc.exe";
|
||||
private const string ProtocDirectoryArg = "--protoc_dir=";
|
||||
|
||||
private static int Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Environment.ExitCode = Run(args);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex);
|
||||
return Environment.ExitCode = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public static int Run(params string[] args)
|
||||
{
|
||||
bool deleteFile = false;
|
||||
string tempFile = null;
|
||||
int result;
|
||||
bool doHelp = args.Length == 0;
|
||||
try
|
||||
{
|
||||
List<string> protocArgs = new List<string>();
|
||||
List<string> protoGenArgs = new List<string>();
|
||||
|
||||
string protocFile = GuessProtocFile(args);
|
||||
|
||||
foreach (string arg in args)
|
||||
{
|
||||
doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/?");
|
||||
doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/help");
|
||||
doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-?");
|
||||
doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-help");
|
||||
|
||||
if (arg.StartsWith("--descriptor_set_out="))
|
||||
{
|
||||
tempFile = arg.Substring("--descriptor_set_out=".Length);
|
||||
protoGenArgs.Add(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
if (doHelp)
|
||||
{
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("PROTOC.exe: Use any of the following options that begin with '--':");
|
||||
Console.WriteLine();
|
||||
try
|
||||
{
|
||||
RunProtoc(protocFile, "--help");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
}
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(
|
||||
"PROTOGEN.exe: The following options are used to specify defaults for code generation.");
|
||||
Console.WriteLine();
|
||||
Program.Main(new string[0]);
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("The following option enables PROTOGEN.exe to find PROTOC.exe");
|
||||
Console.WriteLine("{0}<directory containing protoc.exe>", ProtocDirectoryArg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
string pathRoot = Environment.CurrentDirectory;
|
||||
foreach(string arg in args)
|
||||
{
|
||||
if (arg.StartsWith("--proto_path=", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
pathRoot = arg.Substring(13);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (string arg in args)
|
||||
{
|
||||
if (arg.StartsWith(ProtocDirectoryArg))
|
||||
{
|
||||
// Handled earlier
|
||||
continue;
|
||||
}
|
||||
if (arg.StartsWith("--"))
|
||||
{
|
||||
protocArgs.Add(arg);
|
||||
}
|
||||
else if ((File.Exists(arg) || File.Exists(Path.Combine(pathRoot, arg))) &&
|
||||
StringComparer.OrdinalIgnoreCase.Equals(".proto", Path.GetExtension(arg)))
|
||||
{
|
||||
if (tempFile == null)
|
||||
{
|
||||
deleteFile = true;
|
||||
tempFile = Path.GetTempFileName();
|
||||
protocArgs.Add(String.Format("--descriptor_set_out={0}", tempFile));
|
||||
protoGenArgs.Add(tempFile);
|
||||
}
|
||||
string patharg = arg;
|
||||
if (!File.Exists(patharg))
|
||||
{
|
||||
patharg = Path.Combine(pathRoot, arg);
|
||||
}
|
||||
|
||||
protocArgs.Add(patharg);
|
||||
}
|
||||
else
|
||||
{
|
||||
protoGenArgs.Add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (tempFile != null)
|
||||
{
|
||||
result = RunProtoc(protocFile, protocArgs.ToArray());
|
||||
if (result != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
result = Program.Main(protoGenArgs.ToArray());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (deleteFile && tempFile != null && File.Exists(tempFile))
|
||||
{
|
||||
File.Delete(tempFile);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to work out where protoc is based on command line arguments, the current
|
||||
/// directory, the directory containing protogen, and the path.
|
||||
/// </summary>
|
||||
/// <returns>The path to protoc.exe, or null if it can't be found.</returns>
|
||||
private static string GuessProtocFile(params string[] args)
|
||||
{
|
||||
// Why oh why is this not in System.IO.Path or Environment...?
|
||||
List<string> searchPath = new List<string>();
|
||||
foreach (string arg in args)
|
||||
{
|
||||
if (arg.StartsWith("--protoc_dir="))
|
||||
{
|
||||
searchPath.Add(arg.Substring(ProtocDirectoryArg.Length));
|
||||
}
|
||||
}
|
||||
searchPath.Add(Environment.CurrentDirectory);
|
||||
searchPath.Add(AppDomain.CurrentDomain.BaseDirectory);
|
||||
searchPath.AddRange((Environment.GetEnvironmentVariable("PATH") ?? String.Empty).Split(Path.PathSeparator));
|
||||
|
||||
foreach (string path in searchPath)
|
||||
{
|
||||
string exeFile = Path.Combine(path, ProtocExecutable);
|
||||
if (File.Exists(exeFile))
|
||||
{
|
||||
return exeFile;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static int RunProtoc(string exeFile, params string[] args)
|
||||
{
|
||||
if (exeFile == null)
|
||||
{
|
||||
throw new FileNotFoundException(
|
||||
"Unable to locate " + ProtocExecutable +
|
||||
" make sure it is in the PATH, cwd, or exe dir, or use --protoc_dir=...");
|
||||
}
|
||||
|
||||
ProcessStartInfo psi = new ProcessStartInfo(exeFile);
|
||||
psi.Arguments = EscapeArguments(args);
|
||||
psi.RedirectStandardError = true;
|
||||
psi.RedirectStandardInput = false;
|
||||
psi.RedirectStandardOutput = true;
|
||||
psi.ErrorDialog = false;
|
||||
psi.CreateNoWindow = true;
|
||||
psi.UseShellExecute = false;
|
||||
psi.WorkingDirectory = Environment.CurrentDirectory;
|
||||
|
||||
Process process = Process.Start(psi);
|
||||
if (process == null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
process.WaitForExit();
|
||||
|
||||
string tmp = process.StandardOutput.ReadToEnd();
|
||||
if (tmp.Trim().Length > 0)
|
||||
{
|
||||
Console.Out.WriteLine(tmp);
|
||||
}
|
||||
tmp = process.StandardError.ReadToEnd();
|
||||
if (tmp.Trim().Length > 0)
|
||||
{
|
||||
// Replace protoc output with something more amenable to Visual Studio.
|
||||
var regexMsvs = new Regex(@"(.*)\((\d+)\).* column=(\d+)\s*:\s*(.*)");
|
||||
tmp = regexMsvs.Replace(tmp, "$1($2,$3): error CS9999: $4");
|
||||
var regexGcc = new Regex(@"(.*):(\d+):(\d+):\s*(.*)");
|
||||
tmp = regexGcc.Replace(tmp, "$1($2,$3): error CS9999: $4");
|
||||
Console.Error.WriteLine(tmp);
|
||||
}
|
||||
return process.ExitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Quotes all arguments that contain whitespace, or begin with a quote and returns a single
|
||||
/// argument string for use with Process.Start().
|
||||
/// </summary>
|
||||
/// <remarks>http://csharptest.net/?p=529</remarks>
|
||||
/// <param name="args">A list of strings for arguments, may not contain null, '\0', '\r', or '\n'</param>
|
||||
/// <returns>The combined list of escaped/quoted strings</returns>
|
||||
/// <exception cref="System.ArgumentNullException">Raised when one of the arguments is null</exception>
|
||||
/// <exception cref="System.ArgumentOutOfRangeException">Raised if an argument contains '\0', '\r', or '\n'</exception>
|
||||
public static string EscapeArguments(params string[] args)
|
||||
{
|
||||
StringBuilder arguments = new StringBuilder();
|
||||
Regex invalidChar = new Regex("[\x00\x0a\x0d]");// these can not be escaped
|
||||
Regex needsQuotes = new Regex(@"\s|""");// contains whitespace or two quote characters
|
||||
Regex escapeQuote = new Regex(@"(\\*)(""|$)");// one or more '\' followed with a quote or end of string
|
||||
for (int carg = 0; args != null && carg < args.Length; carg++)
|
||||
{
|
||||
if (args[carg] == null)
|
||||
{
|
||||
throw new ArgumentNullException("args[" + carg + "]");
|
||||
}
|
||||
if (invalidChar.IsMatch(args[carg]))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("args[" + carg + "]");
|
||||
}
|
||||
if (args[carg] == String.Empty)
|
||||
{
|
||||
arguments.Append("\"\"");
|
||||
}
|
||||
else if (!needsQuotes.IsMatch(args[carg])) { arguments.Append(args[carg]); }
|
||||
else
|
||||
{
|
||||
arguments.Append('"');
|
||||
arguments.Append(escapeQuote.Replace(args[carg],
|
||||
m =>
|
||||
m.Groups[1].Value + m.Groups[1].Value +
|
||||
(m.Groups[2].Value == "\"" ? "\\\"" : "")
|
||||
));
|
||||
arguments.Append('"');
|
||||
}
|
||||
if (carg + 1 < args.Length)
|
||||
{
|
||||
arguments.Append(' ');
|
||||
}
|
||||
}
|
||||
return arguments.ToString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
|
||||
[assembly: AssemblyTitle("ProtoGen")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ProtoGen")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2008")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("2.4.1.555")]
|
||||
|
||||
[assembly: AssemblyVersion("2.4.1.555")]
|
||||
[assembly: AssemblyFileVersion("2.4.1.555")]
|
|
@ -1,98 +0,0 @@
|
|||
<?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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{250ADE34-82FD-4BAE-86D5-985FBE589C4A}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>
|
||||
<AssemblyName>ProtoGen</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<StartupObject>Google.ProtocolBuffers.ProtoGen.ProgramPreprocess</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DescriptorUtil.cs" />
|
||||
<Compile Include="EnumFieldGenerator.cs" />
|
||||
<Compile Include="EnumGenerator.cs" />
|
||||
<Compile Include="ExtensionGenerator.cs" />
|
||||
<Compile Include="FieldGeneratorBase.cs" />
|
||||
<Compile Include="IFieldSourceGenerator.cs" />
|
||||
<Compile Include="ISourceGenerator.cs" />
|
||||
<Compile Include="MessageFieldGenerator.cs" />
|
||||
<Compile Include="MessageGenerator.cs" />
|
||||
<Compile Include="PluginProtoFile.cs" />
|
||||
<Compile Include="PrimitiveFieldGenerator.cs" />
|
||||
<Compile Include="ProgramPreprocess.cs" />
|
||||
<Compile Include="RepeatedEnumFieldGenerator.cs" />
|
||||
<Compile Include="RepeatedMessageFieldGenerator.cs" />
|
||||
<Compile Include="RepeatedPrimitiveFieldGenerator.cs" />
|
||||
<Compile Include="ServiceGenerator.cs" />
|
||||
<Compile Include="DependencyResolutionException.cs" />
|
||||
<Compile Include="Generator.cs" />
|
||||
<Compile Include="GeneratorOptions.cs" />
|
||||
<Compile Include="Helpers.cs" />
|
||||
<Compile Include="InvalidOptionsException.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServiceInterfaceGenerator.cs" />
|
||||
<Compile Include="SourceGeneratorBase.cs" />
|
||||
<Compile Include="SourceGenerators.cs" />
|
||||
<Compile Include="UmbrellaClassGenerator.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,76 +0,0 @@
|
|||
using Google.ProtocolBuffers.Compiler.PluginProto;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
// Usage example:
|
||||
// protoc.exe
|
||||
// --plugin=path\to\protoc-gen-cs.exe
|
||||
// --cs_out="-generated_code_attributes=true umbrella_namespace=TutorialProto :."
|
||||
// --proto_path=.\protos\
|
||||
// protos\tutorial\addressbook.proto
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
public static class ProtocGenCs
|
||||
{
|
||||
internal static void Run(CodeGeneratorRequest request, CodeGeneratorResponse.Builder response)
|
||||
{
|
||||
var arguments = new List<string>();
|
||||
foreach (var arg in request.Parameter.Split(' '))
|
||||
{
|
||||
var timmedArg = (arg ?? "").Trim();
|
||||
if (!string.IsNullOrEmpty(timmedArg))
|
||||
{
|
||||
arguments.Add(timmedArg);
|
||||
}
|
||||
}
|
||||
// Adding fake input file to make TryValidate happy.
|
||||
arguments.Add(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||
|
||||
GeneratorOptions options = new GeneratorOptions
|
||||
{
|
||||
Arguments = arguments
|
||||
};
|
||||
IList<string> validationFailures;
|
||||
if (!options.TryValidate(out validationFailures))
|
||||
{
|
||||
response.Error += new InvalidOptionsException(validationFailures).Message;
|
||||
return;
|
||||
}
|
||||
|
||||
Generator generator = Generator.CreateGenerator(options);
|
||||
generator.Generate(request, response);
|
||||
}
|
||||
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
// Hack to make sure everything's initialized
|
||||
DescriptorProtoFile.Descriptor.ToString();
|
||||
ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
|
||||
CSharpOptions.RegisterAllExtensions(extensionRegistry);
|
||||
|
||||
CodeGeneratorRequest request;
|
||||
var response = new CodeGeneratorResponse.Builder();
|
||||
try
|
||||
{
|
||||
using (var input = Console.OpenStandardInput())
|
||||
{
|
||||
request = CodeGeneratorRequest.ParseFrom(input, extensionRegistry);
|
||||
}
|
||||
Run(request, response);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
response.Error += e.ToString();
|
||||
}
|
||||
|
||||
using (var output = Console.OpenStandardOutput())
|
||||
{
|
||||
response.Build().WriteTo(output);
|
||||
output.Flush();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,212 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class RepeatedEnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal RepeatedEnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
if (Descriptor.IsPacked && OptimizeSpeed)
|
||||
{
|
||||
writer.WriteLine("private int {0}MemoizedSerializedSize;", Name);
|
||||
}
|
||||
writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
// TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_.Count; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return {0}_[index];", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
// Note: We can return the original list here, because we make it unmodifiable when we build
|
||||
// We return it via IPopsicleList so that collection initializers work more pleasantly.
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return result.Get{0}(index);", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_[index] = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(values);", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Clear();", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);
|
||||
writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{0}_.MakeReadOnly();", Name);
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("scg::ICollection<object> unknownItems;");
|
||||
writer.WriteLine("input.ReadEnumArray<{0}>(tag, field_name, result.{1}_, out unknownItems);", TypeName, Name);
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
writer.WriteLine("if (unknownItems != null) {");
|
||||
writer.WriteLine(" if (unknownFields == null) {");
|
||||
writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
|
||||
writer.WriteLine(" }");
|
||||
writer.WriteLine(" foreach (object rawValue in unknownItems)");
|
||||
writer.WriteLine(" if (rawValue is int)");
|
||||
writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)rawValue);", Number);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if ({0}_.Count > 0) {{", Name);
|
||||
writer.Indent();
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"output.WritePackedEnumArray({0}, field_names[{2}], {1}MemoizedSerializedSize, {1}_);", Number, Name,
|
||||
FieldOrdinal, Descriptor.FieldType);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("output.WriteEnumArray({0}, field_names[{2}], {1}_);", Number, Name, FieldOrdinal,
|
||||
Descriptor.FieldType);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{");
|
||||
writer.Indent();
|
||||
writer.WriteLine("int dataSize = 0;");
|
||||
writer.WriteLine("if ({0}_.Count > 0) {{", Name);
|
||||
writer.Indent();
|
||||
writer.WriteLine("foreach ({0} element in {1}_) {{", TypeName, Name);
|
||||
writer.WriteLine(" dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("size += dataSize;");
|
||||
int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber);
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine("size += {0};", tagSize);
|
||||
writer.WriteLine("size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
// cache the data size for packed fields.
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);
|
||||
writer.WriteLine(" hash ^= i.GetHashCode();");
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);
|
||||
writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);
|
||||
writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,184 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class RepeatedMessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal RepeatedMessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
// TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_.Count; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return {0}_[index];", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
// Note: We can return the original list here, because we make it unmodifiable when we build
|
||||
// We return it via IPopsicleList so that collection initializers work more pleasantly.
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return result.Get{0}(index);", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_[index] = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
// Extra overload for builder (just on messages)
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Set{0}(int index, {1}.Builder builderForValue) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer, "builderForValue");
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_[index] = builderForValue.Build();", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
// Extra overload for builder (just on messages)
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Add{0}({1}.Builder builderForValue) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer, "builderForValue");
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(builderForValue.Build());", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(values);", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Clear();", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);
|
||||
writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{0}_.MakeReadOnly();", Name);
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"input.Read{0}Array(tag, field_name, result.{1}_, {2}.DefaultInstance, extensionRegistry);",
|
||||
MessageOrGroup, Name, TypeName);
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if ({0}_.Count > 0) {{", Name);
|
||||
writer.Indent();
|
||||
writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", MessageOrGroup, Number, Name,
|
||||
FieldOrdinal, Descriptor.FieldType);
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, element);", MessageOrGroup, Number);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);
|
||||
writer.WriteLine(" hash ^= i.GetHashCode();");
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);
|
||||
writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);
|
||||
writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{0}\", {1}_, writer);",
|
||||
Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name,
|
||||
Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,207 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class RepeatedPrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator
|
||||
{
|
||||
internal RepeatedPrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)
|
||||
: base(descriptor, fieldOrdinal)
|
||||
{
|
||||
}
|
||||
|
||||
public void GenerateMembers(TextGenerator writer)
|
||||
{
|
||||
if (Descriptor.IsPacked && OptimizeSpeed)
|
||||
{
|
||||
writer.WriteLine("private int {0}MemoizedSerializedSize;", Name);
|
||||
}
|
||||
writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
// TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return {0}_.Count; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return {0}_[index];", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuilderMembers(TextGenerator writer)
|
||||
{
|
||||
// Note: We can return the original list here, because we make it unmodifiable when we build
|
||||
// We return it via IPopsicleList so that collection initializers work more pleasantly.
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name);
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public int {0}Count {{", PropertyName);
|
||||
writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" return result.Get{0}(index);", PropertyName);
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_[index] = value;", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);
|
||||
AddNullCheck(writer);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddPublicMemberAttributes(writer);
|
||||
writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Add(values);", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
AddDeprecatedFlag(writer);
|
||||
writer.WriteLine("public Builder Clear{0}() {{", PropertyName);
|
||||
writer.WriteLine(" PrepareBuilder();");
|
||||
writer.WriteLine(" result.{0}_.Clear();", Name);
|
||||
writer.WriteLine(" return this;");
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateMergingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);
|
||||
writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateBuildingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{0}_.MakeReadOnly();", Name);
|
||||
}
|
||||
|
||||
public void GenerateParsingCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("input.Read{0}Array(tag, field_name, result.{1}_);", CapitalizedTypeName, Name,
|
||||
Descriptor.FieldType);
|
||||
}
|
||||
|
||||
public void GenerateSerializationCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if ({0}_.Count > 0) {{", Name);
|
||||
writer.Indent();
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine("output.WritePacked{0}Array({1}, field_names[{3}], {2}MemoizedSerializedSize, {2}_);",
|
||||
CapitalizedTypeName, Number, Name, FieldOrdinal, Descriptor.FieldType);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", CapitalizedTypeName, Number, Name,
|
||||
FieldOrdinal, Descriptor.FieldType);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public void GenerateSerializedSizeCode(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("{");
|
||||
writer.Indent();
|
||||
writer.WriteLine("int dataSize = 0;");
|
||||
if (FixedSize == -1)
|
||||
{
|
||||
writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);
|
||||
writer.WriteLine(" dataSize += pb::CodedOutputStream.Compute{0}SizeNoTag(element);",
|
||||
CapitalizedTypeName, Number);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("dataSize = {0} * {1}_.Count;", FixedSize, Name);
|
||||
}
|
||||
writer.WriteLine("size += dataSize;");
|
||||
int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber);
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine("if ({0}_.Count != 0) {{", Name);
|
||||
writer.WriteLine(" size += {0} + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);", tagSize);
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name);
|
||||
}
|
||||
// cache the data size for packed fields.
|
||||
if (Descriptor.IsPacked)
|
||||
{
|
||||
writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
public override void WriteHash(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);
|
||||
writer.WriteLine(" hash ^= i.GetHashCode();");
|
||||
}
|
||||
|
||||
public override void WriteEquals(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);
|
||||
writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);
|
||||
writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);
|
||||
}
|
||||
|
||||
public override void WriteToString(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class GenericServiceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator
|
||||
{
|
||||
private enum RequestOrResponse
|
||||
{
|
||||
Request,
|
||||
Response
|
||||
}
|
||||
|
||||
internal GenericServiceGenerator(ServiceDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} abstract class {1} : pb::IService {{", ClassAccessLevel, Descriptor.Name);
|
||||
writer.Indent();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine("{0} abstract void {1}(", ClassAccessLevel,
|
||||
NameHelpers.UnderscoresToPascalCase(method.Name));
|
||||
writer.WriteLine(" pb::IRpcController controller,");
|
||||
writer.WriteLine(" {0} request,", GetClassName(method.InputType));
|
||||
writer.WriteLine(" global::System.Action<{0}> done);", GetClassName(method.OutputType));
|
||||
}
|
||||
|
||||
// Generate Descriptor and DescriptorForType.
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("{0} static pbd::ServiceDescriptor Descriptor {{", ClassAccessLevel);
|
||||
writer.WriteLine(" get {{ return {0}.Descriptor.Services[{1}]; }}",
|
||||
DescriptorUtil.GetQualifiedUmbrellaClassName(Descriptor.File.CSharpOptions),
|
||||
Descriptor.Index);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public pbd::ServiceDescriptor DescriptorForType {");
|
||||
writer.WriteLine(" get { return Descriptor; }");
|
||||
writer.WriteLine("}");
|
||||
|
||||
GenerateCallMethod(writer);
|
||||
GenerateGetPrototype(RequestOrResponse.Request, writer);
|
||||
GenerateGetPrototype(RequestOrResponse.Response, writer);
|
||||
GenerateStub(writer);
|
||||
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
private void GenerateCallMethod(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public void CallMethod(");
|
||||
writer.WriteLine(" pbd::MethodDescriptor method,");
|
||||
writer.WriteLine(" pb::IRpcController controller,");
|
||||
writer.WriteLine(" pb::IMessage request,");
|
||||
writer.WriteLine(" global::System.Action<pb::IMessage> done) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("if (method.Service != Descriptor) {");
|
||||
writer.WriteLine(" throw new global::System.ArgumentException(");
|
||||
writer.WriteLine(" \"Service.CallMethod() given method descriptor for wrong service type.\");");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("switch(method.Index) {");
|
||||
writer.Indent();
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine("case {0}:", method.Index);
|
||||
writer.WriteLine(" this.{0}(controller, ({1}) request,",
|
||||
NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType));
|
||||
writer.WriteLine(" pb::RpcUtil.SpecializeCallback<{0}>(", GetClassName(method.OutputType));
|
||||
writer.WriteLine(" done));");
|
||||
writer.WriteLine(" return;");
|
||||
}
|
||||
writer.WriteLine("default:");
|
||||
writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void GenerateGetPrototype(RequestOrResponse which, TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("public pb::IMessage Get{0}Prototype(pbd::MethodDescriptor method) {{", which);
|
||||
writer.Indent();
|
||||
writer.WriteLine("if (method.Service != Descriptor) {");
|
||||
writer.WriteLine(" throw new global::System.ArgumentException(");
|
||||
writer.WriteLine(" \"Service.Get{0}Prototype() given method descriptor for wrong service type.\");",
|
||||
which);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("switch(method.Index) {");
|
||||
writer.Indent();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine("case {0}:", method.Index);
|
||||
writer.WriteLine(" return {0}.DefaultInstance;",
|
||||
GetClassName(which == RequestOrResponse.Request ? method.InputType : method.OutputType));
|
||||
}
|
||||
writer.WriteLine("default:");
|
||||
writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void GenerateStub(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("public static Stub CreateStub(pb::IRpcChannel channel) {");
|
||||
writer.WriteLine(" return new Stub(channel);");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} class Stub : {1} {{", ClassAccessLevel, GetClassName(Descriptor));
|
||||
writer.Indent();
|
||||
writer.WriteLine("internal Stub(pb::IRpcChannel channel) {");
|
||||
writer.WriteLine(" this.channel = channel;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("private readonly pb::IRpcChannel channel;");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("public pb::IRpcChannel Channel {");
|
||||
writer.WriteLine(" get { return channel; }");
|
||||
writer.WriteLine("}");
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("{0} override void {1}(", ClassAccessLevel,
|
||||
NameHelpers.UnderscoresToPascalCase(method.Name));
|
||||
writer.WriteLine(" pb::IRpcController controller,");
|
||||
writer.WriteLine(" {0} request,", GetClassName(method.InputType));
|
||||
writer.WriteLine(" global::System.Action<{0}> done) {{", GetClassName(method.OutputType));
|
||||
writer.Indent();
|
||||
writer.WriteLine("channel.CallMethod(Descriptor.Methods[{0}],", method.Index);
|
||||
writer.WriteLine(" controller, request, {0}.DefaultInstance,", GetClassName(method.OutputType));
|
||||
writer.WriteLine(" pb::RpcUtil.GeneralizeCallback<{0}, {0}.Builder>(done, {0}.DefaultInstance));",
|
||||
GetClassName(method.OutputType));
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,300 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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 Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal class ServiceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator
|
||||
{
|
||||
private readonly CSharpServiceType svcType;
|
||||
private ISourceGenerator _generator;
|
||||
|
||||
internal ServiceGenerator(ServiceDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
svcType = descriptor.File.CSharpOptions.ServiceGeneratorType;
|
||||
switch (svcType)
|
||||
{
|
||||
case CSharpServiceType.NONE:
|
||||
_generator = new NoServicesGenerator(descriptor);
|
||||
break;
|
||||
case CSharpServiceType.GENERIC:
|
||||
_generator = new GenericServiceGenerator(descriptor);
|
||||
break;
|
||||
case CSharpServiceType.INTERFACE:
|
||||
_generator = new ServiceInterfaceGenerator(descriptor);
|
||||
break;
|
||||
case CSharpServiceType.IRPCDISPATCH:
|
||||
_generator = new RpcServiceGenerator(descriptor);
|
||||
break;
|
||||
default:
|
||||
throw new ApplicationException("Unknown ServiceGeneratorType = " + svcType.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
_generator.Generate(writer);
|
||||
}
|
||||
|
||||
private class NoServicesGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator
|
||||
{
|
||||
public NoServicesGenerator(ServiceDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void Generate(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("/*");
|
||||
writer.WriteLine("* Service generation is now disabled by default, use the following option to enable:");
|
||||
writer.WriteLine("* option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;");
|
||||
writer.WriteLine("*/");
|
||||
}
|
||||
}
|
||||
|
||||
private class ServiceInterfaceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator
|
||||
{
|
||||
public ServiceInterfaceGenerator(ServiceDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void Generate(TextGenerator writer)
|
||||
{
|
||||
CSharpServiceOptions options = Descriptor.Options.GetExtension(CSharpOptions.CsharpServiceOptions);
|
||||
if (options != null && options.HasInterfaceId)
|
||||
{
|
||||
writer.WriteLine("[global::System.Runtime.InteropServices.GuidAttribute(\"{0}\")]",
|
||||
new Guid(options.InterfaceId));
|
||||
}
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} partial interface I{1} {{", ClassAccessLevel, Descriptor.Name);
|
||||
writer.Indent();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
CSharpMethodOptions mth = method.Options.GetExtension(CSharpOptions.CsharpMethodOptions);
|
||||
if (mth.HasDispatchId)
|
||||
{
|
||||
writer.WriteLine("[global::System.Runtime.InteropServices.DispId({0})]", mth.DispatchId);
|
||||
}
|
||||
writer.WriteLine("{0} {1}({2} {3});", GetClassName(method.OutputType),
|
||||
NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType),
|
||||
NameHelpers.UnderscoresToCamelCase(method.InputType.Name));
|
||||
}
|
||||
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
}
|
||||
|
||||
private class RpcServiceGenerator : ServiceInterfaceGenerator
|
||||
{
|
||||
public RpcServiceGenerator(ServiceDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Generate(TextGenerator writer)
|
||||
{
|
||||
base.Generate(writer);
|
||||
|
||||
writer.WriteLine();
|
||||
|
||||
// CLIENT Proxy
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} partial class {1} : I{1}, pb::IRpcDispatch, global::System.IDisposable {{",
|
||||
ClassAccessLevel, Descriptor.Name);
|
||||
writer.Indent();
|
||||
writer.WriteLine("private readonly bool dispose;");
|
||||
writer.WriteLine("private readonly pb::IRpcDispatch dispatch;");
|
||||
|
||||
writer.WriteLine("public {0}(pb::IRpcDispatch dispatch) : this(dispatch, true) {{", Descriptor.Name);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public {0}(pb::IRpcDispatch dispatch, bool dispose) {{", Descriptor.Name);
|
||||
writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, \"dispatch\");");
|
||||
writer.WriteLine(" this.dispose = dispose && dispatch is global::System.IDisposable;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public void Dispose() {");
|
||||
writer.WriteLine(" if (dispose) ((global::System.IDisposable)dispatch).Dispose();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine(
|
||||
"TMessage pb::IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response) {");
|
||||
writer.WriteLine(" return dispatch.CallMethod(method, request, response);");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine("public {0} {1}({2} {3}) {{", GetClassName(method.OutputType),
|
||||
NameHelpers.UnderscoresToPascalCase(method.Name),
|
||||
GetClassName(method.InputType),
|
||||
NameHelpers.UnderscoresToCamelCase(method.InputType.Name));
|
||||
writer.WriteLine(" return dispatch.CallMethod(\"{0}\", {1}, {2}.CreateBuilder());",
|
||||
method.Name,
|
||||
NameHelpers.UnderscoresToCamelCase(method.InputType.Name),
|
||||
GetClassName(method.OutputType)
|
||||
);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
// SERVER - DISPATCH
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("private readonly bool dispose;");
|
||||
writer.WriteLine("private readonly I{0} implementation;", Descriptor.Name);
|
||||
|
||||
writer.WriteLine("public Dispatch(I{0} implementation) : this(implementation, true) {{",
|
||||
Descriptor.Name);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public Dispatch(I{0} implementation, bool dispose) {{", Descriptor.Name);
|
||||
writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");");
|
||||
writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public void Dispose() {");
|
||||
writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine(
|
||||
"public TMessage CallMethod<TMessage, TBuilder>(string methodName, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response)");
|
||||
writer.WriteLine(" where TMessage : pb::IMessageLite<TMessage, TBuilder>");
|
||||
writer.WriteLine(" where TBuilder : pb::IBuilderLite<TMessage, TBuilder> {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("switch(methodName) {");
|
||||
writer.Indent();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"case \"{0}\": return response.MergeFrom(implementation.{1}(({2})request)).Build();",
|
||||
method.Name, NameHelpers.UnderscoresToPascalCase(method.Name),
|
||||
GetClassName(method.InputType));
|
||||
}
|
||||
writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name);
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end switch
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end invoke
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end server
|
||||
}
|
||||
// SERVER - STUB
|
||||
{
|
||||
if (Descriptor.File.CSharpOptions.ClsCompliance)
|
||||
{
|
||||
writer.WriteLine("[global::System.CLSCompliant(false)]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine(
|
||||
"public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("private readonly bool dispose;");
|
||||
writer.WriteLine("private readonly pb::IRpcDispatch implementation;", Descriptor.Name);
|
||||
|
||||
writer.WriteLine("public ServerStub(I{0} implementation) : this(implementation, true) {{",
|
||||
Descriptor.Name);
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine(
|
||||
"public ServerStub(I{0} implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {{",
|
||||
Descriptor.Name);
|
||||
writer.WriteLine("}");
|
||||
|
||||
writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation, bool dispose) {");
|
||||
writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");");
|
||||
writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine("public void Dispose() {");
|
||||
writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine();
|
||||
|
||||
writer.WriteLine(
|
||||
"public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {{",
|
||||
Descriptor.Name);
|
||||
writer.Indent();
|
||||
writer.WriteLine("switch(methodName) {");
|
||||
writer.Indent();
|
||||
|
||||
foreach (MethodDescriptor method in Descriptor.Methods)
|
||||
{
|
||||
writer.WriteLine(
|
||||
"case \"{0}\": return implementation.CallMethod(methodName, {1}.ParseFrom(input, registry), {2}.CreateBuilder());",
|
||||
method.Name, GetClassName(method.InputType), GetClassName(method.OutputType));
|
||||
}
|
||||
writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name);
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end switch
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end invoke
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}"); //end server
|
||||
}
|
||||
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using Google.ProtocolBuffers.DescriptorProtos;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
internal abstract class SourceGeneratorBase<T> where T : IDescriptor
|
||||
{
|
||||
private readonly T descriptor;
|
||||
|
||||
protected readonly bool OptimizeSpeed;
|
||||
protected readonly bool OptimizeSize;
|
||||
protected readonly bool UseLiteRuntime;
|
||||
protected readonly string RuntimeSuffix;
|
||||
|
||||
protected SourceGeneratorBase(T descriptor)
|
||||
{
|
||||
this.descriptor = descriptor;
|
||||
|
||||
OptimizeSize = descriptor.File.Options.OptimizeFor ==
|
||||
FileOptions.Types.OptimizeMode.CODE_SIZE;
|
||||
OptimizeSpeed = descriptor.File.Options.OptimizeFor ==
|
||||
FileOptions.Types.OptimizeMode.SPEED;
|
||||
UseLiteRuntime = descriptor.File.Options.OptimizeFor ==
|
||||
FileOptions.Types.OptimizeMode.LITE_RUNTIME;
|
||||
//Lite runtime uses OptimizeSpeed code branches
|
||||
OptimizeSpeed |= UseLiteRuntime;
|
||||
RuntimeSuffix = UseLiteRuntime ? "Lite" : "";
|
||||
}
|
||||
|
||||
protected T Descriptor
|
||||
{
|
||||
get { return descriptor; }
|
||||
}
|
||||
|
||||
internal static string GetClassName(IDescriptor descriptor)
|
||||
{
|
||||
return ToCSharpName(descriptor.FullName, descriptor.File);
|
||||
}
|
||||
|
||||
// Groups are hacky: The name of the field is just the lower-cased name
|
||||
// of the group type. In C#, though, we would like to retain the original
|
||||
// capitalization of the type name.
|
||||
internal static string GetFieldName(FieldDescriptor descriptor)
|
||||
{
|
||||
if (descriptor.FieldType == FieldType.Group)
|
||||
{
|
||||
return descriptor.MessageType.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
return descriptor.Name;
|
||||
}
|
||||
}
|
||||
|
||||
internal static string GetFieldConstantName(FieldDescriptor field)
|
||||
{
|
||||
return field.CSharpOptions.PropertyName + "FieldNumber";
|
||||
}
|
||||
|
||||
private static string ToCSharpName(string name, FileDescriptor file)
|
||||
{
|
||||
string result = file.CSharpOptions.Namespace;
|
||||
if (file.CSharpOptions.NestClasses)
|
||||
{
|
||||
if (result != "")
|
||||
{
|
||||
result += ".";
|
||||
}
|
||||
result += file.CSharpOptions.UmbrellaClassname;
|
||||
}
|
||||
if (result != "")
|
||||
{
|
||||
result += '.';
|
||||
}
|
||||
string classname;
|
||||
if (file.Package == "")
|
||||
{
|
||||
classname = name;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Strip the proto package from full_name since we've replaced it with
|
||||
// the C# namespace.
|
||||
classname = name.Substring(file.Package.Length + 1);
|
||||
}
|
||||
result += classname.Replace(".", ".Types.");
|
||||
return "global::" + result;
|
||||
}
|
||||
|
||||
protected string ClassAccessLevel
|
||||
{
|
||||
get { return descriptor.File.CSharpOptions.PublicClasses ? "public" : "internal"; }
|
||||
}
|
||||
|
||||
protected void WriteGeneratedCodeAttributes(TextGenerator writer)
|
||||
{
|
||||
if (descriptor.File.CSharpOptions.GeneratedCodeAttributes)
|
||||
{
|
||||
writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]");
|
||||
writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]",
|
||||
GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version);
|
||||
}
|
||||
}
|
||||
|
||||
protected void WriteChildren<TChild>(TextGenerator writer, string region, IEnumerable<TChild> children)
|
||||
where TChild : IDescriptor
|
||||
{
|
||||
// Copy the set of children; makes access easier
|
||||
List<TChild> copy = new List<TChild>(children);
|
||||
if (copy.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (region != null)
|
||||
{
|
||||
writer.WriteLine("#region {0}", region);
|
||||
}
|
||||
foreach (TChild child in children)
|
||||
{
|
||||
SourceGenerators.CreateGenerator(child).Generate(writer);
|
||||
}
|
||||
if (region != null)
|
||||
{
|
||||
writer.WriteLine("#endregion");
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
#region Copyright notice and license
|
||||
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.Collections.Generic;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
public delegate TResult Func<T, TResult>(T arg);
|
||||
|
||||
internal static class SourceGenerators
|
||||
{
|
||||
private static readonly Dictionary<Type, Func<IDescriptor, ISourceGenerator>> GeneratorFactories =
|
||||
new Dictionary<Type, Func<IDescriptor, ISourceGenerator>>
|
||||
{
|
||||
{typeof(FileDescriptor), descriptor => new UmbrellaClassGenerator((FileDescriptor) descriptor)},
|
||||
{typeof(EnumDescriptor), descriptor => new EnumGenerator((EnumDescriptor) descriptor)},
|
||||
{typeof(ServiceDescriptor), descriptor => new ServiceGenerator((ServiceDescriptor) descriptor)},
|
||||
{typeof(MessageDescriptor), descriptor => new MessageGenerator((MessageDescriptor) descriptor)},
|
||||
// For other fields, we have IFieldSourceGenerators.
|
||||
{typeof(FieldDescriptor), descriptor => new ExtensionGenerator((FieldDescriptor) descriptor)}
|
||||
};
|
||||
|
||||
public static IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor field, int fieldOrdinal)
|
||||
{
|
||||
switch (field.MappedType)
|
||||
{
|
||||
case MappedType.Message:
|
||||
return field.IsRepeated
|
||||
? (IFieldSourceGenerator) new RepeatedMessageFieldGenerator(field, fieldOrdinal)
|
||||
: new MessageFieldGenerator(field, fieldOrdinal);
|
||||
case MappedType.Enum:
|
||||
return field.IsRepeated
|
||||
? (IFieldSourceGenerator) new RepeatedEnumFieldGenerator(field, fieldOrdinal)
|
||||
: new EnumFieldGenerator(field, fieldOrdinal);
|
||||
default:
|
||||
return field.IsRepeated
|
||||
? (IFieldSourceGenerator) new RepeatedPrimitiveFieldGenerator(field, fieldOrdinal)
|
||||
: new PrimitiveFieldGenerator(field, fieldOrdinal);
|
||||
}
|
||||
}
|
||||
|
||||
public static ISourceGenerator CreateGenerator<T>(T descriptor) where T : IDescriptor
|
||||
{
|
||||
Func<IDescriptor, ISourceGenerator> factory;
|
||||
if (!GeneratorFactories.TryGetValue(typeof(T), out factory))
|
||||
{
|
||||
throw new ArgumentException("No generator registered for " + typeof(T).Name);
|
||||
}
|
||||
return factory(descriptor);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,294 +0,0 @@
|
|||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// http://github.com/jskeet/dotnet-protobufs/
|
||||
// Original C++/Java/Python code:
|
||||
// http://code.google.com/p/protobuf/
|
||||
//
|
||||
// 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.
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Google.ProtocolBuffers.Descriptors;
|
||||
|
||||
namespace Google.ProtocolBuffers.ProtoGen
|
||||
{
|
||||
/// <summary>
|
||||
/// Generator for the class describing the .proto file in general,
|
||||
/// containing things like the message descriptor.
|
||||
/// </summary>
|
||||
internal sealed class UmbrellaClassGenerator : SourceGeneratorBase<FileDescriptor>, ISourceGenerator
|
||||
{
|
||||
internal UmbrellaClassGenerator(FileDescriptor descriptor)
|
||||
: base(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
// Recursively searches the given message to see if it contains any extensions.
|
||||
private static bool UsesExtensions(IMessage message)
|
||||
{
|
||||
// We conservatively assume that unknown fields are extensions.
|
||||
if (message.UnknownFields.FieldDictionary.Count > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<FieldDescriptor, object> keyValue in message.AllFields)
|
||||
{
|
||||
FieldDescriptor field = keyValue.Key;
|
||||
if (field.IsExtension)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (field.MappedType == MappedType.Message)
|
||||
{
|
||||
if (field.IsRepeated)
|
||||
{
|
||||
foreach (IMessage subMessage in (IEnumerable) keyValue.Value)
|
||||
{
|
||||
if (UsesExtensions(subMessage))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UsesExtensions((IMessage) keyValue.Value))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Generate(TextGenerator writer)
|
||||
{
|
||||
WriteIntroduction(writer);
|
||||
WriteExtensionRegistration(writer);
|
||||
WriteChildren(writer, "Extensions", Descriptor.Extensions);
|
||||
writer.WriteLine("#region Static variables");
|
||||
foreach (MessageDescriptor message in Descriptor.MessageTypes)
|
||||
{
|
||||
new MessageGenerator(message).GenerateStaticVariables(writer);
|
||||
}
|
||||
writer.WriteLine("#endregion");
|
||||
if (!UseLiteRuntime)
|
||||
{
|
||||
WriteDescriptor(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteLiteExtensions(writer);
|
||||
}
|
||||
// The class declaration either gets closed before or after the children are written.
|
||||
if (!Descriptor.CSharpOptions.NestClasses)
|
||||
{
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
|
||||
// Close the namespace around the umbrella class if defined
|
||||
if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "")
|
||||
{
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
}
|
||||
WriteChildren(writer, "Enums", Descriptor.EnumTypes);
|
||||
WriteChildren(writer, "Messages", Descriptor.MessageTypes);
|
||||
WriteChildren(writer, "Services", Descriptor.Services);
|
||||
if (Descriptor.CSharpOptions.NestClasses)
|
||||
{
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
if (Descriptor.CSharpOptions.Namespace != "")
|
||||
{
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("#endregion Designer generated code");
|
||||
}
|
||||
|
||||
private void WriteIntroduction(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("// Generated by {0}. DO NOT EDIT!", this.GetType().Assembly.FullName);
|
||||
writer.WriteLine("#pragma warning disable 1591, 0612, 3021");
|
||||
writer.WriteLine("#region Designer generated code");
|
||||
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("using pb = global::Google.ProtocolBuffers;");
|
||||
writer.WriteLine("using pbc = global::Google.ProtocolBuffers.Collections;");
|
||||
writer.WriteLine("using pbd = global::Google.ProtocolBuffers.Descriptors;");
|
||||
writer.WriteLine("using scg = global::System.Collections.Generic;");
|
||||
|
||||
if (Descriptor.CSharpOptions.Namespace != "")
|
||||
{
|
||||
writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.Namespace);
|
||||
writer.Indent();
|
||||
writer.WriteLine();
|
||||
}
|
||||
// Add the namespace around the umbrella class if defined
|
||||
if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "")
|
||||
{
|
||||
writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.UmbrellaNamespace);
|
||||
writer.Indent();
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
if (Descriptor.CSharpOptions.CodeContracts)
|
||||
{
|
||||
writer.WriteLine("[global::System.Diagnostics.Contracts.ContractVerificationAttribute(false)]");
|
||||
}
|
||||
writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");
|
||||
WriteGeneratedCodeAttributes(writer);
|
||||
writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel,
|
||||
Descriptor.CSharpOptions.UmbrellaClassname);
|
||||
writer.WriteLine();
|
||||
writer.Indent();
|
||||
}
|
||||
|
||||
private void WriteExtensionRegistration(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("#region Extension registration");
|
||||
writer.WriteLine("public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {");
|
||||
writer.Indent();
|
||||
foreach (FieldDescriptor extension in Descriptor.Extensions)
|
||||
{
|
||||
new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer);
|
||||
}
|
||||
foreach (MessageDescriptor message in Descriptor.MessageTypes)
|
||||
{
|
||||
new MessageGenerator(message).GenerateExtensionRegistrationCode(writer);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("#endregion");
|
||||
}
|
||||
|
||||
private void WriteDescriptor(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("#region Descriptor");
|
||||
|
||||
writer.WriteLine("public static pbd::FileDescriptor Descriptor {");
|
||||
writer.WriteLine(" get { return descriptor; }");
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("private static pbd::FileDescriptor descriptor;");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname);
|
||||
writer.Indent();
|
||||
writer.WriteLine("byte[] descriptorData = global::System.Convert.FromBase64String(");
|
||||
writer.Indent();
|
||||
writer.Indent();
|
||||
writer.WriteLine("string.Concat(");
|
||||
writer.Indent();
|
||||
// TODO(jonskeet): Consider a C#-escaping format here instead of just Base64.
|
||||
byte[] bytes = Descriptor.Proto.ToByteArray();
|
||||
string base64 = Convert.ToBase64String(bytes);
|
||||
|
||||
while (base64.Length > 60)
|
||||
{
|
||||
writer.WriteLine("\"{0}\", ", base64.Substring(0, 60));
|
||||
base64 = base64.Substring(60);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("\"{0}\"));", base64);
|
||||
writer.Outdent();
|
||||
writer.Outdent();
|
||||
writer.WriteLine(
|
||||
"pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {");
|
||||
writer.Indent();
|
||||
writer.WriteLine("descriptor = root;");
|
||||
foreach (MessageDescriptor message in Descriptor.MessageTypes)
|
||||
{
|
||||
new MessageGenerator(message).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
foreach (FieldDescriptor extension in Descriptor.Extensions)
|
||||
{
|
||||
new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
|
||||
if (UsesExtensions(Descriptor.Proto))
|
||||
{
|
||||
// Must construct an ExtensionRegistry containing all possible extensions
|
||||
// and return it.
|
||||
writer.WriteLine("pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();");
|
||||
writer.WriteLine("RegisterAllExtensions(registry);");
|
||||
foreach (FileDescriptor dependency in Descriptor.Dependencies)
|
||||
{
|
||||
writer.WriteLine("{0}.RegisterAllExtensions(registry);",
|
||||
DescriptorUtil.GetFullUmbrellaClassName(dependency));
|
||||
}
|
||||
writer.WriteLine("return registry;");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteLine("return null;");
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("};");
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// Invoke internalBuildGeneratedFileFrom() to build the file.
|
||||
writer.WriteLine("pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,");
|
||||
writer.WriteLine(" new pbd::FileDescriptor[] {");
|
||||
foreach (FileDescriptor dependency in Descriptor.Dependencies)
|
||||
{
|
||||
writer.WriteLine(" {0}.Descriptor, ", DescriptorUtil.GetFullUmbrellaClassName(dependency));
|
||||
}
|
||||
writer.WriteLine(" }, assigner);");
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("#endregion");
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private void WriteLiteExtensions(TextGenerator writer)
|
||||
{
|
||||
writer.WriteLine("#region Extensions");
|
||||
writer.WriteLine("internal static readonly object Descriptor;");
|
||||
writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname);
|
||||
writer.Indent();
|
||||
writer.WriteLine("Descriptor = null;");
|
||||
|
||||
foreach (MessageDescriptor message in Descriptor.MessageTypes)
|
||||
{
|
||||
new MessageGenerator(message).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
foreach (FieldDescriptor extension in Descriptor.Extensions)
|
||||
{
|
||||
new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);
|
||||
}
|
||||
writer.Outdent();
|
||||
writer.WriteLine("}");
|
||||
writer.WriteLine("#endregion");
|
||||
writer.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup useLegacyV2RuntimeActivationPolicy="true">
|
||||
<supportedRuntime version="v2.0.50727" />
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
|
||||
</startup>
|
||||
</configuration>
|
|
@ -1,101 +0,0 @@
|
|||
<?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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{250ADE34-82FD-4BAE-86D5-985FBE589C4B}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>
|
||||
<AssemblyName>protoc-gen-cs</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<StartupObject>Google.ProtocolBuffers.ProtoGen.ProtocGenCs</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DescriptorUtil.cs" />
|
||||
<Compile Include="EnumFieldGenerator.cs" />
|
||||
<Compile Include="EnumGenerator.cs" />
|
||||
<Compile Include="ExtensionGenerator.cs" />
|
||||
<Compile Include="FieldGeneratorBase.cs" />
|
||||
<Compile Include="IFieldSourceGenerator.cs" />
|
||||
<Compile Include="ISourceGenerator.cs" />
|
||||
<Compile Include="MessageFieldGenerator.cs" />
|
||||
<Compile Include="MessageGenerator.cs" />
|
||||
<Compile Include="PluginProtoFile.cs" />
|
||||
<Compile Include="PrimitiveFieldGenerator.cs" />
|
||||
<Compile Include="ProtocGenCs.cs" />
|
||||
<Compile Include="RepeatedEnumFieldGenerator.cs" />
|
||||
<Compile Include="RepeatedMessageFieldGenerator.cs" />
|
||||
<Compile Include="RepeatedPrimitiveFieldGenerator.cs" />
|
||||
<Compile Include="ServiceGenerator.cs" />
|
||||
<Compile Include="DependencyResolutionException.cs" />
|
||||
<Compile Include="Generator.cs" />
|
||||
<Compile Include="GeneratorOptions.cs" />
|
||||
<Compile Include="Helpers.cs" />
|
||||
<Compile Include="InvalidOptionsException.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServiceInterfaceGenerator.cs" />
|
||||
<Compile Include="SourceGeneratorBase.cs" />
|
||||
<Compile Include="SourceGenerators.cs" />
|
||||
<Compile Include="UmbrellaClassGenerator.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj">
|
||||
<Project>{231391af-449c-4a39-986c-ad7f270f4750}</Project>
|
||||
<Name>ProtocolBuffers.Serialization</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -63,7 +63,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt32 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected abstract bool Read(ref uint value);
|
||||
|
||||
/// <summary>
|
||||
|
@ -74,7 +73,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt64 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected abstract bool Read(ref ulong value);
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -62,7 +62,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt32 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override bool Read(ref uint value)
|
||||
{
|
||||
string text = null;
|
||||
|
@ -91,7 +90,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt64 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override bool Read(ref ulong value)
|
||||
{
|
||||
string text = null;
|
||||
|
|
|
@ -48,7 +48,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt32 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override void Write(string field, uint value)
|
||||
{
|
||||
WriteAsText(field, XmlConvert.ToString(value), value);
|
||||
|
@ -65,7 +64,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt64 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override void Write(string field, ulong value)
|
||||
{
|
||||
WriteAsText(field, XmlConvert.ToString(value), value);
|
||||
|
|
|
@ -59,7 +59,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt32 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected abstract void Write(string field, UInt32 value);
|
||||
|
||||
/// <summary>
|
||||
|
@ -70,7 +69,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt64 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected abstract void Write(string field, UInt64 value);
|
||||
|
||||
/// <summary>
|
||||
|
@ -185,7 +183,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a numeric unknown field of wire type: Fixed32, Fixed64, or Variant
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ulong value)
|
||||
{
|
||||
}
|
||||
|
@ -193,7 +190,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes an unknown field, Expect WireType of GroupStart or LengthPrefix
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ByteString value)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -118,7 +118,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt32 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override bool Read(ref uint value)
|
||||
{
|
||||
return GetValue(ref value);
|
||||
|
@ -135,7 +134,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Returns true if it was able to read a UInt64 from the input
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override bool Read(ref ulong value)
|
||||
{
|
||||
return GetValue(ref value);
|
||||
|
|
|
@ -85,7 +85,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt32 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override void Write(string field, uint value)
|
||||
{
|
||||
_output[field] = value;
|
||||
|
@ -102,7 +101,6 @@ namespace Google.ProtocolBuffers.Serialization
|
|||
/// <summary>
|
||||
/// Writes a UInt64 value
|
||||
/// </summary>
|
||||
[CLSCompliant(false)]
|
||||
protected override void Write(string field, ulong value)
|
||||
{
|
||||
_output[field] = value;
|
||||
|
|
|
@ -180,34 +180,6 @@ namespace Google.ProtocolBuffers
|
|||
return builder;
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region IRpcServerStub Extensions
|
||||
|
||||
/// <summary>
|
||||
/// Used to implement a service endpoint on an HTTP server. This works with services generated with the
|
||||
/// service_generator_type option set to IRPCDISPATCH.
|
||||
/// </summary>
|
||||
/// <param name="stub">The service execution stub</param>
|
||||
/// <param name="methodName">The name of the method being invoked</param>
|
||||
/// <param name="options">optional arguments for the format reader/writer</param>
|
||||
/// <param name="contentType">The mime type for the input stream</param>
|
||||
/// <param name="input">The input stream</param>
|
||||
/// <param name="responseType">The mime type for the output stream</param>
|
||||
/// <param name="output">The output stream</param>
|
||||
public static void HttpCallMethod(
|
||||
#if !NOEXTENSIONS
|
||||
this
|
||||
#endif
|
||||
IRpcServerStub stub, string methodName, MessageFormatOptions options,
|
||||
string contentType, Stream input, string responseType, Stream output)
|
||||
{
|
||||
ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
|
||||
codedInput.ReadMessageStart();
|
||||
IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry);
|
||||
codedInput.ReadMessageEnd();
|
||||
WriteTo(response, options, responseType, output);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,5 +63,3 @@ using System.Runtime.CompilerServices;
|
|||
#if !NOFILEVERSION
|
||||
[assembly: AssemblyFileVersion("2.4.1.555")]
|
||||
#endif
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
|
@ -1,104 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\CF20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\CF20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF20.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,104 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF35</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\CF35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\CF35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF35.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET20.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="3.5" 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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET35.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET40</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET40.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,95 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>PL40</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
|
||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkProfile>Profile1</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\PL40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\PL40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.PL40.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,107 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\SL20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\SL20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL20.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,107 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL30</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\SL30\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\SL30\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL30.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,108 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL40</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
<SilverlightVersion>v4.0</SilverlightVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\SL40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\SL40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL40.csproj">
|
||||
<Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffers</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,104 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\CF20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\CF20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF20.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,104 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>CF35</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PlatformFamilyName>Smartphone</PlatformFamilyName>
|
||||
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\CF35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\CF35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF35.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
|
||||
<HostingProcess disable="1" />
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET20.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="3.5" 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>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET35\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET35\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET35.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,92 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>NET40</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\NET40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\NET40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET40.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,95 +0,0 @@
|
|||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>PL40</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
|
||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkProfile>Profile1</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\PL40\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\PL40\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.PL40.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,107 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL20</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\SL20\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\SL20\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL20.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,107 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">
|
||||
<PropertyGroup>
|
||||
<EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>
|
||||
<EnvironmentTemplate>SL30</EnvironmentTemplate>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>
|
||||
<AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<SilverlightApplication>false</SilverlightApplication>
|
||||
<ValidateXaml>false</ValidateXaml>
|
||||
<ThrowErrorsInValidation>false</ThrowErrorsInValidation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\SL30\Debug</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\SL30\Release</OutputPath>
|
||||
<IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>
|
||||
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
|
||||
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
|
||||
<DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoStdLib>true</NoStdLib>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<NoConfig>true</NoConfig>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">
|
||||
<Link>FrameworkPortability.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Http\FormUrlEncodedReader.cs" />
|
||||
<Compile Include="Http\MessageFormatFactory.cs" />
|
||||
<Compile Include="Http\MessageFormatOptions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AbstractReader.cs" />
|
||||
<Compile Include="AbstractTextReader.cs" />
|
||||
<Compile Include="AbstractTextWriter.cs" />
|
||||
<Compile Include="AbstractWriter.cs" />
|
||||
<Compile Include="DictionaryReader.cs" />
|
||||
<Compile Include="DictionaryWriter.cs" />
|
||||
<Compile Include="JsonFormatReader.cs" />
|
||||
<Compile Include="JsonFormatWriter.cs" />
|
||||
<Compile Include="JsonTextCursor.cs" />
|
||||
<Compile Include="RecursionLimitExceeded.cs" />
|
||||
<Compile Include="XmlFormatReader.cs" />
|
||||
<Compile Include="XmlFormatWriter.cs" />
|
||||
<Compile Include="XmlReaderOptions.cs" />
|
||||
<Compile Include="XmlWriterOptions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL30.csproj">
|
||||
<Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
|
||||
<Name>ProtocolBuffersLite</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
||||
<SilverlightProjectProperties>
|
||||
<StartAction>OfflineApplication</StartAction>
|
||||
</SilverlightProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- 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.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue