Example #1
0
        void ShowSymbolDeclaration(ISymbol symbol, TextBlock info)
        {
            if (symbol.IsAbstract)
            {
                info.Append("abstract ", Keyword);
            }
            else if (symbol.IsStatic)
            {
                info.Append("static ", Keyword);
            }
            else if (symbol.IsVirtual)
            {
                info.Append("virtual ", Keyword);
            }
            else if (symbol.IsOverride)
            {
                info.Append(symbol.IsSealed ? "sealed override " : "override ", Keyword);
                ISymbol o = null;
                switch (symbol.Kind)
                {
                case SymbolKind.Method: o = ((IMethodSymbol)symbol).OverriddenMethod; break;

                case SymbolKind.Property: o = ((IPropertySymbol)symbol).OverriddenProperty; break;

                case SymbolKind.Event: o = ((IEventSymbol)symbol).OverriddenEvent; break;
                }
                if (o != null)
                {
                    var t = o.ContainingType;
                    if (t != null && t.IsCommonClass() == false)
                    {
                        info.AddSymbol(t, null, this).Append(".").AddSymbol(o, null, this).Append(" ");
                    }
                }
            }
            else if (symbol.IsSealed && (symbol.Kind == SymbolKind.NamedType && (symbol as INamedTypeSymbol).TypeKind == TypeKind.Class || symbol.Kind == SymbolKind.Method))
            {
                info.Append("sealed ", Keyword);
            }
            if (symbol.Kind == SymbolKind.Method)
            {
                var method = symbol as IMethodSymbol;
                if (method.IsAsync)
                {
                    info.Append("async ");
                }
                if (method.ReturnsByRef)
                {
                    info.Append("ref ");
                }
                else if (method.ReturnsByRefReadonly)
                {
                    info.Append("ref readonly");
                }
            }
            if (symbol.IsExtern)
            {
                info.Append("extern ", Keyword);
            }
        }
Example #2
0
        static void ShowDelegateSignature(TextBlock content, INamedTypeSymbol type)
        {
            content.AppendLineBreak().Append(R.T_Signature);
            var invoke = type.OriginalDefinition.DelegateInvokeMethod;

            content.AddSymbol(invoke.ReturnType, false, SymbolFormatter.Instance)
            .Append(" ").AddSymbol(type, true, SymbolFormatter.Instance)
            .AddParameters(invoke.Parameters, SymbolFormatter.Instance);
        }
Example #3
0
        static void ShowDelegateSignature(TextBlock content, INamedTypeSymbol d)
        {
            content.Append("\nsignature: ");
            var invoke = d.OriginalDefinition.DelegateInvokeMethod;

            content.AddSymbol(invoke.ReturnType, false, SymbolFormatter.Empty)
            .Append(" ").AddSymbol(d, true, SymbolFormatter.Empty)
            .AddParameters(invoke.Parameters, SymbolFormatter.Empty);
        }
Example #4
0
        void ShowSymbolDeclaration(ISymbol symbol, TextBlock info)
        {
            if (symbol.IsAbstract)
            {
                info.Append("abstract ", Keyword);
            }
            else if (symbol.IsStatic)
            {
                info.Append("static ", Keyword);
            }
            else if (symbol.IsVirtual)
            {
                info.Append("virtual ", Keyword);
            }
            else if (symbol.IsOverride)
            {
                info.Append(symbol.IsSealed ? "sealed override " : "override ", Keyword);
                ISymbol o = null;
                switch (symbol.Kind)
                {
                case SymbolKind.Method: o = ((IMethodSymbol)symbol).OverriddenMethod; break;

                case SymbolKind.Property: o = ((IPropertySymbol)symbol).OverriddenProperty; break;

                case SymbolKind.Event: o = ((IEventSymbol)symbol).OverriddenEvent; break;
                }
                if (o != null)
                {
                    var t = o.ContainingType;
                    if (t != null && t.IsCommonClass() == false)
                    {
                        info.AddSymbol(t, null, this).Append(".").AddSymbol(o, null, this).Append(" ");
                    }
                }
            }
            else if (symbol.IsSealed && (symbol.Kind == SymbolKind.NamedType && ((INamedTypeSymbol)symbol).TypeKind == TypeKind.Class || symbol.Kind == SymbolKind.Method))
            {
                info.Append("sealed ", Keyword);
            }
            if (symbol.Kind == SymbolKind.Method)
            {
                var m = (symbol as IMethodSymbol).GetSpecialMethodModifier();
                if (m != null)
                {
                    info.Append(m, Keyword);
                }
            }
        }
Example #5
0
        internal TextBlock Format(TextBlock block, ImmutableArray <SymbolDisplayPart> parts, int argIndex)
        {
            const SymbolDisplayPartKind ExtensionName = (SymbolDisplayPartKind)29;

            foreach (var part in parts)
            {
                switch (part.Kind)
                {
                case SymbolDisplayPartKind.AliasName:
                    //todo resolve alias type
                    goto default;

                case SymbolDisplayPartKind.ClassName:
                    if (part.Symbol.Kind == SymbolKind.Method)
                    {
                        block.AddSymbol(part.Symbol, true, Method);
                    }
                    else if ((part.Symbol as INamedTypeSymbol).IsAnonymousType)
                    {
                        block.Append("?", Class);
                    }
                    else
                    {
                        block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Class);
                    }
                    break;

                case SymbolDisplayPartKind.EnumName:
                    block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Enum);
                    break;

                case SymbolDisplayPartKind.InterfaceName:
                    block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Interface);
                    break;

                case SymbolDisplayPartKind.MethodName:
                    block.AddSymbol(part.Symbol, argIndex != Int32.MinValue, Method);
                    break;

                case SymbolDisplayPartKind.ParameterName:
                    var p = part.Symbol as IParameterSymbol;
                    if (p.Ordinal == argIndex || p.IsParams && argIndex > p.Ordinal)
                    {
                        block.Append(p.Name, true, true, Parameter);
                    }
                    else
                    {
                        block.Append(p.Name, false, false, Parameter);
                    }
                    break;

                case SymbolDisplayPartKind.StructName:
                    if (part.Symbol.Kind == SymbolKind.Method)
                    {
                        block.AddSymbol(part.Symbol, true, Method);
                    }
                    else
                    {
                        block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Struct);
                    }
                    break;

                case SymbolDisplayPartKind.DelegateName:
                    block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Delegate);
                    break;

                case SymbolDisplayPartKind.StringLiteral:
                    block.Append(part.ToString(), false, false, Text);
                    break;

                case SymbolDisplayPartKind.Keyword:
                    block.Append(part.ToString(), false, false, Keyword);
                    break;

                case SymbolDisplayPartKind.NamespaceName:
                    block.Append(part.Symbol.Name, Namespace);
                    break;

                case SymbolDisplayPartKind.TypeParameterName:
                    block.Append(part.Symbol.Name, argIndex == Int32.MinValue, false, TypeParameter);
                    break;

                case SymbolDisplayPartKind.FieldName:
                    block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Field);
                    break;

                case SymbolDisplayPartKind.PropertyName:
                    block.Append(part.Symbol.Name, Property);
                    break;

                case SymbolDisplayPartKind.EventName:
                    block.Append(part.Symbol.Name, Delegate);
                    break;

                case ExtensionName:
                    block.AddSymbol(part.Symbol, true, Method);
                    break;

                default:
                    block.Append(part.ToString());
                    break;
                }
            }
            return(block);
        }