コード例 #1
0
        private static void AppendParameters(DescriptionBuilder sb, ParameterDesc[] parameters)
        {
            bool first = true;

            foreach (ParameterDesc parameter in parameters)
            {
                if (parameter != null)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        sb.Append(", ");
                    }

                    ComTypeBrowserInfo.WriteParameterAttributes(sb, parameter);

                    sb.Append(parameter.Type);
                    sb.Append(" ");

                    sb.Append(parameter.Name);
                }
            }
        }
コード例 #2
0
        private TypeLibraryNamespaceBrowserInfo GetNamespaceInternal()
        {
            // There is one namespace for the type library itself.

            TypeLibraryNamespaceBrowserInfo ns = new TypeLibraryNamespaceBrowserInfo(this,
                                                                                     Marshal.GetTypeLibName(m_typeLibrary.TypeLib));

            // Iterate through all the TypeInfos.

            for (int index = 0; index < m_typeLibrary.TypeLib.GetTypeInfoCount(); ++index)
            {
                ITypeInfo typeInfo;
                m_typeLibrary.TypeLib.GetTypeInfo(index, out typeInfo);

                // Add all TypeInfos except for modules and aliases.

                ObjectType infoType = ComTypeBrowserInfo.GetObjectType(typeInfo);
                if (infoType != ObjectType.Module && infoType != ObjectType.Alias)
                {
                    ns.AddType(Manager.GetTypeInfo(typeInfo, ns));
                }
            }

            return(ns);
        }
コード例 #3
0
ファイル: ComBrowserManager.cs プロジェクト: formist/LinkMe
        internal ComTypeBrowserInfo GetTypeInfo(ITypeInfo typeInfo)
        {
            Debug.Assert(typeInfo != null, "typeInfo != null");

            ComTypeBrowserInfo ComTypeBrowserInfo = (ComTypeBrowserInfo)m_cachedTypes[typeInfo];

            if (ComTypeBrowserInfo == null)
            {
                ITypeLib typeLib;
                int      index;
                typeInfo.GetContainingTypeLib(out typeLib, out index);

                TypeLibraryBrowserInfo typeLibrary = GetTypeLibraryInfo(typeLib);
                Debug.Assert(typeLibrary != null, "typeLibrary != null");

                TypeLibraryNamespaceBrowserInfo ns = typeLibrary.GetNamespace();
                Debug.Assert(ns != null, "ns != null");

                // Retrieving the namespaces may add types to CachedTypes, so try to find this type again.

                ComTypeBrowserInfo = (ComTypeBrowserInfo)m_cachedTypes[typeInfo];

                if (ComTypeBrowserInfo == null)
                {
                    ComTypeBrowserInfo = new ComTypeBrowserInfo(typeInfo, ns);
                    m_cachedTypes.Add(typeInfo, ComTypeBrowserInfo);
                }
            }

            return(ComTypeBrowserInfo);
        }
コード例 #4
0
ファイル: ComTypeBrowserInfo.cs プロジェクト: formist/LinkMe
        public override int CompareTo(object obj)
        {
            if (!(obj is ComTypeBrowserInfo))
            {
                throw new ArgumentException("Object must be of type '" + GetType().FullName + "'.", "obj");
            }

            ComTypeBrowserInfo other = (ComTypeBrowserInfo)obj;

            if (other == this)
            {
                return(0);
            }

            switch (Manager.Settings.TypeOrder)
            {
            case TypeOrder.Alphabetical:
                return(CompareTypeNames(m_typeInfo, other.m_typeInfo));

            case TypeOrder.ObjectType:
                // Compare object types
                int result1 = GetObjectType(m_typeInfo.ComType).CompareTo(GetObjectType(other.m_typeInfo.ComType));
                if (result1 != 0)
                {
                    return(result1);
                }

                // Same object type - compare names
                return(CompareTypeNames(m_typeInfo, other.m_typeInfo));

            default:
                throw new ApplicationException("Unsupported TypeOrder enum value: '"
                                               + Manager.Settings.TypeOrder.ToString() + "'.");
            }
        }
コード例 #5
0
ファイル: ComTypeBrowserInfo.cs プロジェクト: formist/LinkMe
        private void AddTypeMembersRecursive(ComTypeBrowserInfo sourceType, SortedList destination,
                                             bool isEventSource)
        {
            foreach (ComMemberBrowserInfo memberInfo in sourceType.Members)
            {
                ComMemberBrowserInfo newMemberInfo;

                if (isEventSource && memberInfo.MemberType == OperationMemberType.Method)
                {
                    newMemberInfo = new ComMemberBrowserInfo(this,
                                                             ((MethodDesc)memberInfo.MemberDesc).CreateEventFromMethod(),
                                                             memberInfo.NodeText);
                }
                else
                {
                    newMemberInfo = new ComMemberBrowserInfo(this, memberInfo.MemberDesc,
                                                             memberInfo.NodeText);
                }

                destination.Add(newMemberInfo, newMemberInfo.NodeText);
            }

            foreach (ComTypeBrowserInfo baseType in sourceType.BaseTypes)
            {
                AddTypeMembersRecursive(baseType, destination, isEventSource);
            }
        }
コード例 #6
0
ファイル: ComTypeBrowserInfo.cs プロジェクト: formist/LinkMe
        private void AddCoClassMembers(SortedList members)
        {
            int implCount = ComInterop.GetImplTypeCount(m_typeInfo.ComType);

            for (int index = 0; index < implCount; ++index)
            {
                IMPLTYPEFLAGS implTypeFlags;
                m_typeInfo.ComType.GetImplTypeFlags(index, out implTypeFlags);

                if ((implTypeFlags & IMPLTYPEFLAGS.IMPLTYPEFLAG_FDEFAULT) == IMPLTYPEFLAGS.IMPLTYPEFLAG_FDEFAULT)
                {
                    // This is a default interface - gets the corresponding ComTypeBrowserInfo object.

                    int href;
                    m_typeInfo.ComType.GetRefTypeOfImplType(index, out href);

                    ITypeInfo refTypeInfo;
                    m_typeInfo.ComType.GetRefTypeInfo(href, out refTypeInfo);
                    Debug.Assert(refTypeInfo != null, "refTypeInfo != null");

                    // Check if this interface is an event source.

                    bool isEventSource = ((implTypeFlags & IMPLTYPEFLAGS.IMPLTYPEFLAG_FSOURCE) == IMPLTYPEFLAGS.IMPLTYPEFLAG_FSOURCE);

                    // Add each member of the base interface to our members collection.

                    ComTypeBrowserInfo baseType = Manager.GetTypeInfo(refTypeInfo);

                    AddTypeMembersRecursive(baseType, members, isEventSource);
                }
            }
        }
コード例 #7
0
        internal ComMemberBrowserInfo(ComTypeBrowserInfo type, MemberDesc member, string nodeText)
        {
            Debug.Assert(type != null && nodeText != null,
                         "type != null && && nodeText != null");

            m_type     = type;
            m_member   = member;
            m_nodeText = nodeText;
        }
コード例 #8
0
ファイル: ComBrowserManager.cs プロジェクト: formist/LinkMe
        internal ComTypeBrowserInfo GetTypeInfo(ITypeInfo typeInfo, TypeLibraryNamespaceBrowserInfo ns)
        {
            Debug.Assert(typeInfo != null && ns != null, "typeInfo != null && ns != null");

            ComTypeBrowserInfo ComTypeBrowserInfo = (ComTypeBrowserInfo)m_cachedTypes[typeInfo];

            if (ComTypeBrowserInfo == null)
            {
                ComTypeBrowserInfo = new ComTypeBrowserInfo(typeInfo, ns);
                m_cachedTypes.Add(typeInfo, ComTypeBrowserInfo);
            }

            return(ComTypeBrowserInfo);
        }
コード例 #9
0
        private static void AppendProperty(DescriptionBuilder sb, PropertyDesc property)
        {
            if (property.ReturnType != null)
            {
                sb.Append(property.ReturnType);
                sb.Append(" ");
            }

            sb.AppendName(property.Name);
            sb.Append(ComTypeBrowserInfo.GetPropertyKind(property));

            // Show indexer parameters as well.

            ParameterDesc[] parameters = property.Parameters;

            if (parameters.Length > 0)
            {
                sb.Append(" ( ");
                AppendParameters(sb, parameters);
                sb.Append(" )");
            }
        }
コード例 #10
0
 internal void AddType(ComTypeBrowserInfo type)
 {
     Debug.Assert(type != null, "type != null");
     m_types.Add(type, type.FullName);
 }