public virtual void PrintParameterDefinitionModifiers(IParameterDefinition parameterDefinition)
{
Contract.Requires(parameterDefinition != null);
if (parameterDefinition.Index == 0)
{
var meth = parameterDefinition.ContainingSignature as IMethodDefinition;
if (meth != null)
{
if (Utils.FindAttribute(meth.Attributes, SpecialAttribute.Extension) != null)
{
PrintToken(CSharpToken.This);
PrintToken(CSharpToken.Space);
}
}
}
foreach (var attribute in SortAttributes(parameterDefinition.Attributes))
{
if (Utils.GetAttributeType(attribute) == SpecialAttribute.ParamArray)
{
sourceEmitterOutput.Write("params");
}
else
{
this.PrintAttribute(parameterDefinition, attribute, false, null);
}
PrintToken(CSharpToken.Space);
}
if (parameterDefinition.IsOut && !parameterDefinition.IsIn && parameterDefinition.IsByReference)
{
// C# out keyword means [Out] ref (with no [In] allowed)
PrintKeywordOut();
}
else
{
if (parameterDefinition.IsIn)
{
PrintPseudoCustomAttribute(parameterDefinition, "System.Runtime.InteropServices.In", null, false, null);
}
if (parameterDefinition.IsOut)
{
PrintPseudoCustomAttribute(parameterDefinition, "System.Runtime.InteropServices.Out", null, false, null);
}
if (parameterDefinition.IsByReference)
{
PrintKeywordRef();
}
}
}