Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        /// <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));
    }