Dictionary <string, MemberInfo> GetMemberNameInfoDict(Type tableType) { LuaObjectAttribute luaObjectAttribute = tableType.GetCustomAttribute <LuaObjectAttribute>(); bool isExplicit = false; bool includeNonPublic = false; Dictionary <string, MemberInfo> memberNameInfoDict = new Dictionary <string, MemberInfo>(); BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance; if (luaObjectAttribute != null) { includeNonPublic = luaObjectAttribute.IncludeNonPublic; if (includeNonPublic) { bindingFlags = bindingFlags | BindingFlags.NonPublic; } isExplicit = luaObjectAttribute.IsExplicit; } PropertyInfo[] pInfos = tableType.GetProperties(bindingFlags); FieldInfo[] fInfos = tableType.GetFields(bindingFlags); foreach (MemberInfo mi in pInfos.Union <MemberInfo>(fInfos)) { CompilerGeneratedAttribute compilerGeneratedAttribute = mi.GetCustomAttribute <CompilerGeneratedAttribute>(); if (compilerGeneratedAttribute != null) { continue; } LuaMemberAttribute luaMemberAttribute = mi.GetCustomAttribute <LuaMemberAttribute>(); if (luaMemberAttribute == null && isExplicit) { continue; } string name = mi.Name; if (luaMemberAttribute != null && !string.IsNullOrEmpty(luaMemberAttribute.Name)) { name = luaMemberAttribute.Name; } if (mi is PropertyInfo) { PropertyInfo pi = (PropertyInfo)mi; if (pi.GetSetMethod(includeNonPublic) == null) { continue; } } memberNameInfoDict.Add(name, mi); } return(memberNameInfoDict); }
public static bool IsCompilerGeneratedAnonymousType(Type t) { CompilerGeneratedAttribute attrib = (CompilerGeneratedAttribute)Attribute.GetCustomAttribute( t, typeof(CompilerGeneratedAttribute)); if (attrib != null && t.Name.Contains("AnonymousType")) { return(true); } else { return(false); } }
/// <summary> /// Parses the bypass validation attribute /// </summary> /// <param name="type">The type to parse</param> /// <param name="toAdd">What to add the data to</param> protected void ParseBypass(Type type, DatabaseTypeInfo toAdd) { toAdd.BypassValidation = false; BypassValidationAttribute dField = type.GetCustomAttributes(typeof(BypassValidationAttribute), true).FirstOrDefault() as BypassValidationAttribute; if (dField != null) { toAdd.BypassValidation = true; } //also don't validate compiler generated objects i.e. anon objects and so forth CompilerGeneratedAttribute cga = type.GetCustomAttributes(typeof(CompilerGeneratedAttribute), true).FirstOrDefault() as CompilerGeneratedAttribute; if (cga != null) { toAdd.BypassValidation = true; toAdd.IsCompilerGenerated = true; } }
public static void Initialize(ModuleWeaver weaver) { Type = weaver.Resolve(nameof(Type)); Enum = weaver.Resolve(nameof(Enum)); CompilerGeneratedAttribute = weaver.Resolve(nameof(CompilerGeneratedAttribute)); CompilerGeneratedAttributeConstructor = weaver.ModuleDefinition.ImportReference(CompilerGeneratedAttribute.Resolve().GetConstructors().Single()); RuntimeTypeHandle = weaver.Resolve(nameof(RuntimeTypeHandle)); GetTypeFromHandle = weaver.ModuleDefinition.ImportReference(Type.Resolve().Methods.Single(m => m.Name == nameof(System.Type.GetTypeFromHandle))); BindingMode = weaver.Resolve(nameof(BindingMode)); BindableObject = weaver.Resolve(nameof(BindableObject)); BindableProperty = weaver.Resolve(nameof(BindableProperty)); BindablePropertyKey = weaver.Resolve(nameof(BindablePropertyKey)); GetBindablePropertyFromKey = weaver.ModuleDefinition.ImportReference(BindablePropertyKey.Resolve().Properties.Single(m => m.Name == "BindableProperty").GetMethod); SetValue = weaver.ModuleDefinition.ImportReference(BindableObject.Resolve().Methods.Single(m => m.Name == "SetValue" && m.IsPublic && m.Parameters.First().ParameterType.Name == "BindableProperty")); SetReadonlyValue = weaver.ModuleDefinition.ImportReference(BindableObject.Resolve().Methods.Single(m => m.Name == "SetValue" && m.IsPublic && m.Parameters.First().ParameterType.Name == "BindablePropertyKey")); GetValue = weaver.ModuleDefinition.ImportReference(BindableObject.Resolve().Methods.Single(m => m.Name == "GetValue" && m.IsPublic && m.Parameters.First().ParameterType.Name == "BindableProperty")); Create = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().Methods.Single(m => m.Name == "Create" && m.IsPublic && !m.HasGenericParameters)); CreateAttached = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().Methods.Single(m => m.Name == "CreateAttached" && m.IsPublic && !m.HasGenericParameters)); CreateReadonly = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().Methods.Single(m => m.Name == "CreateReadOnly" && m.IsPublic && !m.HasGenericParameters)); CreateAttachedReadonly = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().Methods.Single(m => m.Name == "CreateAttachedReadOnly" && m.IsPublic && !m.HasGenericParameters)); ValidateValueDelegate = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().NestedTypes.Single(t => t.Name == "ValidateValueDelegate" && !t.HasGenericParameters)); BindingPropertyChangedDelegate = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().NestedTypes.Single(t => t.Name == "BindingPropertyChangedDelegate" && !t.HasGenericParameters)); BindingPropertyChangingDelegate = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().NestedTypes.Single(t => t.Name == "BindingPropertyChangingDelegate" && !t.HasGenericParameters)); CoerceValueDelegate = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().NestedTypes.Single(t => t.Name == "CoerceValueDelegate" && !t.HasGenericParameters)); CreateDefaultValueDelegate = weaver.ModuleDefinition.ImportReference(BindableProperty.Resolve().NestedTypes.Single(t => t.Name == "CreateDefaultValueDelegate" && !t.HasGenericParameters)); }