diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-09-13 14:44:26 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-09-13 14:44:26 +0200 |
| commit | 2616e6ee7a1a34036cc002d28543d0d7a657fdb2 (patch) | |
| tree | e48dacb4209e95cb963de76cb6fe1ffca07e77c1 /src/CompilerServices/CompilerServices.cs | |
| parent | b7786bbd327699b0a8dd30d5ca86fc20f28f5617 (diff) | |
Merge improvements from CrowIDE
modifié : Templates/DirectoryView.template
modifié : Templates/Menu.template
modifié : Templates/MenuItem.template
modifié : Templates/Window.template
modifié : Tests/Interfaces/Divers/0.crow
modifié : src/CompilerServices/CompilerServices.cs
modifié : src/ExtensionsMethods.cs
modifié : src/GraphicObjects/DirectoryView.cs
modifié : src/GraphicObjects/GraphicObject.cs
modifié : src/GraphicObjects/Group.cs
modifié : src/GraphicObjects/TreeView.cs
modifié : src/GraphicObjects/Wrapper.cs
modifié : src/IMLReader.cs
modifié : src/Interface.cs
modifié : src/ItemTemplate.cs
modifié : src/LayoutingQueueItem.cs
modifié : src/Measure.cs
modifié : src/Point.cs
Diffstat (limited to 'src/CompilerServices/CompilerServices.cs')
| -rw-r--r-- | src/CompilerServices/CompilerServices.cs | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs index d6f036ab..43c9d704 100644 --- a/src/CompilerServices/CompilerServices.cs +++ b/src/CompilerServices/CompilerServices.cs @@ -17,15 +17,19 @@ namespace Crow BindingFlags.NonPublic | BindingFlags.Instance); static MethodInfo stringEquals = typeof (string).GetMethod ("Equals", new Type [3] { typeof (string), typeof (string), typeof (StringComparison) }); - static FieldInfo fiNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue"); - static FieldInfo fiMbName = typeof (ValueChangeEventArgs).GetField ("MemberName"); - static EventInfo eiValueChanged = typeof (IValueChange).GetEvent ("ValueChanged"); - static Type [] dmValueChangedArgs = { typeof (object), typeof (object), - eiValueChanged.EventHandlerType.GetMethod ("Invoke"). - GetParameters ()[1].ParameterType }; static MethodInfo miFindByName = typeof (GraphicObject).GetMethod ("FindByName"); + #region ValueChange Reflexion member info + static EventInfo eiValueChange = typeof (IValueChange).GetEvent ("ValueChanged"); + static MethodInfo miInvokeValueChange = eiValueChange.EventHandlerType.GetMethod ("Invoke"); + static Type [] argsValueChange = { typeof (object), typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType }; + static FieldInfo fiNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue"); + static FieldInfo fiMbName = typeof (ValueChangeEventArgs).GetField ("MemberName"); + static MethodInfo miValueChangeAdd = eiValueChange.GetAddMethod (); + #endregion + + public static void emitSetCurInterface(ILGenerator il){ il.Emit (OpCodes.Ldloc_0); il.Emit (OpCodes.Ldarg_1); @@ -229,7 +233,7 @@ namespace Crow MethodAttributes.Family | MethodAttributes.FamANDAssem | MethodAttributes.NewSlot, CallingConventions.Standard, typeof (void), - dmValueChangedArgs, + argsValueChange, target_Type, true); il = dm.GetILGenerator (256); @@ -377,9 +381,8 @@ namespace Crow il.Emit (OpCodes.Pop); il.Emit (OpCodes.Ret); - Delegate del = dm.CreateDelegate (eiValueChanged.EventHandlerType, Bindings [0].Source.Instance); - MethodInfo addHandler = eiValueChanged.GetAddMethod (); - addHandler.Invoke (grouped [0].Target.Instance, new object [] { del }); + Delegate del = dm.CreateDelegate (eiValueChange.EventHandlerType, Bindings [0].Source.Instance); + miValueChangeAdd.Invoke (grouped [0].Target.Instance, new object [] { del }); } } @@ -589,6 +592,17 @@ namespace Crow return query; } + + public static MethodInfo SearchExtMethod(Type t, string methodName){ + MethodInfo mi = null; + mi = GetExtensionMethods (Assembly.GetEntryAssembly(), t) + .Where (em => em.Name == methodName).FirstOrDefault (); + if (mi != null) + return mi; + + return GetExtensionMethods (Assembly.GetExecutingAssembly(), t) + .Where (em => em.Name == methodName).FirstOrDefault (); + } } } |