private List <Types.MetaDataInfo> getDynamicEvents(Assembly assembly)
        {
            List <Types.MetaDataInfo> result = new List <Types.MetaDataInfo>();

            foreach (Type t in assembly.GetTypes())
            {
                foreach (MethodInfo method in t.GetMethods(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
                {
                    Types.MetaDataInfo m = new Types.MetaDataInfo();
                    foreach (Object Attr in method.GetCustomAttributes(false))
                    {
                        if (Attr.GetType().Name.ToLower().StartsWith("eventhandler"))
                        {
                            m.Name = method.Name;
                        }
                        if (Attr.GetType().Name.ToLower().StartsWith("description"))
                        {
                            m.Description = Attr.ToString();
                        }
                    }
                    if (m.Name != null && m.Name.Length > 2)
                    {
                        if (m.Name.Substring(0, 2).ToLower() == "on")
                        {
                            m.Name = m.Name.Substring(2);
                        }
                        result.Add(m);
                    }
                }
            }
            return(result);
        }
        private List <Types.MetaDataInfo> getDynamicVariables(Assembly assembly)
        {
            List <Types.MetaDataInfo> result = new List <Types.MetaDataInfo>();

            foreach (Type t in assembly.GetTypes())
            {
                foreach (FieldInfo property in t.GetFields(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
                {
                    Types.MetaDataInfo m = new Types.MetaDataInfo();
                    foreach (Object Attr in property.GetCustomAttributes(false))
                    {
                        if (Attr.GetType().Name.ToLower().StartsWith("output"))
                        {
                            m.Name = property.Name;
                        }
                        if (Attr.GetType().Name.ToLower().StartsWith("units"))
                        {
                            m.Units = Attr.ToString();
                        }
                        if (Attr.GetType().Name.ToLower().StartsWith("description"))
                        {
                            m.Description = Attr.ToString();
                        }
                        //m.IsArray = false; FIXME
                    }
                    if (m.Name != null)
                    {
                        result.Add(m);
                    }
                }
                foreach (var method in t.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
                {
                    Types.MetaDataInfo m = new Types.MetaDataInfo();
                    foreach (Object Attr in method.GetCustomAttributes(false))
                    {
                        if (Attr.GetType().Name.ToLower().StartsWith("output"))
                        {
                            m.Name = method.Name;
                        }
                        if (Attr.GetType().Name.ToLower().StartsWith("description"))
                        {
                            m.Description = Attr.ToString();
                        }
                    }
                    if (m.Name != null)
                    {
                        result.Add(m);
                    }
                }
            }
#if false
            //FIXME work on this...
            var methods = assembly.GetTypes()
                          .SelectMany(typ => typ.GetMethods(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
                          .Where(m => m.GetCustomAttributes(false).Length > 0)
                          .ToArray();
#endif
            return(result);
        }