using System; using System.Collections; using System.Xml; using System.Reflection; using Mono.Cecil; namespace Stetic { class CecilSignalDescriptor: Stetic.SignalDescriptor { public CecilSignalDescriptor (CecilWidgetLibrary lib, XmlElement elem, Stetic.ItemGroup group, Stetic.ClassDescriptor klass, EventDefinition sinfo) : base (elem, group, klass) { if (sinfo != null) { string handler = sinfo.EventType.FullName; handlerTypeName = handler.Replace ('/','+'); Type t = Registry.GetType (handler, false); if (t != null) { MethodInfo mi = t.GetMethod ("Invoke"); handlerReturnTypeName = mi.ReturnType.FullName; ParameterInfo[] pars = mi.GetParameters (); handlerParameters = new ParameterDescriptor [pars.Length]; for (int n=0; n', ']'); } TypeDefinition td = lib.FindTypeDefinition (tn); if (td != null) { MethodDefinition mi = null; foreach (MethodDefinition md in td.Methods) { if (md.Name == "Invoke") { mi = md; break; } } if (mi != null) { handlerReturnTypeName = CecilWidgetLibrary.GetInstanceType (td, sinfo.EventType, mi.ReturnType); handlerParameters = new ParameterDescriptor [mi.Parameters.Count]; for (int n=0; n