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); } }
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); }
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); }
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); } } }
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); }