private int AddGetValueCall(PropertyDefinition property, FieldReference fieldReference)
{
FodyEnvironment.LogDebug($"\t\t\t{property.Name} - adding GetValue call");
var genericGetValue = new GenericInstanceMethod(_catelType.GetValueInvoker);
foreach (var genericParameter in _catelType.GetValueInvoker.GenericParameters)
{
genericGetValue.GenericParameters.Add(genericParameter);
}
genericGetValue.GenericArguments.Add(property.PropertyType.Import());
if (property.GetMethod == null)
{
var getMethod = new MethodDefinition($"get_{property.Name}", MethodAttributes.Public, property.PropertyType.Import());
property.DeclaringType.Methods.Add(getMethod);
getMethod.MarkAsCompilerGenerated(_msCoreReferenceFinder);
property.GetMethod = getMethod;
}
var body = property.GetMethod.Body;
body.SimplifyMacros();
var instructions = body.Instructions;
instructions.Clear();
var finalIndex = instructions.Insert(0,
Instruction.Create(OpCodes.Nop),
Instruction.Create(OpCodes.Ldarg_0),
Instruction.Create(OpCodes.Ldsfld, fieldReference),
Instruction.Create(OpCodes.Call, genericGetValue),
Instruction.Create(OpCodes.Ret));
body.OptimizeMacros();
return finalIndex;
}