private void EnsureExpressionChecksCache()
{
lock (CacheLock)
{
if (ExpressionChecksToAttributeMappings.Count > 0)
{
return;
}
ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNull"] = (m, ix, i) =>
{
return CreateCustomAttribute("Catel.Fody.NotNullAttribute");
};
ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNullOrEmpty"] = (m, ix, i) =>
{
return CreateCustomAttribute("Catel.Fody.NotNullOrEmptyAttribute");
};
ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNullOrWhitespace"] = (m, ix, i) =>
{
return CreateCustomAttribute("Catel.Fody.NotNullOrWhitespaceAttribute");
};
// TODO: Add more
ExpressionChecksToAttributeMappings["Catel.Argument.IsNotOutOfRange"] = (m, ix, i) =>
{
// Previous operations are Ldc_[Something]
var previousInstruction2 = ix.GetPreviousInstruction(i);
var previousInstruction1 = ix.GetPreviousInstruction(previousInstruction2);
if (!IsOperandSupportedForArgumentChecks(previousInstruction1.Operand))
{
return null;
}
return CreateCustomAttribute("Catel.Fody.NotOutOfRangeAttribute", previousInstruction1.Operand, previousInstruction2.Operand);
};
ExpressionChecksToAttributeMappings["Catel.Argument.IsMinimal"] = (m, ix, i) =>
{
// Previous operation is Ldc_[Something]
var operand = ix.GetPreviousInstruction(i).Operand;
if (!IsOperandSupportedForArgumentChecks(operand))
{
return null;
}
return CreateCustomAttribute("Catel.Fody.MinimalAttribute", operand);
};
ExpressionChecksToAttributeMappings["Catel.Argument.IsMaximum"] = (m, ix, i) =>
{
// Previous operation is Ldc_[Something]
var operand = ix.GetPreviousInstruction(i).Operand;
if (!IsOperandSupportedForArgumentChecks(operand))
{
return null;
}
return CreateCustomAttribute("Catel.Fody.MaximumAttribute", operand);
};
}
}