Пример #1
0
        /// <summary>
        /// Replaces the generic method element with a more specific extension method
        /// element as needed.
        /// </summary>
        /// <param name="member">The member.</param>
        /// <param name="map">The map.</param>
        /// <returns></returns>
        private static Member ReplaceExtensionMethods(Member member, MemberIdMap map)
        {
            if (member.Kind != MemberKinds.Method)
            {
                return(member);
            }

            var method = (MethodBase)map.FindMember(member.Id);

            if (method == null)
            {
                return(member);
            }

            if (method.GetCustomAttributes(true).Any(attr => attr.GetType().FullName == "System.Runtime.CompilerServices.ExtensionAttribute"))
            {
                var extendedTypeId = map.FindId(method.GetParameters()[0].ParameterType);
                if (!string.IsNullOrEmpty(extendedTypeId))
                {
                    return(new ExtensionMethod(member.Id, extendedTypeId, member.Elements));
                }
            }

            return(member);
        }
Пример #2
0
        /// <summary>
        /// Replaces the generic <see cref="TypeDeclaration"/> with
        /// concrete types according to the reflection information.
        /// </summary>
        private static Member ReplaceTypes(Member member, MemberIdMap map)
        {
            if (member.Kind != MemberKinds.Type)
            {
                return(member);
            }

            var type = (Type)map.FindMember(member.Id);

            if (type == null)
            {
                return(member);
            }

            if (type.IsInterface)
            {
                return(new Interface(member.Id, member.Elements));
            }
            if (type.IsClass)
            {
                return(new Class(member.Id, member.Elements));
            }
            if (type.IsEnum)
            {
                return(new Enum(member.Id, member.Elements));
            }
            if (type.IsValueType)
            {
                return(new Struct(member.Id, member.Elements));
            }

            return(member);
        }
Пример #3
0
        /// <summary>
        /// Sets the extended reflection info if found in the map.
        /// </summary>
        private static Member SetInfo(Member member, MemberIdMap map)
        {
            member.Info = map.FindMember(member.Id);

            return(member);
        }
Пример #4
0
        /// <summary>
        /// Sets the extended reflection info if found in the map.
        /// </summary>
        private static Member SetInfo(Member member, MemberIdMap map)
        {
            member.Info = map.FindMember(member.Id);

            return member;
        }
Пример #5
0
        /// <summary>
        /// Replaces the generic <see cref="TypeDeclaration"/> with 
        /// concrete types according to the reflection information.
        /// </summary>
        private static Member ReplaceTypes(Member member, MemberIdMap map)
        {
            if (member.Kind != MemberKinds.Type)
                return member;

            var type = (Type)map.FindMember(member.Id);
            if (type == null)
                return member;

            if (type.IsInterface)
                return new Interface(member.Id, member.Elements);
            if (type.IsClass)
                return new Class(member.Id, member.Elements);
            if (type.IsEnum)
                return new Enum(member.Id, member.Elements);
            if (type.IsValueType)
                return new Struct(member.Id, member.Elements);

            return member;
        }
Пример #6
0
        /// <summary>
        /// Replaces the generic method element with a more specific extension method 
        /// element as needed.
        /// </summary>
        /// <param name="member">The member.</param>
        /// <param name="map">The map.</param>
        /// <returns></returns>
        private static Member ReplaceExtensionMethods(Member member, MemberIdMap map)
        {
            if (member.Kind != MemberKinds.Method)
                return member;

            var method = (MethodBase)map.FindMember(member.Id);
            if (method == null)
                return member;

            if (method.GetCustomAttributes(true).Any(attr => attr.GetType().FullName == "System.Runtime.CompilerServices.ExtensionAttribute"))
            {
                var extendedTypeId = map.FindId(method.GetParameters()[0].ParameterType);
                if (!string.IsNullOrEmpty(extendedTypeId))
                    return new ExtensionMethod(member.Id, extendedTypeId, member.Elements);
            }

            return member;
        }