Пример #1
0
        /// <summary>
        /// Gets the <see cref="FieldInfo"/> as a code gen member (<see cref="CgMember"/>)
        /// </summary>
        /// <param name="fi"></param>
        /// <param name="valueTypeOnly"></param>
        /// <param name="enumValueDictionary"></param>
        /// <returns></returns>
        public static CgMember GetAsCgMember(FieldInfo fi, bool valueTypeOnly,
            Dictionary<string, string[]> enumValueDictionary)
        {
            if (fi == null)
                return null;

            if (NfTypeName.IsClrGeneratedType(fi.Name))
                return null;

            var fiType = fi.NfFieldType();

            if (valueTypeOnly && fiType.NfBaseType() != null && fiType.NfBaseType().Name != VALUE_TYPE)
                return null;

            var cgMem = new CgMember
            {
                TypeName = Settings.LangStyle.TransformClrTypeSyntax(fiType),
                IsEnumerableType = NfTypeName.IsEnumerableReturnType(fiType),
                Name = fi.Name,
                IsStatic = fi.IsStatic,
                MetadataToken = fi.MetadataToken
            };

            string[] enumVals;
            if (NfTypeName.IsEnumType(fiType, out enumVals) && enumValueDictionary != null)
            {
                cgMem.IsEnum = true;
                var clearName = NfTypeName.GetLastTypeNameFromArrayAndGeneric(cgMem.TypeName, "<");
                if (!enumValueDictionary.ContainsKey(clearName))
                {
                    enumValueDictionary.Add(clearName, enumVals);
                }
            }
            return cgMem;
        }