/// <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); } }
/// <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); } }
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; } }
/// <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); } }
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; } }
/// <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); } }