public override void VisitMethodDeclaration(MethodDeclarationSyntax node)
{
bool parentIsInterface = node.Parent is InterfaceDeclarationSyntax;
var s = model.GetDeclaredSymbol(node);
var builder = tcb.GetBuilderFor(s.DeclaredAccessibility);
builder.AppendIndent();
// check if function has template arguments
if (s.IsGenericMethod)
{
builder.Append("template <");
int len = s.TypeArguments.Length;
for (int i = 0; i < len; ++i)
{
builder.Append("typename ");
builder.Append(s.TypeArguments[i].Name);
if (i + 1 != len)
builder.Append(", ");
}
builder.Append("> ");
}
builder.Append("virtual ", parentIsInterface || s.IsVirtual);
builder.Append("static ", s.IsStatic);
builder.Append(node.ReturnType.ToString());
builder.Append(" ");
builder.Append(node.Identifier.ToString());
builder.Append("(");
var pars = node.ParameterList.Parameters;
for (int i = 0; i < pars.Count; ++i)
{
var p = pars[i];
var symbol = model.GetDeclaredSymbol(p);
builder.Append(ArgumentTypeFor(symbol.Type)).Append(" ").Append(p.Identifier.ToString());
if (i + 1 < pars.Count)
builder.Append(", ");
}
builder.Append(")");
builder.Append(" = 0", parentIsInterface);
builder.AppendLine(";");
}