Skip to content

Commit

Permalink
Add UniversalCodeGenerator(.NET Core linux-x64,osx-x64, win-x64) proj…
Browse files Browse the repository at this point in the history
…ect.
  • Loading branch information
neuecc committed Dec 12, 2018
1 parent 3ef4751 commit b71cd0e
Show file tree
Hide file tree
Showing 14 changed files with 5,181 additions and 5 deletions.
26 changes: 22 additions & 4 deletions MessagePack.sln
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{344DC89D-8
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sandbox", "sandbox", "{BF4C4202-5015-4FBD-80E6-D0F36A06F700}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sandbox", "sandbox\Sandbox\Sandbox.csproj", "{ED43BDA5-947C-4769-A47A-F07D3C6142AE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sandbox", "sandbox\Sandbox\Sandbox.csproj", "{ED43BDA5-947C-4769-A47A-F07D3C6142AE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePack.CodeGenerator", "src\MessagePack.CodeGenerator\MessagePack.CodeGenerator.csproj", "{D8B195AC-9E93-438E-8331-EF3A1F613D0B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicCodeDumper", "sandbox\DynamicCodeDumper\DynamicCodeDumper.csproj", "{8E511130-F838-4B47-842B-0FB27AD175B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedData", "sandbox\SharedData\SharedData.csproj", "{3ABC5C4C-2CE4-459E-8666-F2B181C3DEF3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePack.UnityShims", "src\MessagePack.UnityShims\MessagePack.UnityShims.csproj", "{C01E1407-7FEC-4C1D-B0B4-74D95A317AA6}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagePack.UnityShims", "src\MessagePack.UnityShims\MessagePack.UnityShims.csproj", "{C01E1407-7FEC-4C1D-B0B4-74D95A317AA6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePack.ReactiveProperty", "src\MessagePack.ReactiveProperty\MessagePack.ReactiveProperty.csproj", "{166A16C0-B89F-41AF-956A-235C6CA62C25}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagePack.ReactiveProperty", "src\MessagePack.ReactiveProperty\MessagePack.ReactiveProperty.csproj", "{166A16C0-B89F-41AF-956A-235C6CA62C25}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagePack.ImmutableCollection", "src\MessagePack.ImmutableCollection\MessagePack.ImmutableCollection.csproj", "{E066F547-7261-4561-AEFC-E64DBFD874F8}"
EndProject
Expand All @@ -49,12 +49,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePackAnalyzer.Vsix",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PertNetFramework", "sandbox\PertNetFramework\PertNetFramework.csproj", "{014A3DCE-50A6-4774-A4C1-C66EEAB67133}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePack.AspNetCoreMvcFormatter", "src\MessagePack.AspNetCoreMvcFormatter\MessagePack.AspNetCoreMvcFormatter.csproj", "{17831017-C29C-4A48-B159-849BCE5079FB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagePack.AspNetCoreMvcFormatter", "src\MessagePack.AspNetCoreMvcFormatter\MessagePack.AspNetCoreMvcFormatter.csproj", "{17831017-C29C-4A48-B159-849BCE5079FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerfBenchmarkDotNet", "sandbox\PerfBenchmarkDotNet\PerfBenchmarkDotNet.csproj", "{814F94D6-1413-4ACB-B1B5-A3488CAA1E6B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestData2", "sandbox\TestData2\TestData2.csproj", "{2A32A538-BA26-4D89-85D0-E4249AFA0837}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagePack.UniversalCodeGenerator", "src\MessagePack.UniversalCodeGenerator\MessagePack.UniversalCodeGenerator.csproj", "{10AD85DD-929D-49B8-BD43-45242C2644B7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -245,6 +247,18 @@ Global
{2A32A538-BA26-4D89-85D0-E4249AFA0837}.Release|x64.Build.0 = Release|Any CPU
{2A32A538-BA26-4D89-85D0-E4249AFA0837}.Release|x86.ActiveCfg = Release|Any CPU
{2A32A538-BA26-4D89-85D0-E4249AFA0837}.Release|x86.Build.0 = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|x64.ActiveCfg = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|x64.Build.0 = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|x86.ActiveCfg = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Debug|x86.Build.0 = Debug|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|Any CPU.Build.0 = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|x64.ActiveCfg = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|x64.Build.0 = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|x86.ActiveCfg = Release|Any CPU
{10AD85DD-929D-49B8-BD43-45242C2644B7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -265,5 +279,9 @@ Global
{17831017-C29C-4A48-B159-849BCE5079FB} = {86309CF6-0054-4CE3-BFD3-CA0AA7DB17BC}
{814F94D6-1413-4ACB-B1B5-A3488CAA1E6B} = {BF4C4202-5015-4FBD-80E6-D0F36A06F700}
{2A32A538-BA26-4D89-85D0-E4249AFA0837} = {BF4C4202-5015-4FBD-80E6-D0F36A06F700}
{10AD85DD-929D-49B8-BD43-45242C2644B7} = {86309CF6-0054-4CE3-BFD3-CA0AA7DB17BC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {26F0752B-06F7-44AD-BFEE-8F2E36B3AA27}
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Microsoft.Build.MSBuildLocator.1.0.1-preview-g6cd9a57801\build\Microsoft.Build.MSBuildLocator.props" Condition="Exists('..\..\packages\Microsoft.Build.MSBuildLocator.1.0.1-preview-g6cd9a57801\build\Microsoft.Build.MSBuildLocator.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand Down
163 changes: 163 additions & 0 deletions src/MessagePack.UniversalCodeGenerator/CodeAnalysis/Definitions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MessagePack.CodeGenerator
{
public interface IResolverRegisterInfo
{
string FullName { get; }
string FormatterName { get; }
}

public class ObjectSerializationInfo : IResolverRegisterInfo
{
public string Name { get; set; }
public string FullName { get; set; }
public string Namespace { get; set; }
public bool IsIntKey { get; set; }
public bool IsStringKey { get { return !IsIntKey; } }
public bool IsClass { get; set; }
public bool IsStruct { get { return !IsClass; } }
public MemberSerializationInfo[] ConstructorParameters { get; set; }
public MemberSerializationInfo[] Members { get; set; }
public bool HasIMessagePackSerializationCallbackReceiver { get; set; }
public bool NeedsCastOnBefore { get; set; }
public bool NeedsCastOnAfter { get; set; }
public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";

public int WriteCount
{
get
{
if (IsStringKey)
{
return Members.Count(x => x.IsReadable);
}
else
{
return MaxKey;
}
}
}

public int MaxKey
{
get
{
return Members.Where(x => x.IsReadable).Select(x => x.IntKey).DefaultIfEmpty(-1).Max();
}
}

public MemberSerializationInfo GetMember(int index)
{
return Members.FirstOrDefault(x => x.IntKey == index);
}

public string GetConstructorString()
{
var args = string.Join(", ", ConstructorParameters.Select(x => "__" + x.Name + "__"));
return $"{FullName}({args})";
}
}

public class MemberSerializationInfo
{
public bool IsProperty { get; set; }
public bool IsField { get; set; }
public bool IsWritable { get; set; }
public bool IsReadable { get; set; }
public int IntKey { get; set; }
public string StringKey { get; set; }
public string Type { get; set; }
public string Name { get; set; }
public string ShortTypeName { get; set; }

readonly HashSet<string> primitiveTypes = new HashSet<string>(new string[]
{
"short",
"int",
"long",
"ushort",
"uint",
"ulong",
"float",
"double",
"bool",
"byte",
"sbyte",
"char",
//"global::System.DateTime",
//"byte[]",
//"string",
});

public string GetSerializeMethodString()
{
if (primitiveTypes.Contains(Type))
{
return $"MessagePackBinary.Write{ShortTypeName.Replace("[]", "s")}(ref bytes, offset, value.{Name})";
}
else
{
return $"formatterResolver.GetFormatterWithVerify<{Type}>().Serialize(ref bytes, offset, value.{Name}, formatterResolver)";
}
}

public string GetDeserializeMethodString()
{
if (primitiveTypes.Contains(Type))
{
return $"MessagePackBinary.Read{ShortTypeName.Replace("[]", "s")}(bytes, offset, out readSize)";
}
else
{
return $"formatterResolver.GetFormatterWithVerify<{Type}>().Deserialize(bytes, offset, formatterResolver, out readSize)";
}
}
}

public class EnumSerializationInfo : IResolverRegisterInfo
{
public string Namespace { get; set; }
public string Name { get; set; }
public string FullName { get; set; }
public string UnderlyingType { get; set; }

public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";
}

public class GenericSerializationInfo : IResolverRegisterInfo, IEquatable<GenericSerializationInfo>
{
public string FullName { get; set; }

public string FormatterName { get; set; }

public bool Equals(GenericSerializationInfo other)
{
return FullName.Equals(other.FullName);
}

public override int GetHashCode()
{
return FullName.GetHashCode();
}
}

public class UnionSerializationInfo : IResolverRegisterInfo
{
public string Namespace { get; set; }
public string Name { get; set; }
public string FullName { get; set; }
public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";
public UnionSubTypeInfo[] SubTypes { get; set; }
}

public class UnionSubTypeInfo
{
public string Type { get; set; }
public int Key { get; set; }
}
}

0 comments on commit b71cd0e

Please sign in to comment.