예제 #1
0
        private static void AppendParameters(DescriptionBuilder sb, NetBrowserManager manager, ParameterInfo[] parameters)
        {
            bool first = true;

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

                if (parameter.IsOptional)
                {
                    sb.Append("[");
                }

                NetTypeBrowserInfo.WriteParameterType(manager, sb, parameter, true);

                sb.Append(" ");
                sb.Append(parameter.Name);
                if (parameter.IsOptional)
                {
                    sb.Append("]");
                }
            }
        }
예제 #2
0
        private static int CompareTypeNames(Type a, Type b)
        {
            // Compare the names with case-insensitive comparison first (for ordering purposes)

            string nameA = NetTypeBrowserInfo.GetTypeDisplayName(a);
            string nameB = NetTypeBrowserInfo.GetTypeDisplayName(b);

            int result = string.Compare(nameA, nameB, true);

            if (result != 0)
            {
                return(result);
            }

            // Same - now do a case-sensitive comparison.

            result = string.Compare(nameA, nameB, false);
            if (result != 0)
            {
                return(result);
            }

            // Type names are exactly the same - compare assembly-qualified names.

            return(string.Compare(a.AssemblyQualifiedName, b.AssemblyQualifiedName, false));
        }
예제 #3
0
        internal NetTypeBrowserInfo GetTypeInfo(Type type)
        {
            Debug.Assert(type != null, "type != null");

            NetTypeBrowserInfo typeInfo = (NetTypeBrowserInfo)m_cachedTypes[type];

            if (typeInfo == null)
            {
                NetAssemblyBrowserInfo assembly = GetAssemblyInfo(type.Assembly);
                Debug.Assert(assembly != null, "assembly != null");

                string nsName = (type.Namespace == null ? NetBrowserSettings.NullNamespaceName : type.Namespace);
                NetNamespaceBrowserInfo ns = assembly.GetNamespace(nsName);
                Debug.Assert(ns != null, "ns != null");

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

                typeInfo = (NetTypeBrowserInfo)m_cachedTypes[type];

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

            return(typeInfo);
        }
예제 #4
0
        internal NetMemberBrowserInfo(NetTypeBrowserInfo type, MemberInfo memberInfo, string nodeText)
        {
            Debug.Assert(type != null && memberInfo != null && nodeText != null,
                         "type != null && memberInfo != null && nodeText != null");

            m_type       = type;
            m_memberInfo = memberInfo;
            m_nodeText   = nodeText;
        }
예제 #5
0
        internal RemoteTypeBrowserInfo(NetTypeBrowserInfo wrapped, RemoteNamespaceBrowserInfo ns, string name)
        {
            Debug.Assert(wrapped != null && ns != null && name != null,
                         "wrapped != null && ns != null && name != null");

            m_wrapped   = wrapped;
            m_namespace = ns;
            m_name      = name;
        }
예제 #6
0
        private void AppendEvent(DescriptionBuilder sb, NetBrowserManager manager, EventInfo eventInfo)
        {
            sb.Append(Settings.GetKeyword(MemberTypes.Event));
            sb.Append(" ");

            NetTypeBrowserInfo.AppendParameterTypeDisplayName(manager, sb, eventInfo.EventHandlerType, false, true);
            sb.Append(" ");

            sb.AppendName(eventInfo.Name);
        }
예제 #7
0
        internal DescriptionText GetDescription(NetNamespaceBrowserInfo ns, NetTypeBrowserInfo baseType)
        {
            if (m_description == null)
            {
                m_description = GetDescriptionInternal(ns, baseType);
                Debug.Assert(m_description != null, "m_description != null");
            }

            return(m_description);
        }
예제 #8
0
        internal DescriptionText GetDescription(NetBrowserManager manager, NetTypeBrowserInfo type)
        {
            if (m_description == null)
            {
                m_description = GetDescriptionInternal(manager, type);
                Debug.Assert(m_description != null, "m_description != null");
            }

            return(m_description);
        }
예제 #9
0
        internal bool TypeShouldBeVisible(Type type)
        {
            if (ShowNonPublic)
            {
                return(true);
            }

            AccessModifiers effectiveAccess = NetTypeBrowserInfo.GetEffectiveTypeAccess(type);

            return(effectiveAccess != AccessModifiers.Private && effectiveAccess != AccessModifiers.Internal);
        }
예제 #10
0
        internal RemoteTypeBrowserInfo GetRemoteType(NetTypeBrowserInfo realType)
        {
            if (realType == null)
            {
                return(null);
            }

            NetNamespaceBrowserInfo realNs = realType.NamespaceInternal;

            RemoteAssemblyBrowserInfo  assembly = new RemoteAssemblyBrowserInfo(((NetAssemblyBrowserInfo)realNs.Repository).FilePath, this);
            RemoteNamespaceBrowserInfo ns       = new RemoteNamespaceBrowserInfo(realNs, assembly, realNs.DisplayName);

            return(new RemoteTypeBrowserInfo(realType, ns, realType.FullName));
        }
예제 #11
0
        internal NetTypeBrowserInfo GetTypeInfo(Type type, NetNamespaceBrowserInfo ns)
        {
            Debug.Assert(type != null && ns != null, "type != null && ns != null");

            NetTypeBrowserInfo typeInfo = (NetTypeBrowserInfo)m_cachedTypes[type];

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

            return(typeInfo);
        }
예제 #12
0
        private void AppendProperty(DescriptionBuilder sb, NetBrowserManager manager, PropertyInfo property)
        {
            // Properties have many of the same attributes as methods, but these attributes are declared
            // on the accessors, not on the properties themselves.

            MethodInfo[] accessors = property.GetAccessors(true);
            Debug.Assert(accessors.Length > 0, "Unable to get the accessors for property '"
                         + property.DeclaringType.ToString() + "." + property.Name
                         + "' - this property should not have been displayed.");

            AppendMethodAttributes(sb, accessors[0]);

            NetTypeBrowserInfo.AppendParameterTypeDisplayName(manager, sb, property.PropertyType, false, true);
            sb.Append(" ");
            sb.AppendName(property.Name);

            if (property.CanRead)
            {
                if (property.CanWrite)
                {
                    sb.Append(" [ get, set ]");
                }
                else
                {
                    sb.Append(" [ get ]");
                }
            }
            else if (property.CanWrite)
            {
                sb.Append(" [ set ]");
            }
            else
            {
                Debug.Fail("Property '" + property.Name + "' is not readable and not writeable.");
            }

            // Show indexer parameters as well (which the VS.NET object browser doesn't do).

            ParameterInfo[] indexers = property.GetIndexParameters();

            if (indexers.Length > 0)
            {
                sb.Append(" ( ");
                AppendParameters(sb, manager, indexers);
                sb.Append(" )");
            }
        }
예제 #13
0
        private DescriptionText GetDescriptionInternal(NetNamespaceBrowserInfo ns, NetTypeBrowserInfo baseType)
        {
            try
            {
                DescriptionBuilder sb = new DescriptionBuilder(true);

                sb.Append(Settings.GetKeyword(GetTypeAccess(m_type)));
                sb.Append(" ");

                AppendTypeAttribute(sb, m_type, TypeAttributes.Abstract);
                AppendTypeAttribute(sb, m_type, TypeAttributes.Sealed);

                sb.Append(Settings.GetKeyword(GetObjectType(m_type)));
                sb.Append(" ");

                sb.AppendName(GetTypeDisplayName(m_type));

                if (baseType != null)
                {
                    sb.Append(" : ");
                    sb.AppendLink(baseType.DisplayName, baseType);
                }

                if (m_type.IsEnum)
                {
                    Type underlying = Enum.GetUnderlyingType(m_type);
                    sb.Append(" (");
                    sb.AppendName(Settings.GetKeyword(underlying.AssemblyQualifiedName));
                    sb.Append(")");
                }

                IElementBrowserInfo container = (ns.IsNullNamespace ? ns.Repository : (IElementBrowserInfo)ns);

                sb.EndFirstLine();
                sb.Append(@"     Member of ");
                sb.AppendLink(container.NodeText, container);
                sb.EndLine();

                return(sb.GetText());
            }
            catch (System.Exception ex)
            {
                throw new ApplicationException("Failed to write the type declaration for type '"
                                               + m_type.FullName + "'.", ex);
            }
        }
예제 #14
0
        public override int CompareTo(object obj)
        {
            if (!(obj is NetTypeBrowserInfo))
            {
                throw new ArgumentException("Object must be of type '" + GetType().FullName + "'.", "obj");
            }

            NetTypeBrowserInfo other = (NetTypeBrowserInfo)obj;

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

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

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

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

            case TypeOrder.ObjectAccess:
                // Compare object types
                int result2 = GetEffectiveTypeAccess(m_type).CompareTo(GetEffectiveTypeAccess(other.m_type));
                if (result2 != 0)
                {
                    return(result2);
                }

                // Same object access - compare names
                return(CompareTypeNames(m_type, other.m_type));

            default:
                throw new ApplicationException("Unsupported TypeOrder enum value: '"
                                               + Settings.TypeOrder.ToString() + "'.");
            }
        }
예제 #15
0
        private void AppendField(DescriptionBuilder sb, NetBrowserManager manager, FieldInfo field)
        {
            AppendFieldAttribute(sb, field, FieldAttributes.Static);
            AppendFieldAttribute(sb, field, FieldAttributes.InitOnly);
            AppendFieldAttribute(sb, field, FieldAttributes.Literal);

            NetTypeBrowserInfo.AppendParameterTypeDisplayName(manager, sb, field.FieldType, false, true);
            sb.Append(" ");

            sb.AppendName(field.Name);

            // Show values of constants, static readonly variables and enum identifiers.

            if (field.IsLiteral || (field.IsStatic && field.IsInitOnly))
            {
                sb.Append(" = ");
                sb.Append(GetConstantDisplayValue(field.GetValue(null), true));
            }
        }
예제 #16
0
        private void AppendMethod(DescriptionBuilder sb, NetBrowserManager manager, MethodInfo method)
        {
            AppendMethodAttributes(sb, method);

            NetTypeBrowserInfo.AppendParameterTypeDisplayName(manager, sb, method.ReturnType, false, true);
            sb.Append(" ");

            if (MethodIsOperator(method))
            {
                sb.AppendName(Settings.GetKeyword(method.Name));
            }
            else
            {
                sb.AppendName(method.Name);
            }

            sb.Append(" ( ");
            AppendParameters(sb, manager, method.GetParameters());
            sb.Append(" )");
        }
예제 #17
0
        private DescriptionText GetDescriptionInternal(NetBrowserManager manager, NetTypeBrowserInfo type)
        {
            DescriptionBuilder sb = new DescriptionBuilder(true);

            sb.Append(Settings.GetKeyword(GetMemberAccess(m_memberInfo)));
            sb.Append(" ");

            switch (m_memberInfo.MemberType)
            {
            case MemberTypes.Constructor:
                AppendConstructor(sb, manager, (ConstructorInfo)m_memberInfo);
                break;

            case MemberTypes.Method:
                AppendMethod(sb, manager, (MethodInfo)m_memberInfo);
                break;

            case MemberTypes.Property:
                AppendProperty(sb, manager, (PropertyInfo)m_memberInfo);
                break;

            case MemberTypes.Field:
                AppendField(sb, manager, (FieldInfo)m_memberInfo);
                break;

            case MemberTypes.Event:
                AppendEvent(sb, manager, (EventInfo)m_memberInfo);
                break;

            default:
                throw new ApplicationException("Unsupported member type: '" + m_memberInfo.MemberType.ToString() + "'.");
            }

            sb.EndFirstLine();
            sb.Append(@"     Member of ");
            sb.AppendLink(type.DisplayName, type);
            sb.EndLine();

            return(sb.GetText());
        }
예제 #18
0
        public override bool Equals(object obj)
        {
            NetTypeBrowserInfo other = obj as NetTypeBrowserInfo;

            if (other == null)
            {
                return(false);
            }

            // The other object may be a RemoteTypeBrowserInfo or just a NetTypeBrowserInfo.

            RemoteTypeBrowserInfo otherRemote = other as RemoteTypeBrowserInfo;

            if (otherRemote == null)
            {
                return(object.Equals(Wrapped, other));
            }
            else
            {
                return(object.Equals(Wrapped, otherRemote.Wrapped));
            }
        }
예제 #19
0
 private void CreateWrappedObject()
 {
     m_wrapped = m_namespace.GetType(m_name);
     Debug.Assert(m_wrapped != null, "m_wrapped != null");
 }
예제 #20
0
 internal void AddType(NetTypeBrowserInfo type)
 {
     Debug.Assert(type != null, "type != null");
     m_types.Add(type, type.FullName);
 }