From ba466ff916025cae2fee07cc52bb485cf6b19386 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 6 Feb 2019 19:53:04 +0900 Subject: [PATCH] Separate GenericConstructor.cs --- .../VRM/UniJSON/Scripts/GenericConstructor.cs | 53 +++++++++++++++++++ .../Scripts/GenericConstructor.cs.meta | 12 +++++ .../ListTreeNodeDeserializerExtensions.cs | 47 ---------------- 3 files changed, 65 insertions(+), 47 deletions(-) create mode 100644 Assets/VRM/UniJSON/Scripts/GenericConstructor.cs create mode 100644 Assets/VRM/UniJSON/Scripts/GenericConstructor.cs.meta diff --git a/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs b/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs new file mode 100644 index 000000000..003044ed6 --- /dev/null +++ b/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs @@ -0,0 +1,53 @@ +using System; +using System.Reflection; + + +namespace UniJSON +{ + struct GenericConstructor + where T : IListTreeItem, IValue + { + static V[] ArrayCreator(ListTreeNode src) + { + if (!src.IsArray()) + { + throw new ArgumentException("value is not array"); + } + var count = src.GetArrayCount(); + return new V[count]; + } + + static Func, U> GetCreator() + { + var t = typeof(U); + if (t.IsArray) + { + var mi = typeof(GenericConstructor).GetMethod("ArrayCreator", + BindingFlags.NonPublic | BindingFlags.Static); + var g = mi.MakeGenericMethod(t.GetElementType()); + return GenericInvokeCallFactory.StaticFunc, U>(g); + } + + { + return _s => + { + return Activator.CreateInstance(); + }; + } + } + + delegate U Creator(ListTreeNode src); + + static Creator s_creator; + + public U Create(ListTreeNode src) + { + if (s_creator == null) + { + var d = GetCreator(); + s_creator = new Creator(d); + } + return s_creator(src); + } + } +} diff --git a/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs.meta b/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs.meta new file mode 100644 index 000000000..dff4825a4 --- /dev/null +++ b/Assets/VRM/UniJSON/Scripts/GenericConstructor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6121925cab5acc54bbb0e0e213783394 +timeCreated: 1549447177 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM/UniJSON/Scripts/ListTreeNode/ListTreeNodeDeserializerExtensions.cs b/Assets/VRM/UniJSON/Scripts/ListTreeNode/ListTreeNodeDeserializerExtensions.cs index b41eab5a0..9a55a7da3 100644 --- a/Assets/VRM/UniJSON/Scripts/ListTreeNode/ListTreeNodeDeserializerExtensions.cs +++ b/Assets/VRM/UniJSON/Scripts/ListTreeNode/ListTreeNodeDeserializerExtensions.cs @@ -8,53 +8,6 @@ namespace UniJSON { public static class ListTreeNodeDeserializerExtensions { - struct GenericCreator - where T : IListTreeItem, IValue - { - static V[] ArrayCreator(ListTreeNode src) - { - if (!src.IsArray()) - { - throw new ArgumentException("value is not array"); - } - var count = src.GetArrayCount(); - return new V[count]; - } - - static Func, U> GetCreator() - { - var t = typeof(U); - if (t.IsArray) - { - var mi = typeof(GenericCreator).GetMethod("ArrayCreator", - BindingFlags.NonPublic | BindingFlags.Static); - var g = mi.MakeGenericMethod(t.GetElementType()); - return GenericInvokeCallFactory.StaticFunc, U>(g); - } - - { - return _s => - { - return Activator.CreateInstance(); - }; - } - } - - delegate U Creator(ListTreeNode src); - - static Creator s_creator; - - public U Create(ListTreeNode src) - { - if (s_creator == null) - { - var d = GetCreator(); - s_creator = new Creator(d); - } - return s_creator(src); - } - } - static object DictionaryDeserializer(ListTreeNode s) where T : IListTreeItem, IValue {