diff options
Diffstat (limited to 'Xamarin.Forms.Loader/FormsType.cs')
-rw-r--r-- | Xamarin.Forms.Loader/FormsType.cs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Xamarin.Forms.Loader/FormsType.cs b/Xamarin.Forms.Loader/FormsType.cs new file mode 100644 index 00000000..44b4af7a --- /dev/null +++ b/Xamarin.Forms.Loader/FormsType.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace Xamarin.Forms.Loader +{ + internal sealed class FormsType : ILoaderElement + { + readonly IEnumerable<FormsMember> formsMembers; + + internal FormsType(FormsLoader formsLoader, Type type) + { + FormsLoader = formsLoader; + Type = type; + + const BindingFlags bindingFlags = BindingFlags.DeclaredOnly | + BindingFlags.Public | + BindingFlags.Instance | + BindingFlags.Static; + + const MemberTypes memberTypes = MemberTypes.Event | + MemberTypes.Method | + MemberTypes.Property; + + formsMembers = + from o in Type.GetMember("*", memberTypes, bindingFlags) + where + o.IsPublic() && + !o.IsCompilerGenerated() && + !o.IsEqualityOverride() && + !o.IsToStringOverride() && + !LoaderExtensions.IsUnitTested(type, o) + select new FormsMember(this, o); + } + + public FormsLoader FormsLoader { get; } + + public Type Type { get; } + + public IEnumerable<FormsMember> Members() + { + return formsMembers; + } + } +}
\ No newline at end of file |