private static IEnumerable<PropertyData> FindCatelProperties(Type type)
{
// Properties - safety checks for non-static properties
var nonStaticProperties = (from property in type.GetPropertiesEx(BindingFlagsHelper.GetFinalBindingFlags(true, false, true))
where property.PropertyType == typeof(PropertyData)
select property).ToList();
foreach (var nonStaticProperty in nonStaticProperties)
{
throw Log.ErrorAndCreateException<InvalidOperationException>("The property '{0}' of type 'PropertyData' declared as instance, but they can only be used as static", nonStaticProperty.Name);
}
// Properties - safety checks for non-public fields
var nonPublicProperties = (from property in type.GetPropertiesEx(BindingFlagsHelper.GetFinalBindingFlags(true, true, true))
where property.PropertyType == typeof(PropertyData) && !property.CanRead
select property).ToList();
foreach (var nonPublicProperty in nonPublicProperties)
{
throw Log.ErrorAndCreateException<InvalidOperationException>("The property '{0}' of type 'PropertyData' declared as non-public, but they can only be used as public", nonPublicProperty.Name);
}
// Properties - actual addition
var foundProperties = new List<PropertyData>();
var properties = new List<PropertyInfo>();
properties.AddRange(type.GetPropertiesEx(BindingFlagsHelper.GetFinalBindingFlags(true, true, false)));
foreach (var property in properties)
{
if (property.PropertyType == typeof(PropertyData))
{
var propertyValue = property.GetValue(null, null) as PropertyData;
if (propertyValue != null)
{
foundProperties.Add(propertyValue);
}
}
}
return foundProperties;
}