Пример #1
0
        protected override void BuildDelegateDeclaration(INamedTypeSymbol typeSymbol, _VSOBJDESCOPTIONS options)
        {
            Debug.Assert(typeSymbol.TypeKind == TypeKind.Delegate);

            BuildTypeModifiers(typeSymbol);
            AddText("delegate ");

            var delegateInvokeMethod = typeSymbol.DelegateInvokeMethod;

            AddTypeLink(delegateInvokeMethod.ReturnType, LinkFlags.None);
            AddText(" ");

            var typeQualificationStyle = (options & _VSOBJDESCOPTIONS.ODO_USEFULLNAME) != 0
                ? SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces
                : SymbolDisplayTypeQualificationStyle.NameOnly;

            var typeNameFormat = new SymbolDisplayFormat(
                typeQualificationStyle: typeQualificationStyle,
                genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters | SymbolDisplayGenericsOptions.IncludeVariance);

            AddName(typeSymbol.ToDisplayString(typeNameFormat));

            AddText("(");
            BuildParameterList(delegateInvokeMethod.Parameters);
            AddText(")");

            if (typeSymbol.IsGenericType)
            {
                BuildGenericConstraints(typeSymbol);
            }
        }
Пример #2
0
 public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description) {
     description.ClearDescriptionText();
     FunctionScopeNode funcScope = ScopeNode as FunctionScopeNode;
     if (funcScope != null) {
         description.AddDescriptionText3("def ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
         var def = funcScope.Definition;
         GetFunctionDescription(def, (text, kind, arg) => {
             description.AddDescriptionText3(text, kind, arg);
         });
         description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
         if (def.Body.Documentation != null) {
             description.AddDescriptionText3("    " + def.Body.Documentation, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
         }
     } else {
         var classScope = ScopeNode as ClassScopeNode;
         if (classScope != null) {
             FillClassDescription(description, classScope);
         } else {
             var assign = ScopeNode as AssignmentScopeNode;
             if (assign != null) {
                 description.AddDescriptionText3("field ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                 description.AddDescriptionText3(assign.Name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
                 description.AddDescriptionText3("\n", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                 description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
             }
         }
     }
 }
        internal bool TryFillDescription(ObjectListItem listItem, IVsObjectBrowserDescription3 description, _VSOBJDESCOPTIONS options)
        {
            var project = GetProject(listItem);
            if (project == null)
            {
                return false;
            }

            return CreateDescriptionBuilder(description, listItem, project).TryBuild(options);
        }
Пример #4
0
        private void BuildMember(MemberListItem memberListItem, _VSOBJDESCOPTIONS options)
        {
            var compilation = GetCompilation();

            if (compilation == null)
            {
                return;
            }

            var symbol = memberListItem.ResolveTypedSymbol(compilation);

            if (symbol == null)
            {
                return;
            }

            switch (symbol.Kind)
            {
            case SymbolKind.Method:
                BuildMethodDeclaration((IMethodSymbol)symbol, options);
                break;

            case SymbolKind.Field:
                BuildFieldDeclaration((IFieldSymbol)symbol, options);
                break;

            case SymbolKind.Property:
                BuildPropertyDeclaration((IPropertySymbol)symbol, options);
                break;

            case SymbolKind.Event:
                BuildEventDeclaration((IEventSymbol)symbol, options);
                break;

            default:
                Debug.Fail("Unsupported member kind: " + symbol.Kind.ToString());
                return;
            }

            AddEndDeclaration();
            BuildMemberOf(symbol.ContainingType, options);

            BuildXmlDocumentation(symbol, compilation, options);
        }
Пример #5
0
        internal bool TryBuild(_VSOBJDESCOPTIONS options)
        {
            var projectListItem = _listItem as ProjectListItem;

            if (projectListItem != null)
            {
                BuildProject(projectListItem);
                return(true);
            }

            var referenceListItem = _listItem as ReferenceListItem;

            if (referenceListItem != null)
            {
                BuildReference(referenceListItem);
                return(true);
            }

            var namespaceListItem = _listItem as NamespaceListItem;

            if (namespaceListItem != null)
            {
                BuildNamespace(namespaceListItem, options);
                return(true);
            }

            var typeListItem = _listItem as TypeListItem;

            if (typeListItem != null)
            {
                BuildType(typeListItem, options);
                return(true);
            }

            var memberListItem = _listItem as MemberListItem;

            if (memberListItem != null)
            {
                BuildMember(memberListItem, options);
                return(true);
            }

            return(false);
        }
Пример #6
0
 public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     // TODO:
     //FunctionScopeNode funcScope = ScopeNode as FunctionScopeNode;
     //if (funcScope != null) {
     //    description.AddDescriptionText3("def ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
     //    var def = funcScope.Definition;
     //    GetFunctionDescription(def, (text, kind, arg) => {
     //        description.AddDescriptionText3(text, kind, arg);
     //    });
     //    description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
     //    if (def.Body.Documentation != null) {
     //        description.AddDescriptionText3("    " + def.Body.Documentation, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
     //    }
     //} else {
     description.AddDescriptionText3("class ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
     description.AddDescriptionText3(ScopeNode.Name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
     // }
 }
Пример #7
0
 public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     // TODO:
     //FunctionScopeNode funcScope = ScopeNode as FunctionScopeNode;
     //if (funcScope != null) {
     //    description.AddDescriptionText3("def ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
     //    var def = funcScope.Definition;
     //    GetFunctionDescription(def, (text, kind, arg) => {
     //        description.AddDescriptionText3(text, kind, arg);
     //    });
     //    description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
     //    if (def.Body.Documentation != null) {
     //        description.AddDescriptionText3("    " + def.Body.Documentation, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
     //    }
     //} else {
         description.AddDescriptionText3("class ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
         description.AddDescriptionText3(ScopeNode.Name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
     // }
 }
        private void BuildMemberOf(ISymbol containingSymbol, _VSOBJDESCOPTIONS options)
        {
            if (containingSymbol is INamespaceSymbol &&
                ((INamespaceSymbol)containingSymbol).IsGlobalNamespace)
            {
                containingSymbol = containingSymbol.ContainingAssembly;
            }

            var memberOfText = ServicesVSResources.Library_MemberOf;
            var specifier    = "{0}";

            var index = memberOfText.IndexOf(specifier);

            if (index < 0)
            {
                Debug.Fail("MemberOf string resource is incorrect.");
                return;
            }

            var left  = memberOfText.Substring(0, index);
            var right = memberOfText.Substring(index + specifier.Length);

            AddIndent();
            AddText(left);

            if (containingSymbol is IAssemblySymbol)
            {
                AddAssemblyLink((IAssemblySymbol)containingSymbol);
            }
            else if (containingSymbol is ITypeSymbol)
            {
                AddTypeLink((ITypeSymbol)containingSymbol, LinkFlags.SplitNamespaceAndType | LinkFlags.ExpandPredefinedTypes);
            }
            else if (containingSymbol is INamespaceSymbol)
            {
                AddNamespaceLink((INamespaceSymbol)containingSymbol);
            }

            AddText(right);
            AddEndDeclaration();
        }
        private void BuildNamespace(NamespaceListItem namespaceListItem, _VSOBJDESCOPTIONS options)
        {
            var compilation = GetCompilation();

            if (compilation == null)
            {
                return;
            }

            var namespaceSymbol = namespaceListItem.ResolveTypedSymbol(compilation);

            if (namespaceSymbol == null)
            {
                return;
            }

            BuildNamespaceDeclaration(namespaceSymbol, options);

            AddEndDeclaration();
            BuildMemberOf(namespaceSymbol.ContainingAssembly, options);
        }
        public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
        {
            description.ClearDescriptionText();
            FunctionScopeNode funcScope = ScopeNode as FunctionScopeNode;

            if (funcScope != null)
            {
                description.AddDescriptionText3("def ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                var def = funcScope.Definition;
                GetFunctionDescription(def, (text, kind, arg) => {
                    description.AddDescriptionText3(text, kind, arg);
                });
                description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
                if (def.Body.Documentation != null)
                {
                    description.AddDescriptionText3("    " + def.Body.Documentation, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                }
            }
            else
            {
                var classScope = ScopeNode as ClassScopeNode;
                if (classScope != null)
                {
                    FillClassDescription(description, classScope);
                }
                else
                {
                    var assign = ScopeNode as AssignmentScopeNode;
                    if (assign != null)
                    {
                        description.AddDescriptionText3("field ", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                        description.AddDescriptionText3(assign.Name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
                        description.AddDescriptionText3("\n", VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                        description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
                    }
                }
            }
        }
Пример #11
0
        protected override void BuildDelegateDeclaration(
            INamedTypeSymbol typeSymbol,
            _VSOBJDESCOPTIONS options
            )
        {
            Debug.Assert(typeSymbol.TypeKind == TypeKind.Delegate);

            BuildTypeModifiers(typeSymbol);
            AddText("delegate ");

            var delegateInvokeMethod = typeSymbol.DelegateInvokeMethod;

            AddTypeLink(delegateInvokeMethod.ReturnType, LinkFlags.None);
            AddText(" ");

            var typeQualificationStyle =
                (options & _VSOBJDESCOPTIONS.ODO_USEFULLNAME) != 0
                    ? SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces
                    : SymbolDisplayTypeQualificationStyle.NameOnly;

            var typeNameFormat = new SymbolDisplayFormat(
                typeQualificationStyle: typeQualificationStyle,
                genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters
                | SymbolDisplayGenericsOptions.IncludeVariance
                );

            AddName(typeSymbol.ToDisplayString(typeNameFormat));

            AddText("(");
            BuildParameterList(delegateInvokeMethod.Parameters);
            AddText(")");

            if (typeSymbol.IsGenericType)
            {
                BuildGenericConstraints(typeSymbol);
            }
        }
Пример #12
0
        public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
        {
            description.ClearDescriptionText();
            foreach (var value in _value.Values)
            {
                foreach (var desc in value.description)
                {
                    VSOBDESCRIPTIONSECTION kind;
                    switch (desc.kind)
                    {
                    case "enddecl": kind = VSOBDESCRIPTIONSECTION.OBDS_ENDDECL; break;

                    case "name": kind = VSOBDESCRIPTIONSECTION.OBDS_NAME; break;

                    case "param": kind = VSOBDESCRIPTIONSECTION.OBDS_PARAM; break;

                    case "comma": kind = VSOBDESCRIPTIONSECTION.OBDS_COMMA; break;

                    default: kind = VSOBDESCRIPTIONSECTION.OBDS_MISC; break;
                    }
                    description.AddDescriptionText3(desc.text, kind, null);
                }
            }
        }
 protected abstract void BuildEventDeclaration(IEventSymbol eventSymbol, _VSOBJDESCOPTIONS options);
 protected abstract void BuildFieldDeclaration(IFieldSymbol fieldSymbol, _VSOBJDESCOPTIONS options);
Пример #15
0
        protected override void BuildEventDeclaration(IEventSymbol eventSymbol, _VSOBJDESCOPTIONS options)
        {
            BuildMemberModifiers(eventSymbol);

            AddText("event ");

            AddTypeLink(eventSymbol.Type, LinkFlags.None);
            AddText(" ");

            AddName(eventSymbol.Name);
        }
Пример #16
0
        protected override void BuildFieldDeclaration(IFieldSymbol fieldSymbol, _VSOBJDESCOPTIONS options)
        {
            BuildMemberModifiers(fieldSymbol);

            if (fieldSymbol.ContainingType.TypeKind != TypeKind.Enum)
            {
                AddTypeLink(fieldSymbol.Type, LinkFlags.None);
                AddText(" ");
            }

            AddName(fieldSymbol.Name);
        }
Пример #17
0
        protected override void buildDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
        {
            description.ClearDescriptionText();
            //
            string descText = this.Name;
            //
            string namesp    = "";
            string className = "";

            if (member != null)
            {
                if (member.Parent != null)
                {
                    if (member.Parent is IXType)
                    {
                        namesp    = ((IXType)member.Parent).Namespace;
                        className = ((IXType)member.Parent).Name;
                    }
                }
                //
                string modifier = "";
                string access   = "";
                if ((member is XTypeDefinition) && (member.Kind != Kind.Namespace))
                {
                    modifier = getModifierString(((XTypeDefinition)member).Modifiers);
                    access   = getAccessString(((XTypeDefinition)member).Visibility);
                }
                else if ((member is XMemberDefinition) && ((member.Kind != Kind.Function) && (member.Kind != Kind.Procedure)))
                {
                    modifier = getModifierString(((XMemberDefinition)member).Modifiers);
                    access   = getAccessString(((XMemberDefinition)member).Visibility);
                }
                //
                if (!String.IsNullOrEmpty(modifier))
                {
                    description.AddDescriptionText3(modifier, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                }
                //
                if (!String.IsNullOrEmpty(access))
                {
                    description.AddDescriptionText3(access, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                }
                //
                descText = member.Kind.DisplayName().ToUpper() + " ";
                description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                descText = member.Name;
                description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
                // Parameters ?
                if (this.NodeType == LibraryNodeType.Members)
                {
                    if (((XMemberDefinition)member).HasParameters)
                    {
                        descText = "(";
                        description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                        //
                        int paramNum = 1;
                        foreach (XVariable param in ((XMemberDefinition)member).Parameters)
                        {
                            descText = param.Name + " AS ";
                            description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_PARAM, null);
                            descText = param.TypeName;
                            //
                            IVsNavInfo navInfo = buildNavInfo(member.File, param.TypeName);
                            //
                            description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_TYPE, navInfo);
                            // Need a comma ?
                            if (paramNum < ((XMemberDefinition)member).ParameterCount)
                            {
                                paramNum++;
                                descText = ",";
                                description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_COMMA, null);
                            }
                        }
                        descText = ")";
                        description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                    }
                }
                if (member.Kind.HasReturnType())
                {
                    descText = " AS ";
                    description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                    descText = member.TypeName;
                    description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_TYPE, null);
                }

                //
                if ((member.Parent is XTypeDefinition) && (member.Parent.Kind == Kind.Class))
                {
                    descText = " CLASS ";
                    description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_MISC, null);
                    descText = className;
                    description.AddDescriptionText3(descText, VSOBDESCRIPTIONSECTION.OBDS_TYPE, null);
                }
                //
                description.AddDescriptionText3(null, VSOBDESCRIPTIONSECTION.OBDS_ENDDECL, null);
            }
        }
Пример #18
0
 protected abstract void BuildNamespaceDeclaration(INamespaceSymbol namespaceSymbol, _VSOBJDESCOPTIONS options);
Пример #19
0
        private void BuildMember(MemberListItem memberListItem, _VSOBJDESCOPTIONS options)
        {
            var compilation = GetCompilation();
            if (compilation == null)
            {
                return;
            }

            var symbol = memberListItem.ResolveTypedSymbol(compilation);
            if (symbol == null)
            {
                return;
            }

            switch (symbol.Kind)
            {
                case SymbolKind.Method:
                    BuildMethodDeclaration((IMethodSymbol)symbol, options);
                    break;

                case SymbolKind.Field:
                    BuildFieldDeclaration((IFieldSymbol)symbol, options);
                    break;

                case SymbolKind.Property:
                    BuildPropertyDeclaration((IPropertySymbol)symbol, options);
                    break;

                case SymbolKind.Event:
                    BuildEventDeclaration((IEventSymbol)symbol, options);
                    break;

                default:
                    Debug.Fail("Unsupported member kind: " + symbol.Kind.ToString());
                    return;
            }

            AddEndDeclaration();
            BuildMemberOf(symbol.ContainingType, options);

            BuildXmlDocumentation(symbol, compilation, options);
        }
Пример #20
0
        private void BuildType(TypeListItem typeListItem, _VSOBJDESCOPTIONS options)
        {
            var compilation = GetCompilation();
            if (compilation == null)
            {
                return;
            }

            var symbol = typeListItem.ResolveTypedSymbol(compilation);
            if (symbol == null)
            {
                return;
            }

            if (symbol.TypeKind == TypeKind.Delegate)
            {
                BuildDelegateDeclaration(symbol, options);
            }
            else
            {
                BuildTypeDeclaration(symbol, options);
            }

            AddEndDeclaration();
            BuildMemberOf(symbol.ContainingNamespace, options);

            BuildXmlDocumentation(symbol, compilation, options);
        }
Пример #21
0
        private void BuildNamespace(NamespaceListItem namespaceListItem, _VSOBJDESCOPTIONS options)
        {
            var compilation = GetCompilation();
            if (compilation == null)
            {
                return;
            }

            var namespaceSymbol = namespaceListItem.ResolveTypedSymbol(compilation);
            if (namespaceSymbol == null)
            {
                return;
            }

            BuildNamespaceDeclaration(namespaceSymbol, options);

            AddEndDeclaration();
            BuildMemberOf(namespaceSymbol.ContainingAssembly, options);
        }
Пример #22
0
        public override void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description) {
            description.ClearDescriptionText();
            foreach (var value in _value.Values) {
                foreach (var desc in value.description) {
                    VSOBDESCRIPTIONSECTION kind;
                    switch (desc.kind) {
                        case "enddecl": kind = VSOBDESCRIPTIONSECTION.OBDS_ENDDECL; break;
                        case "name": kind = VSOBDESCRIPTIONSECTION.OBDS_NAME; break;
                        case "param": kind = VSOBDESCRIPTIONSECTION.OBDS_PARAM; break;
                        case "comma": kind = VSOBDESCRIPTIONSECTION.OBDS_COMMA; break;
                        default: kind = VSOBDESCRIPTIONSECTION.OBDS_MISC; break;

                    }
                    description.AddDescriptionText3(desc.text, kind, null);
                }
            }
        }
        private void BuildXmlDocumentation(ISymbol symbol, Compilation compilation, _VSOBJDESCOPTIONS options)
        {
            var documentationComment = symbol.GetDocumentationComment(expandIncludes: true, cancellationToken: CancellationToken.None);

            if (documentationComment == null)
            {
                return;
            }

            var formattingService = _project.LanguageServices.GetService <IDocumentationCommentFormattingService>();

            if (formattingService == null)
            {
                return;
            }

            var emittedDocs = false;

            if (documentationComment.SummaryText != null)
            {
                AddLineBreak();
                AddName(ServicesVSResources.Library_Summary);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.SummaryText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.TypeParameterNames.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_TypeParameters);

                foreach (var typeParameterName in documentationComment.TypeParameterNames)
                {
                    AddLineBreak();

                    var typeParameterText = documentationComment.GetTypeParameterText(typeParameterName);
                    if (typeParameterText != null)
                    {
                        AddParam(typeParameterName);
                        AddText(": ");

                        AddText(formattingService.Format(typeParameterText, compilation));
                        emittedDocs = true;
                    }
                }
            }

            if (documentationComment.ParameterNames.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Parameters);

                foreach (var parameterName in documentationComment.ParameterNames)
                {
                    AddLineBreak();

                    var parameterText = documentationComment.GetParameterText(parameterName);
                    if (parameterText != null)
                    {
                        AddParam(parameterName);
                        AddText(": ");

                        AddText(formattingService.Format(parameterText, compilation));
                        emittedDocs = true;
                    }
                }
            }

            if (ShowReturnsDocumentation(symbol) && documentationComment.ReturnsText != null)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Returns);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.ReturnsText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.RemarksText != null)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Remarks);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.RemarksText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.ExceptionTypes.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Exceptions);

                foreach (var exceptionType in documentationComment.ExceptionTypes)
                {
                    var exceptionTypeSymbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(exceptionType, compilation) as INamedTypeSymbol;
                    if (exceptionTypeSymbol != null)
                    {
                        AddLineBreak();

                        var exceptionTexts = documentationComment.GetExceptionTexts(exceptionType);
                        if (exceptionTexts.Length == 0)
                        {
                            AddTypeLink(exceptionTypeSymbol, LinkFlags.None);
                        }
                        else
                        {
                            foreach (var exceptionText in exceptionTexts)
                            {
                                AddTypeLink(exceptionTypeSymbol, LinkFlags.None);
                                AddText(": ");
                                AddText(formattingService.Format(exceptionText, compilation));
                            }
                        }

                        emittedDocs = true;
                    }
                }
            }
        }
Пример #24
0
 public virtual void FillDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     description.AddDescriptionText3(_name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
 }
Пример #25
0
 protected virtual void FillDescription(_VSOBJDESCOPTIONS flagsArg, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     description.AddDescriptionText3(symbolText, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
 }
Пример #26
0
 protected virtual void buildDescription(_VSOBJDESCOPTIONS flags, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     description.AddDescriptionText3(name, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
 }
Пример #27
0
 public void FillDescription(_VSOBJDESCOPTIONS _VSOBJDESCOPTIONS, IVsObjectBrowserDescription3 pobDesc)
 {
 }
Пример #28
0
        protected override void BuildPropertyDeclaration(IPropertySymbol propertySymbol, _VSOBJDESCOPTIONS options)
        {
            BuildMemberModifiers(propertySymbol);

            AddTypeLink(propertySymbol.Type, LinkFlags.None);
            AddText(" ");

            if (propertySymbol.IsIndexer)
            {
                AddName("this");
                AddText("[");
                BuildParameterList(propertySymbol.Parameters);
                AddText("]");
            }
            else
            {
                AddName(propertySymbol.Name);
            }

            AddText(" { ");

            if (propertySymbol.GetMethod != null)
            {
                if (propertySymbol.GetMethod.DeclaredAccessibility != propertySymbol.DeclaredAccessibility)
                {
                    BuildAccessibility(propertySymbol.GetMethod);
                }

                AddText("get; ");
            }

            if (propertySymbol.SetMethod != null)
            {
                if (propertySymbol.SetMethod.DeclaredAccessibility != propertySymbol.DeclaredAccessibility)
                {
                    BuildAccessibility(propertySymbol.SetMethod);
                }

                AddText("set; ");
            }

            AddText("}");
        }
Пример #29
0
        protected override void BuildPropertyDeclaration(IPropertySymbol propertySymbol, _VSOBJDESCOPTIONS options)
        {
            BuildMemberModifiers(propertySymbol);

            AddTypeLink(propertySymbol.Type, LinkFlags.None);
            AddText(" ");

            if (propertySymbol.IsIndexer)
            {
                AddName("this");
                AddText("[");
                BuildParameterList(propertySymbol.Parameters);
                AddText("]");
            }
            else
            {
                AddName(propertySymbol.Name);
            }

            AddText(" { ");

            if (propertySymbol.GetMethod != null)
            {
                if (propertySymbol.GetMethod.DeclaredAccessibility != propertySymbol.DeclaredAccessibility)
                {
                    BuildAccessibility(propertySymbol.GetMethod);
                }

                AddText("get; ");
            }

            if (propertySymbol.SetMethod != null)
            {
                if (propertySymbol.SetMethod.DeclaredAccessibility != propertySymbol.DeclaredAccessibility)
                {
                    BuildAccessibility(propertySymbol.SetMethod);
                }

                AddText("set; ");
            }

            AddText("}");
        }
Пример #30
0
        protected override void BuildTypeDeclaration(INamedTypeSymbol typeSymbol, _VSOBJDESCOPTIONS options)
        {
            BuildTypeModifiers(typeSymbol);

            switch (typeSymbol.TypeKind)
            {
                case TypeKind.Enum:
                    AddText("enum ");
                    break;

                case TypeKind.Struct:
                    AddText("struct ");
                    break;

                case TypeKind.Interface:
                    AddText("interface ");
                    break;

                case TypeKind.Class:
                    AddText("class ");
                    break;

                default:
                    Debug.Fail("Invalid type kind encountered: " + typeSymbol.TypeKind.ToString());
                    break;
            }

            var typeNameFormat = new SymbolDisplayFormat(
                genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters | SymbolDisplayGenericsOptions.IncludeVariance);

            AddName(typeSymbol.ToDisplayString(typeNameFormat));

            if (typeSymbol.TypeKind == TypeKind.Enum)
            {
                var underlyingType = typeSymbol.EnumUnderlyingType;
                if (underlyingType != null)
                {
                    if (underlyingType.SpecialType != SpecialType.System_Int32)
                    {
                        AddText(" : ");
                        AddTypeLink(underlyingType, LinkFlags.None);
                    }
                }
            }
            else
            {
                var baseType = typeSymbol.BaseType;
                if (baseType != null)
                {
                    if (baseType.SpecialType != SpecialType.System_Object &&
                        baseType.SpecialType != SpecialType.System_Delegate &&
                        baseType.SpecialType != SpecialType.System_MulticastDelegate &&
                        baseType.SpecialType != SpecialType.System_Enum &&
                        baseType.SpecialType != SpecialType.System_ValueType)
                    {
                        AddText(" : ");
                        AddTypeLink(baseType, LinkFlags.None);
                    }
                }
            }

            if (typeSymbol.IsGenericType)
            {
                BuildGenericConstraints(typeSymbol);
            }
        }
 protected abstract void BuildTypeDeclaration(INamedTypeSymbol typeSymbol, _VSOBJDESCOPTIONS options);
Пример #32
0
 protected abstract void BuildTypeDeclaration(INamedTypeSymbol typeSymbol, _VSOBJDESCOPTIONS options);
Пример #33
0
        internal bool TryFillDescription(ObjectListItem listItem, IVsObjectBrowserDescription3 description, _VSOBJDESCOPTIONS options)
        {
            var project = GetProject(listItem);

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

            return(CreateDescriptionBuilder(description, listItem, project).TryBuild(options));
        }
Пример #34
0
 public virtual void FillDescription(_VSOBJDESCOPTIONS _VSOBJDESCOPTIONS, IVsObjectBrowserDescription3 pobDesc) {
 }
Пример #35
0
 protected abstract void BuildMethodDeclaration(IMethodSymbol methodSymbol, _VSOBJDESCOPTIONS options);
Пример #36
0
 protected override void BuildNamespaceDeclaration(INamespaceSymbol namespaceSymbol, _VSOBJDESCOPTIONS options)
 {
     AddText("namespace ");
     AddName(namespaceSymbol.ToDisplayString());
 }
Пример #37
0
 protected abstract void BuildFieldDeclaration(IFieldSymbol fieldSymbol, _VSOBJDESCOPTIONS options);
Пример #38
0
        protected override void BuildTypeDeclaration(INamedTypeSymbol typeSymbol, _VSOBJDESCOPTIONS options)
        {
            BuildTypeModifiers(typeSymbol);

            switch (typeSymbol.TypeKind)
            {
            case TypeKind.Enum:
                AddText("enum ");
                break;

            case TypeKind.Struct:
                AddText("struct ");
                break;

            case TypeKind.Interface:
                AddText("interface ");
                break;

            case TypeKind.Class:
                AddText("class ");
                break;

            default:
                Debug.Fail("Invalid type kind encountered: " + typeSymbol.TypeKind.ToString());
                break;
            }

            var typeNameFormat = new SymbolDisplayFormat(
                genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters | SymbolDisplayGenericsOptions.IncludeVariance);

            AddName(typeSymbol.ToDisplayString(typeNameFormat));

            if (typeSymbol.TypeKind == TypeKind.Enum)
            {
                var underlyingType = typeSymbol.EnumUnderlyingType;
                if (underlyingType != null)
                {
                    if (underlyingType.SpecialType != SpecialType.System_Int32)
                    {
                        AddText(" : ");
                        AddTypeLink(underlyingType, LinkFlags.None);
                    }
                }
            }
            else
            {
                var baseType = typeSymbol.BaseType;
                if (baseType != null)
                {
                    if (baseType.SpecialType != SpecialType.System_Object &&
                        baseType.SpecialType != SpecialType.System_Delegate &&
                        baseType.SpecialType != SpecialType.System_MulticastDelegate &&
                        baseType.SpecialType != SpecialType.System_Enum &&
                        baseType.SpecialType != SpecialType.System_ValueType)
                    {
                        AddText(" : ");
                        AddTypeLink(baseType, LinkFlags.None);
                    }
                }
            }

            if (typeSymbol.IsGenericType)
            {
                BuildGenericConstraints(typeSymbol);
            }
        }
Пример #39
0
 protected abstract void BuildPropertyDeclaration(IPropertySymbol propertySymbol, _VSOBJDESCOPTIONS options);
 protected abstract void BuildNamespaceDeclaration(INamespaceSymbol namespaceSymbol, _VSOBJDESCOPTIONS options);
Пример #41
0
 protected abstract void BuildEventDeclaration(IEventSymbol eventSymbol, _VSOBJDESCOPTIONS options);
 protected abstract void BuildMethodDeclaration(IMethodSymbol methodSymbol, _VSOBJDESCOPTIONS options);
Пример #43
0
        private void BuildMemberOf(ISymbol containingSymbol, _VSOBJDESCOPTIONS options)
        {
            if (containingSymbol is INamespaceSymbol &&
                ((INamespaceSymbol)containingSymbol).IsGlobalNamespace)
            {
                containingSymbol = containingSymbol.ContainingAssembly;
            }

            var memberOfText = ServicesVSResources.Library_MemberOf;
            const string specifier = "{0}";

            var index = memberOfText.IndexOf(specifier, StringComparison.Ordinal);
            if (index < 0)
            {
                Debug.Fail("MemberOf string resource is incorrect.");
                return;
            }

            var left = memberOfText.Substring(0, index);
            var right = memberOfText.Substring(index + specifier.Length);

            AddIndent();
            AddText(left);

            if (containingSymbol is IAssemblySymbol)
            {
                AddAssemblyLink((IAssemblySymbol)containingSymbol);
            }
            else if (containingSymbol is ITypeSymbol)
            {
                AddTypeLink((ITypeSymbol)containingSymbol, LinkFlags.SplitNamespaceAndType | LinkFlags.ExpandPredefinedTypes);
            }
            else if (containingSymbol is INamespaceSymbol)
            {
                AddNamespaceLink((INamespaceSymbol)containingSymbol);
            }

            AddText(right);
            AddEndDeclaration();
        }
 protected abstract void BuildPropertyDeclaration(IPropertySymbol propertySymbol, _VSOBJDESCOPTIONS options);
Пример #45
0
        private void BuildXmlDocumentation(ISymbol symbol, Compilation compilation, _VSOBJDESCOPTIONS options)
        {
            var documentationComment = symbol.GetDocumentationComment(expandIncludes: true, cancellationToken: CancellationToken.None);
            if (documentationComment == null)
            {
                return;
            }

            var formattingService = _project.LanguageServices.GetService<IDocumentationCommentFormattingService>();
            if (formattingService == null)
            {
                return;
            }

            var emittedDocs = false;

            if (documentationComment.SummaryText != null)
            {
                AddLineBreak();
                AddName(ServicesVSResources.Library_Summary);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.SummaryText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.TypeParameterNames.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_TypeParameters);

                foreach (var typeParameterName in documentationComment.TypeParameterNames)
                {
                    AddLineBreak();

                    var typeParameterText = documentationComment.GetTypeParameterText(typeParameterName);
                    if (typeParameterText != null)
                    {
                        AddParam(typeParameterName);
                        AddText(": ");

                        AddText(formattingService.Format(typeParameterText, compilation));
                        emittedDocs = true;
                    }
                }
            }

            if (documentationComment.ParameterNames.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Parameters);

                foreach (var parameterName in documentationComment.ParameterNames)
                {
                    AddLineBreak();

                    var parameterText = documentationComment.GetParameterText(parameterName);
                    if (parameterText != null)
                    {
                        AddParam(parameterName);
                        AddText(": ");

                        AddText(formattingService.Format(parameterText, compilation));
                        emittedDocs = true;
                    }
                }
            }

            if (ShowReturnsDocumentation(symbol) && documentationComment.ReturnsText != null)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Returns);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.ReturnsText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.RemarksText != null)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Remarks);
                AddLineBreak();

                AddText(formattingService.Format(documentationComment.RemarksText, compilation));
                emittedDocs = true;
            }

            if (documentationComment.ExceptionTypes.Length > 0)
            {
                if (emittedDocs)
                {
                    AddLineBreak();
                }

                AddLineBreak();
                AddName(ServicesVSResources.Library_Exceptions);

                foreach (var exceptionType in documentationComment.ExceptionTypes)
                {
                    var exceptionTypeSymbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(exceptionType, compilation) as INamedTypeSymbol;
                    if (exceptionTypeSymbol != null)
                    {
                        AddLineBreak();

                        var exceptionTexts = documentationComment.GetExceptionTexts(exceptionType);
                        if (exceptionTexts.Length == 0)
                        {
                            AddTypeLink(exceptionTypeSymbol, LinkFlags.None);
                        }
                        else
                        {
                            foreach (var exceptionText in exceptionTexts)
                            {
                                AddTypeLink(exceptionTypeSymbol, LinkFlags.None);
                                AddText(": ");
                                AddText(formattingService.Format(exceptionText, compilation));
                            }
                        }

                        emittedDocs = true;
                    }
                }
            }
        }
Пример #46
0
        internal bool TryBuild(_VSOBJDESCOPTIONS options)
        {
            var projectListItem = _listItem as ProjectListItem;
            if (projectListItem != null)
            {
                BuildProject(projectListItem);
                return true;
            }

            var referenceListItem = _listItem as ReferenceListItem;
            if (referenceListItem != null)
            {
                BuildReference(referenceListItem);
                return true;
            }

            var namespaceListItem = _listItem as NamespaceListItem;
            if (namespaceListItem != null)
            {
                BuildNamespace(namespaceListItem, options);
                return true;
            }

            var typeListItem = _listItem as TypeListItem;
            if (typeListItem != null)
            {
                BuildType(typeListItem, options);
                return true;
            }

            var memberListItem = _listItem as MemberListItem;
            if (memberListItem != null)
            {
                BuildMember(memberListItem, options);
                return true;
            }

            return false;
        }
Пример #47
0
        protected override void BuildMethodDeclaration(IMethodSymbol methodSymbol, _VSOBJDESCOPTIONS options)
        {
            BuildMemberModifiers(methodSymbol);

            if (methodSymbol.MethodKind != MethodKind.Constructor &&
                methodSymbol.MethodKind != MethodKind.Destructor &&
                methodSymbol.MethodKind != MethodKind.StaticConstructor &&
                methodSymbol.MethodKind != MethodKind.Conversion)
            {
                AddTypeLink(methodSymbol.ReturnType, LinkFlags.None);
                AddText(" ");
            }

            if (methodSymbol.MethodKind == MethodKind.Conversion)
            {
                switch (methodSymbol.Name)
                {
                    case WellKnownMemberNames.ImplicitConversionName:
                        AddName("implicit operator ");
                        break;

                    case WellKnownMemberNames.ExplicitConversionName:
                        AddName("explicit operator ");
                        break;
                }

                AddTypeLink(methodSymbol.ReturnType, LinkFlags.None);
            }
            else
            {
                var methodNameFormat = new SymbolDisplayFormat(
                    genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters | SymbolDisplayGenericsOptions.IncludeVariance);

                AddName(methodSymbol.ToDisplayString(methodNameFormat));
            }

            AddText("(");

            if (methodSymbol.IsExtensionMethod)
            {
                AddText("this ");
            }

            BuildParameterList(methodSymbol.Parameters);
            AddText(")");

            if (methodSymbol.IsGenericMethod)
            {
                BuildGenericConstraints(methodSymbol);
            }
        }
Пример #48
0
 protected virtual void FillDescription(_VSOBJDESCOPTIONS flagsArg, IVsObjectBrowserDescription3 description)
 {
     description.ClearDescriptionText();
     description.AddDescriptionText3(symbolText, VSOBDESCRIPTIONSECTION.OBDS_NAME, null);
 }
Пример #49
0
 protected override void BuildNamespaceDeclaration(INamespaceSymbol namespaceSymbol, _VSOBJDESCOPTIONS options)
 {
     AddText("namespace ");
     AddName(namespaceSymbol.ToDisplayString());
 }
Пример #50
0
        protected override bool TryFillDescription(uint index, _VSOBJDESCOPTIONS options, IVsObjectBrowserDescription3 description)
        {
            var listItem = GetListItem(index);

            return(this.LibraryManager.TryFillDescription(listItem, description, options));
        }
Пример #51
0
 protected virtual bool TryFillDescription(uint index, _VSOBJDESCOPTIONS options, IVsObjectBrowserDescription3 description)
 {
     return(false);
 }