private IEnumerable <MemberInfo> Filter(IReflect type) =>
 type
 .GetMembers(BindingFlags.Instance
             | BindingFlags.FlattenHierarchy
             | BindingFlags.Public)
 .Where(IncludeFields)
 .Where(IgnoredMembers);
        /// <summary>
        /// Extracts the inspectables.
        /// </summary>
        /// <returns>The inspectables.</returns>
        /// <param name="type">Type.</param>
        private static IEnumerable <MemberWithAttr> ExtractTargetMembers(IReflect type)
        {
            var members = type.GetMembers(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic |
                                          BindingFlags.Instance);

            foreach (var member in members)
            {
                var attrs = member.GetCustomAttributes(true);

                foreach (var attr in attrs)
                {
                    var a = attr as GetSheetAttribute;
                    if (a == null)
                    {
                        continue;
                    }

                    yield return(new MemberWithAttr
                    {
                        member = member,
                        attr = a,
                    });
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 ///     extract all non-readonly fields and properties. als check Ignore attribute
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 private static List <MemberInfo> GetMembers(IReflect type)
 {
     return(type.GetMembers(BindingFlags.Public | BindingFlags.Instance)
            .Where(mi => (mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property) &&
                   !mi.GetCustomAttributes <Transform>().Any(a => a.Ignore) &&
                   !IsReadonlyMember(mi)).ToList());
 }
Exemplo n.º 4
0
                private Tuple <MethodInfo, MemberInfo?>?FindCommandPair([NotNull] IReflect targetType, out bool finded)
                {
                    finded = false;
                    var methods =
                        targetType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                    var main = (from method in methods
                                let attr = method.GetCustomAttribute <CommandTargetAttribute>()
                                           where attr != null && attr.ProvideMemberName(method) == Name
                                           select new { Method = method, IsSync = attr.Synchronize }).FirstOrDefault();

                    if (main == null)
                    {
                        Debug.Print($"CommandBinder: No Command-Method Found: {Name}");
                        return(null);
                    }

                    finded = true;

                    _isSync = main.IsSync;

                    var        mainAttr = main.Method.GetCustomAttribute <CommandTargetAttribute>();
                    MemberInfo?second   = null;

                    foreach (var m in targetType.GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
                    {
                        var attr = m.GetCustomAttribute <CommandTargetAttribute>();
                        if (attr == null)
                        {
                            continue;
                        }

                        var name = attr.ProvideMemberName(m);
                        if (mainAttr?.CanExecuteMember != null)
                        {
                            if (mainAttr.CanExecuteMember != name)
                            {
                                continue;
                            }
                        }
                        else
                        {
                            if (Name != name && m == main.Method)
                            {
                                continue;
                            }

                            if ("Can" + Name != name)
                            {
                                continue;
                            }
                        }

                        second = m;
                        break;
                    }

                    return(Tuple.Create(main.Method, second));
                }
Exemplo n.º 5
0
 private static IEnumerable <MemberInfo> GetAllColumnsForType(this IReflect sourceType)
 {
     return(sourceType.GetMembers(BindingFlags.GetField |
                                  BindingFlags.GetProperty |
                                  BindingFlags.Instance |
                                  BindingFlags.Public)
            .Where(m => m.MemberType == MemberTypes.Field || m.MemberType == MemberTypes.Property)
            .Where(p => p.CustomAttributes.All(a => a.AttributeType.Name != "NotMappedAttribute")));
 }
Exemplo n.º 6
0
    /// <summary>
    /// Extracts the inspectables.
    /// </summary>
    /// <returns>The inspectables.</returns>
    /// <param name="type">Type.</param>
    static IEnumerable <MemberInfo> ExtractInspectableMembers(IReflect type)
    {
        var members = type.GetMembers(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

        foreach (var member in members)
        {
            var attrs = member.GetCustomAttributes(true);

            if (attrs.Any(a => a.GetType() == InspectableType))
            {
                yield return(member);
            }
        }
    }
Exemplo n.º 7
0
        public void UpdateAvailableFormatingParts(IReflect type)
        {
            if (type is null)
            {
                return;
            }

            AvailableFormatingPartsGroupList = type
                                               .GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                                               .Select(members => members.GetCustomAttributes <FormattedFieldAttribute>())
                                               .SelectMany();

            foreach (FormattedFieldAttribute attr in AvailableFormatingPartsGroupList)
            {
                foreach (String linkedName in attr.LinkedNames)
                {
                    if (String.IsNullOrEmpty(linkedName))
                    {
                        continue;
                    }


                    AvailableFormatingParts.Add(linkedName);

                    if (attr.Uniqueness)
                    {
                        UniqueFormatingParts.Add(linkedName);
                    }

                    foreach (String attribute in attr.Attributes)
                    {
                        String str = linkedName + ":" + attribute;

                        AvailableFormatingParts.Add(str);

                        if (attr.Uniqueness)
                        {
                            UniqueFormatingParts.Add(str);
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
 System.Reflection.MemberInfo[] IReflect.GetMembers(System.Reflection.BindingFlags bindingAttr)
 {
     return(typeIReflectImplementation.GetMembers(bindingAttr));
 }
Exemplo n.º 9
0
 MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
 => publicIReflect.GetMembers(bindingAttr);
Exemplo n.º 10
0
 private static object[] GetProperties(IReflect type)
 {
     SortedList<string, List<EditorProperty>> folders = new SortedList<string, List<EditorProperty>>();
     // Get all public and not so public fields and properties with EditorProperty
     // attribute.
     var members =
         type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
             .Where(member => member.ContainsAttribute<EditorPropertyAttribute>());
     foreach (MemberInfo member in members)
     {
         EditorPropertyAttribute attribute = member.GetAttribute<EditorPropertyAttribute>();
         // Validate the type.
         EditorPropertyType propType = Entity.GetEditorType(member.GetAssociatedType(), attribute.Type);
         // Use default folder, if it is not specified.
         string folderName = attribute.Folder ?? "Default";
         // Register new folder, if there is a need for that.
         if (!folders.ContainsKey(folderName))
         {
             folders.Add(folderName, new List<EditorProperty>());
         }
         // Add the property to the folder.
         folders[folderName].Add
         (
             new EditorProperty
             (
                 attribute.Name ?? member.Name,
                 attribute.Description,
                 attribute.DefaultValue ?? new Func<string>
                 (
                     delegate
                     {
                         switch (propType)
                         {
                             case EditorPropertyType.Bool:
                                 return "false";
                             case EditorPropertyType.Int:
                             case EditorPropertyType.Float:
                                 return "0";
                             case EditorPropertyType.Vector3:
                             case EditorPropertyType.Color:
                                 return "0,0,0";
                             default:
                                 return "";
                         }
                     }
                 ).Invoke(),
                 propType,
                 new EditorPropertyLimits
                 {
                     Min = attribute.Min,
                     Max = attribute.Max
                 },
                 attribute.Flags
             )
         );
     }
     // Now lets create the array of properties.
     List<object> properties = new List<object>();
     foreach (KeyValuePair<string, List<EditorProperty>> folder in folders)
     {
         if (folder.Key == "Default")
         {
             properties.AddRange(folder.Value.Cast<object>());
         }
         else
         {
             properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderBegin));
             properties.AddRange(folder.Value.Cast<object>());
             properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderEnd));
         }
     }
     return properties.ToArray();
 }
Exemplo n.º 11
0
 private static IEnumerable <MemberInfo> GetInterfaceMembers(IReflect type)
 {
     return(type.GetMembers(BindingFlags.Public | BindingFlags.Instance)
            .Where(mi => mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property));
 }
Exemplo n.º 12
0
        MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
        {
            var ret = typeIReflectImplementation.GetMembers(bindingAttr);

            return(ret);
        }
Exemplo n.º 13
0
        private static object[] GetProperties(IReflect type)
        {
            SortedList <string, List <EditorProperty> > folders = new SortedList <string, List <EditorProperty> >();
            // Get all public and not so public fields and properties with EditorProperty
            // attribute.
            var members =
                type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                .Where(member => member.ContainsAttribute <EditorPropertyAttribute>());

            foreach (MemberInfo member in members)
            {
                EditorPropertyAttribute attribute = member.GetAttribute <EditorPropertyAttribute>();
                // Validate the type.
                EditorPropertyType propType = Entity.GetEditorType(member.GetAssociatedType(), attribute.Type);
                // Use default folder, if it is not specified.
                string folderName = attribute.Folder ?? "Default";
                // Register new folder, if there is a need for that.
                if (!folders.ContainsKey(folderName))
                {
                    folders.Add(folderName, new List <EditorProperty>());
                }
                // Add the property to the folder.
                folders[folderName].Add
                (
                    new EditorProperty
                    (
                        attribute.Name ?? member.Name,
                        attribute.Description,
                        attribute.DefaultValue ?? new Func <string>
                        (
                            delegate
                {
                    switch (propType)
                    {
                    case EditorPropertyType.Bool:
                        return("false");

                    case EditorPropertyType.Int:
                    case EditorPropertyType.Float:
                        return("0");

                    case EditorPropertyType.Vector3:
                    case EditorPropertyType.Color:
                        return("0,0,0");

                    default:
                        return("");
                    }
                }
                        ).Invoke(),
                        propType,
                        new EditorPropertyLimits
                {
                    Min = attribute.Min,
                    Max = attribute.Max
                },
                        attribute.Flags
                    )
                );
            }
            // Now lets create the array of properties.
            List <object> properties = new List <object>();

            foreach (KeyValuePair <string, List <EditorProperty> > folder in folders)
            {
                if (folder.Key == "Default")
                {
                    properties.AddRange(folder.Value.Cast <object>());
                }
                else
                {
                    properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderBegin));
                    properties.AddRange(folder.Value.Cast <object>());
                    properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderEnd));
                }
            }
            return(properties.ToArray());
        }
Exemplo n.º 14
0
 MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
 {
     return(_typeIReflectImplementation.GetMembers(bindingAttr));
 }
Exemplo n.º 15
0
 MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
 {
     return(publicIReflect.GetMembers(bindingAttr));
 }