public static PropertyInfo[] GetProperties(this TypeInfo typeInfo, BindingFlags bindingFlags)
{
Argument.IsNotNull("typeInfo", typeInfo);
var flattenHierarchy = ShouldFlattenHierarchy(bindingFlags);
var source = (flattenHierarchy ? typeInfo.AsType().GetRuntimeProperties() : typeInfo.DeclaredProperties).ToList();
var includeStatics = Enum<BindingFlags>.Flags.IsFlagSet(bindingFlags, BindingFlags.Static);
// TODO: This is a fix because static members are not included in FlattenHierarcy, remove when this is fixed in WinRT
if (flattenHierarchy)
{
var baseType = typeInfo.BaseType;
if ((baseType != null) && (baseType != typeof(object)))
{
source.AddRange(from member in GetProperties(baseType.GetTypeInfo(), bindingFlags)
where member.IsStatic()
select member);
}
}
return (from x in source
where x.IsStatic() == includeStatics
select x).ToArray();
}