TxRef update

If you opened up your CD from Krzysztof Cwalina and Brad Abram's new book Framework Design Guidelines. You will notice a nifty tool named TxRef. Unfortunately, the tool was written against "Whibey Beta", and some code needs to be updated for "Whidbey RTM".

Here is the updated code:

void WriteTypeConstraints(Type type)
{
foreach (Type t in type.GetGenericArguments())
{
bool writeComma = false;
Type[] arr = t.GetGenericParameterConstraints();
GenericParameterAttributes ga = t.GenericParameterAttributes & GenericParameterAttributes.SpecialConstraintMask;

if ((arr.Length > 0) || (ga != GenericParameterAttributes.None))
{
Write(" where ");
WriteTypeName(t);
Write(":");
}
for (int i = 0; i < arr.Length; i++)
{
WriteTypeName(arr[i]);
if (i < arr.Length - 1) Write(",");
}

            if (arr.Length > 0) writeComma = true;
if ((ga & GenericParameterAttributes.ReferenceTypeConstraint) != 0)
{
if (writeComma) Write(", ");
Write("class");
writeComma = true;
}

            if ((ga & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0)
{
if (writeComma) Write(", ");
Write("struct");
writeComma = true;
}
else if ((ga & GenericParameterAttributes.DefaultConstructorConstraint) != 0)
{
if (writeComma) Write(", ");
Write("new()");
}
}
}

Brad also talked about this particular breaking change in his blog here. I want to personally thank Andy for finding and reporting this error.