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); } } }
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); }
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); }
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() + "'."); } }
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); } }
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); } } }
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; }
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); }
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(" )"); } }
internal void AddType(ComTypeBrowserInfo type) { Debug.Assert(type != null, "type != null"); m_types.Add(type, type.FullName); }