From 000b46b985823ba21926d68926c052e5806c8c49 Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Tue, 13 Sep 2016 18:37:42 +0200 Subject: [PATCH] =?utf8?q?move=20recurent=20reflexion=20to=20static=20in?= =?utf8?q?=20CompilerServices=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20?= =?utf8?q?=20=20=20src/CompilerServices/CompilerServices.cs=20=09modifi?= =?utf8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20src/IMLReader.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/CompilerServices/CompilerServices.cs | 10 ++++++++- src/IMLReader.cs | 26 ++++++++---------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs index 43c9d704..48f95a8a 100644 --- a/src/CompilerServices/CompilerServices.cs +++ b/src/CompilerServices/CompilerServices.cs @@ -18,7 +18,15 @@ namespace Crow static MethodInfo stringEquals = typeof (string).GetMethod ("Equals", new Type [3] { typeof (string), typeof (string), typeof (StringComparison) }); static MethodInfo miFindByName = typeof (GraphicObject).GetMethod ("FindByName"); - + + public static MethodInfo miIFaceLoad = typeof(Interface).GetMethod ("Load", BindingFlags.Instance | BindingFlags.Public); + public static MethodInfo miGetITemp = typeof(Interface).GetMethod ("GetItemTemplate"); + public static MethodInfo miAddITemp = typeof(Dictionary). + GetMethod ("set_Item", new Type[] { typeof(string), typeof(ItemTemplate) }); + public static MethodInfo miGetITempFromDic = typeof(Dictionary). + GetMethod ("get_Item", new Type[] { typeof(string) }); + public static FieldInfo fldItemTemplates = typeof(TemplatedGroup).GetField("ItemTemplates"); + public static MethodInfo miCreateExpDel = typeof(ItemTemplate).GetMethod ("CreateExpandDelegate"); #region ValueChange Reflexion member info static EventInfo eiValueChange = typeof (IValueChange).GetEvent ("ValueChanged"); diff --git a/src/IMLReader.cs b/src/IMLReader.cs index ad4fd835..1fae7a22 100644 --- a/src/IMLReader.cs +++ b/src/IMLReader.cs @@ -120,7 +120,7 @@ namespace Crow inlineTemplate = true; reader.Read (); - readChildren (reader, crowType,true); + readChildren (reader, crowType, true); } else if (reader.Name == "ItemTemplate") { string dataType = "default", datas = "", path = ""; while (reader.MoveToNextAttribute ()) { @@ -160,35 +160,27 @@ namespace Crow reader.il.Emit (OpCodes.Ldarg_1);//load currentInterface reader.il.Emit (OpCodes.Ldstr, templatePath); //Load template path string reader.il.Emit (OpCodes.Callvirt,//call Interface.Load(path) - typeof(Interface).GetMethod ("Load", BindingFlags.Instance | BindingFlags.Public)); + CompilerServices.miIFaceLoad); } reader.il.Emit (OpCodes.Callvirt,//load template crowType.GetMethod ("loadTemplate", BindingFlags.Instance | BindingFlags.NonPublic)); } foreach (string[] iTempId in itemTemplateIds) { reader.il.Emit (OpCodes.Ldloc_0);//load TempControl ref - reader.il.Emit (OpCodes.Ldfld,//load ItemTemplates dic field - typeof(TemplatedGroup).GetField("ItemTemplates")); + reader.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates);//load ItemTemplates dic field reader.il.Emit (OpCodes.Ldstr, iTempId[0]);//load key reader.il.Emit (OpCodes.Ldstr, iTempId[1]);//load value - reader.il.Emit (OpCodes.Callvirt, - typeof(Interface).GetMethod ("GetItemTemplate")); - reader.il.Emit (OpCodes.Callvirt, - typeof(Dictionary).GetMethod ("set_Item", - new Type[] { typeof(string), typeof(ItemTemplate) })); + reader.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITemp); + reader.il.Emit (OpCodes.Callvirt, CompilerServices.miAddITemp); if (!string.IsNullOrEmpty (iTempId [2])) { //expand delegate creation reader.il.Emit (OpCodes.Ldloc_0);//load TempControl ref - reader.il.Emit (OpCodes.Ldfld,//load ItemTemplates dic field - typeof(TemplatedGroup).GetField ("ItemTemplates")); + reader.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates); reader.il.Emit (OpCodes.Ldstr, iTempId [0]);//load key - reader.il.Emit (OpCodes.Callvirt, - typeof(Dictionary).GetMethod ("get_Item", - new Type[] { typeof(string) })); + reader.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITempFromDic); reader.il.Emit (OpCodes.Ldloc_0);//load root of treeView - reader.il.Emit (OpCodes.Callvirt, - typeof(ItemTemplate).GetMethod ("CreateExpandDelegate")); + reader.il.Emit (OpCodes.Callvirt, CompilerServices.miCreateExpDel); } } } @@ -305,8 +297,6 @@ namespace Crow reader.emitLoader (t); reader.il.Emit (OpCodes.Ldloc_0);//load child on stack for parenting - if (miAddChild == null) - System.Diagnostics.Debugger.Break (); reader.il.Emit (OpCodes.Callvirt, miAddChild); reader.il.Emit (OpCodes.Stloc_0); //reset local to current go reader.il.Emit (OpCodes.Ldloc_0);//save current go onto the stack if child has to be added -- 2.47.3