Ejemplo n.º 1
0
        private IPropertyBag DoParse(Type t, TypeTreeParsingContext context, string propertyDisplayName)
        {
            if (_propertyBagCache.ContainsKey(t))
            {
                return(_propertyBagCache[t]);
            }

            string a = propertyDisplayName;
            Dictionary <string, IStructProperty <StructProxy> > properties = new Dictionary <string, IStructProperty <StructProxy> >()
            {
                { ComponentIdProperty.Name, new TypeIdStructProperty((ref StructProxy c) => a) }
            };

            AddPropertiesFromIterator(
                new TypeFieldIterator(t).Get(TypeFieldIterator.Specifier.Public | TypeFieldIterator.Specifier.ValueType),
                context,
                properties);

            // TODO: add support for C# auto/non auto properties

            AddPropertiesFromIterator(
                new TypePropertyIterator(t).Get(TypePropertyIterator.Specifier.Public | TypePropertyIterator.Specifier.ValueType),
                context,
                properties);

            _propertyBagCache[t] = new StructPropertyBag <StructProxy>(properties.Values.ToList());

            return(_propertyBagCache[t]);
        }
Ejemplo n.º 2
0
        private IPropertyBag DoParse(Type t, TypeTreeParsingContext context)
        {
            if (_propertyBagCache.ContainsKey(t))
            {
                return(_propertyBagCache[t]);
            }

            Dictionary <string, IStructProperty <StructProxy> > properties = new Dictionary <string, IStructProperty <StructProxy> >()
            {
                { ComponentIdProperty.Name, ComponentIdProperty }
            };

            foreach (var member in new TypeFieldIterator(t).Get(
                         TypeFieldIterator.Specifier.Public | TypeFieldIterator.Specifier.ValueType))
            {
                IStructProperty <StructProxy> property = VisitType(member, new TypeTreeParsingContext()
                {
                    Offset = context.Offset + member.GetOffset()
                });
                if (!properties.ContainsKey(property.Name))
                {
                    properties[property.Name] = property;
                }
            }

            foreach (var member in new TypePropertyIterator(t).Get(
                         TypePropertyIterator.Specifier.Public | TypePropertyIterator.Specifier.ValueType))
            {
                try
                {
                    IStructProperty <StructProxy> property = VisitType(member, new TypeTreeParsingContext()
                    {
                        Offset = context.Offset
                    });

                    // TODO Unknown types: GameObjects, etc
                    if (property != null)
                    {
                        if (!properties.ContainsKey(property.Name))
                        {
                            properties[property.Name] = property;
                        }
                    }
                }
                catch (Exception)
                { }
            }

            _propertyBagCache[t] = new StructPropertyBag <StructProxy>(properties.Values.ToList());

            return(_propertyBagCache[t]);
        }