示例#1
0
        /// <summary>
        /// Indexes the indexed properties.
        /// </summary>
        private void IndexIndexedProperties()
        {
            foreach (PropertyInfo propertyInfo in FetchIndexedProperties())
            {
                var csName = GetPropertyName(propertyInfo.Name, propertyInfo);
                var ciName = csName.ToUpper();
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    propertyInfo,
                    propertyInfo.GetGetMethod(),
                    propertyInfo.GetSetMethod(),
                    EventPropertyType.INDEXED);

                AddProperty(csName, ciName, prop);
            }

            foreach (MethodInfo methodInfo in FetchIndexedAccessors())
            {
                var csName = GetAccessorPropertyName(methodInfo);
                var ciName = csName.ToUpper();
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    methodInfo,
                    methodInfo,
                    null,
                    EventPropertyType.INDEXED);

                AddProperty(csName, ciName, prop);
            }
        }
示例#2
0
        /// <summary>
        /// Indexes the simple properties.
        /// </summary>
        private void IndexSimpleProperties()
        {
            foreach (PropertyInfo propertyInfo in FetchSimpleProperties())
            {
                var csName = GetPropertyName(propertyInfo.Name, propertyInfo);
                var ciName = csName.ToUpper();
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    propertyInfo,
                    propertyInfo.GetGetMethod(),
                    propertyInfo.GetSetMethod(),
                    EventPropertyType.SIMPLE);

                AddProperty(csName, ciName, prop);
            }

            foreach (MethodInfo methodInfo in FetchSimpleAccessors())
            {
                var csName = GetAccessorPropertyName(methodInfo);
                var ciName = csName.ToUpper();
                var setter = GetSimpleMutator(csName, methodInfo.ReturnType);
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    methodInfo,
                    methodInfo,
                    setter,
                    EventPropertyType.SIMPLE);

                AddProperty(csName, ciName, prop);
            }
        }
示例#3
0
        private void AddProperty(string csName, string ciName, SimpleMagicPropertyInfo prop)
        {
            var ciProp = _ciPropertyTable.Get(ciName);

            if (ciProp != null)
            {
                ciProp.Next = prop;
            }
            else
            {
                _ciPropertyTable[ciName] = prop;
            }

            // It is possible for a property that is case sensitive to
            // exist in csPropertyTable, but not ciPropertyTable.  That's
            // the nature of case sensitive versus case insensitive.
            var csProp = _csPropertyTable.Get(csName);

            if (csProp != null)
            {
                csProp.Next = prop;
            }
            else
            {
                _csPropertyTable[csName] = prop;
            }
        }
示例#4
0
        /// <summary>
        /// Indexes the mapped properties.
        /// </summary>
        private void IndexMappedProperties()
        {
            foreach (PropertyInfo propertyInfo in FetchMappedProperties())
            {
                var csName = GetPropertyName(propertyInfo.Name, propertyInfo);
                var ciName = csName.ToUpper();
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    propertyInfo,
                    propertyInfo.GetGetMethod(),
                    propertyInfo.GetSetMethod(),
                    PropertyType.MAPPED | PropertyType.SIMPLE);

                AddOrUpdateProperty(csName, ciName, prop);
            }

            // Mapped properties exposed through accessors may be exposed with both
            // a GetXXX accessor and a SetXXX mutator.  We need to merge both thought
            // processes.

            foreach (var accessorInfo in FetchMappedAccessors())
            {
                var csName = GetAccessorPropertyName(accessorInfo);
                var ciName = csName.ToUpper();
                var prop   = new SimpleMagicPropertyInfo(
                    csName,
                    accessorInfo,
                    accessorInfo,
                    null,
                    PropertyType.MAPPED);

                AddOrUpdateProperty(csName, ciName, prop);
            }
        }
示例#5
0
        private void AddOrUpdateProperty(
            string name,
            IDictionary <string, SimpleMagicPropertyInfo> propertyTable,
            SimpleMagicPropertyInfo prop)
        {
            if (propertyTable.TryGetValue(name, out var propEntry))
            {
                for (var currProp = propEntry; currProp != null; currProp = currProp.Next)
                {
                    if (currProp.Member == propEntry.Member)
                    {
                        currProp.EventPropertyType |= propEntry.EventPropertyType;
                        return;
                    }
                }
            }

            // An existing entry does not exist, add a new one
            if (propEntry != null)
            {
                propEntry.Next = prop;
            }
            else
            {
                propertyTable[name] = prop;
            }
        }
示例#6
0
        /// <summary>
        /// Indexes the simple properties.
        /// </summary>
        private void IndexSimpleProperties()
        {
            foreach (PropertyInfo propertyInfo in FetchSimpleProperties())
            {
                var csName       = GetPropertyName(propertyInfo.Name, propertyInfo);
                var ciName       = csName.ToUpper();
                var propertyType = PropertyType.SIMPLE;

                if (GenericExtensions.IsIndexedType(propertyInfo.PropertyType))
                {
                    propertyType |= PropertyType.INDEXED;
                }
                if (GenericExtensions.IsMappedType(propertyInfo.PropertyType))
                {
                    propertyType |= PropertyType.MAPPED;
                }

                var prop = new SimpleMagicPropertyInfo(
                    csName,
                    propertyInfo,
                    propertyInfo.GetGetMethod(),
                    propertyInfo.GetSetMethod(),
                    propertyType);

                AddOrUpdateProperty(csName, ciName, prop);
            }

            foreach (MethodInfo methodInfo in FetchSimpleAccessors())
            {
                var csName       = GetAccessorPropertyName(methodInfo);
                var ciName       = csName.ToUpper();
                var setter       = GetSimpleMutator(csName, methodInfo.ReturnType);
                var propertyType = PropertyType.SIMPLE;

                if (GenericExtensions.IsIndexedType(methodInfo.ReturnType))
                {
                    propertyType |= PropertyType.INDEXED;
                }
                if (GenericExtensions.IsMappedType(methodInfo.ReturnType))
                {
                    propertyType |= PropertyType.MAPPED;
                }

                var prop = new SimpleMagicPropertyInfo(
                    csName,
                    methodInfo,
                    methodInfo,
                    setter,
                    propertyType);

                AddOrUpdateProperty(csName, ciName, prop);
            }
        }