public static string PrintIndexer(IMethodDefinition method, bool isGetter) {
Contract.Requires(method != null);
var sourceEmitterOutput = new SourceEmitterOutputString();
var csSourceEmitter = new SourceEmitter(sourceEmitterOutput);
var indexerSignatureBuilder = new StringBuilder();
csSourceEmitter.Traverse(method.Type);
indexerSignatureBuilder.Append(sourceEmitterOutput.Data);
sourceEmitterOutput.ClearData();
indexerSignatureBuilder.Append(" ");
// Indexers are always identified with a 'this' keyword, but might have an interface prefix
string id = method.Name.Value;
int lastDot = id.LastIndexOf('.');
if (lastDot != -1)
indexerSignatureBuilder.Append(id.Substring(0, lastDot + 1));
indexerSignatureBuilder.Append("this");
indexerSignatureBuilder.Append("[");
bool fFirstParameter = true;
var parms = method.Parameters;
if (!isGetter)
{
// Use the setter's names except for the final 'value' parameter
var l = new List<IParameterDefinition>(method.Parameters);
if (l.Count > 0)
{
l.RemoveAt(l.Count - 1);
}
parms = l;
}
foreach (IParameterDefinition parameterDefinition in parms) {
if (!fFirstParameter)
indexerSignatureBuilder.Append(", ");
Contract.Assume(parameterDefinition != null);
csSourceEmitter.Traverse(parameterDefinition);
indexerSignatureBuilder.Append(sourceEmitterOutput.Data);
sourceEmitterOutput.ClearData();
fFirstParameter = false;
}
indexerSignatureBuilder.Append("]");
return indexerSignatureBuilder.ToString();
}