private void WriteMethodArguments(StringBuilder formatBuilder, int[] argumentsIndex, int startParameter, bool includeParameterName, bool includeParameterType, bool includeParameterValue, bool includeOutParams) { IMethodSignature methodSignature = this.context.MethodMapping.MethodSignature; int parameterCount = methodSignature.ParameterCount; for (int i = 0; i < parameterCount; i++) { int index = i + startParameter; if (index > 0) { formatBuilder.Append(", "); } bool isOut = this.targetMethod.Parameters[i].Attributes.HasFlag(ParameterAttributes.Out); bool isRef = this.targetMethod.Parameters[i].ParameterType is PointerTypeSignature; ITypeSignature parameterType = methodSignature.GetParameterType(i); if (includeParameterType) { string typeName = parameterType.GetReflectionName(ReflectionNameOptions.MethodParameterContext, NameShortener.Instance); if (isRef) { typeName = string.Format("{0} {1}", (isOut ? "out" : "ref"), typeName.Remove(typeName.Length - 6)); //Remove 'ByRef' suffix } formatBuilder.Append(typeName); } if (includeParameterName) { formatBuilder.AppendFormat(" {0}", this.context.MethodMapping.MethodMappingInformation.GetParameterName(i)); } if ((includeOutParams || !isOut) && includeParameterValue) { if (includeParameterName || includeParameterType) { formatBuilder.AppendFormat(" = "); } AppendFormatPlaceholder(index, formatBuilder, parameterType); argumentsIndex[index] = i; } } }