public string Generate(ISymbol symbol)
{
if (symbol == null)
throw new ArgumentNullException("symbol");
StringWriter writer = new StringWriter();
_writer = new TextWriterTokenWriter(writer);
_policy = FormattingOptionsFactory.CreateMono();
TypeSystemAstBuilder astBuilder = CreateAstBuilder();
astBuilder.AlwaysUseShortTypeNames = true;
AstNode node = astBuilder.ConvertSymbol(symbol);
if (symbol is ITypeDefinition)
{
WriteTypeDeclarationName((ITypeDefinition)symbol, _writer, _policy);
}
else if (symbol is IMember)
{
WriteMemberDeclarationName((IMember)symbol, _writer, _policy);
}
else
{
_writer.WriteIdentifier(Identifier.Create(symbol.Name));
}
if (HasParameters(symbol))
{
_writer.WriteToken(symbol.SymbolKind == SymbolKind.Indexer ? Roles.LBracket : Roles.LPar, symbol.SymbolKind == SymbolKind.Indexer ? "[" : "(");
IEnumerable<ParameterDeclaration> parameters = new List<ParameterDeclaration>(node.GetChildrenByRole(Roles.Parameter));
if (symbol is IMethod && ((IMethod)symbol).IsExtensionMethod)
{
parameters = parameters.Skip(1);
}
WriteCommaSeparatedList(parameters);
_writer.WriteToken(symbol.SymbolKind == SymbolKind.Indexer ? Roles.RBracket : Roles.RPar, symbol.SymbolKind == SymbolKind.Indexer ? "]" : ")");
}
if (_includePlaceholders)
{
_writer.WriteToken(Roles.Text, "$0");
}
return writer.ToString();
}