Пример #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
        internal NetAssemblyBrowserInfo(Assembly assembly, NetBrowserManager manager)
        {
            Debug.Assert(assembly != null && manager != null, "assembly != null && manager != null");

            m_assembly = assembly;
            m_manager  = manager;
        }
Пример #3
0
        private void CreateRemoteManagerObject()
        {
            m_manager = (NetBrowserManager)m_remoteDomain.CreateInstanceAndUnwrap(
                typeof(NetBrowserManager).Assembly.FullName, typeof(NetBrowserManager).FullName);
            Debug.Assert(m_manager != null, "m_manager != null");

            m_manager.SetSettings(Settings);
        }
Пример #4
0
        private void AppendConstructor(DescriptionBuilder sb, NetBrowserManager manager, ConstructorInfo constructor)
        {
            AppendMethodAttribute(sb, constructor, MethodAttributes.Static);
            sb.AppendName(constructor.DeclaringType.Name);

            sb.Append(" ( ");
            AppendParameters(sb, manager, constructor.GetParameters());
            sb.Append(" )");
        }
Пример #5
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);
        }
Пример #6
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);
        }
Пример #7
0
        public void DisplayAssembly(string filePath, bool showMembers, bool showCheckBoxes)
        {
            if (filePath == null)
            {
                throw new ArgumentNullException("filePath");
            }

            NetBrowserManager manager = new NetBrowserManager();

            browser.Settings     = new NetBrowserSettings(showMembers, showCheckBoxes, Net.Language.CSharp);
            browser.Manager      = manager;
            browser.Repositories = new IRepositoryBrowserInfo[] { manager.GetAssemblyInfo(filePath) };

            SetButtonEnabled(DialogResult.OK, false);
        }
Пример #8
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(" )");
            }
        }
Пример #9
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));
            }
        }
Пример #10
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(" )");
        }
Пример #11
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());
        }
Пример #12
0
        internal static void WriteParameterType(NetBrowserManager manager, DescriptionBuilder sb,
                                                ParameterInfo parameter, bool link)
        {
            NetBrowserSettings settings = (NetBrowserSettings)manager.Settings;

            if (parameter.IsOut)
            {
                sb.Append(settings.GetKeyword(ParameterAttributes.Out));
                sb.Append(" ");
                AppendParameterTypeDisplayName(manager, sb, parameter.ParameterType, true, link);
            }
            else
            {
                if (parameter.IsDefined(typeof(ParamArrayAttribute), false))
                {
                    sb.Append(settings.GetKeyword(typeof(ParamArrayAttribute)));
                    sb.Append(" ");
                }

                AppendParameterTypeDisplayName(manager, sb, parameter.ParameterType, false, link);
            }
        }
Пример #13
0
        internal static void AppendParameterTypeDisplayName(NetBrowserManager manager,
                                                            DescriptionBuilder sb, Type type, bool ignoreRef, bool link)
        {
            NetBrowserSettings settings = (NetBrowserSettings)manager.Settings;

            if (type.HasElementType)
            {
                if (type.IsByRef)
                {
                    if (!ignoreRef)
                    {
                        sb.Append(settings.GetKeyword("Type.IsByRef"));
                        sb.Append(" ");
                    }
                    AppendParameterTypeDisplayName(manager, sb, type.GetElementType(), ignoreRef, link);
                }
                else if (type.IsArray)
                {
                    AppendParameterTypeDisplayName(manager, sb, type.GetElementType(), ignoreRef, link);

                    sb.Append(settings.GetKeyword(NetBrowserSettings.KeywordArrayStart));

                    int dimensions = type.GetArrayRank();
                    for (int index = 1; index < dimensions; index++)
                    {
                        sb.Append(",");
                    }

                    sb.Append(settings.GetKeyword(NetBrowserSettings.KeywordArrayEnd));
                }
                else if (type.IsPointer)
                {
                    AppendParameterTypeDisplayName(manager, sb, type.GetElementType(), ignoreRef, link);
                    sb.Append(" *");
                }
                else
                {
                    throw new ApplicationException("Type '" + type.Name + "' has element type, but is not a"
                                                   + " reference type, array or pointer.");
                }
            }
            else
            {
                string keyword = ((NetBrowserSettings)manager.Settings).GetKeyword(type.AssemblyQualifiedName);
                if (keyword == null)
                {
                    if (link)
                    {
                        sb.AppendLink(GetTypeDisplayFullName(type), manager.GetTypeInfoForLink(
                                          type.Assembly.Location, type.FullName));
                    }
                    else
                    {
                        sb.Append(GetTypeDisplayFullName(type));
                    }
                }
                else
                {
                    sb.Append(keyword);                     // We don't want to make keywords into links
                }
            }
        }