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