From: jpbruyere Date: Tue, 13 Sep 2016 16:37:42 +0000 (+0200) Subject: move recurent reflexion to static in CompilerServices X-Git-Tag: v0.5.1~63^2~45 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=000b46b985823ba21926d68926c052e5806c8c49;p=jp%2Fcrow.git move recurent reflexion to static in CompilerServices modifié : src/CompilerServices/CompilerServices.cs modifié : src/IMLReader.cs --- 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