private bool IsSupportedExpressionArgumentCheck(MethodDefinition method, Instruction instruction)
{
var methodBeingCalled = instruction.Operand as MethodReference;
if (methodBeingCalled == null)
{
return false;
}
if (!methodBeingCalled.DeclaringType.FullName.Contains("Catel.Argument"))
{
return false;
}
var parameters = methodBeingCalled.Parameters;
if (parameters.Count == 0)
{
return false;
}
var firstParameter = parameters[0];
if (firstParameter == null)
{
return false;
}
if (!firstParameter.ParameterType.FullName.Contains("System.Linq.Expressions."))
{
return false;
}
var finalKey = methodBeingCalled.GetFullName();
if (!ExpressionChecksToAttributeMappings.ContainsKey(finalKey))
{
FodyEnvironment.LogWarningPoint($"Expression argument method transformation in '{method.GetFullName()}' to '{methodBeingCalled.GetFullName()}' is not (yet) supported. To ensure the best performance, either rewrite this into a non-expression argument check or create a PR for Catel.Fody to enable support :-)", method.Body.Instructions.GetSequencePoint(instruction));
return false;
}
return true;
}