public override void ProcessOperand(ITypeService service, MethodDef method, IList <Instruction> body, ref int index, MethodDef operand) { var currentMethod = service.GetScannedItem(method); var targetMethod = service.GetScannedItem(operand); /* //Type field scrabmble * var targetType = service.GetScannedItem(operand.DeclaringType); * if (targetType != null) { * var typeSigList = targetType.GenericCallTypes.Select(x => currentMethod?.ToGenericIfAvalible(x) ?? x).ToArray(); * new TypeSpecUser(new GenericInstSig(new ClassSig(operand.DeclaringType), typeSigList)); * } */ if (body[index].OpCode == OpCodes.Newobj) { FactoryHealper.ApplyObjectCreationProxy(service, currentMethod, body, ref index, operand); } else { FactoryHealper.ApplyCallProxy(service, currentMethod, body, ref index, operand); } if (targetMethod != null) { var typeSigList = targetMethod.GenericCallTypes.Select(x => currentMethod?.ToGenericIfAvalible(x) ?? x).ToArray(); body[index].Operand = new MethodSpecUser(operand, new GenericInstMethodSig(typeSigList)); } }
public override void ProcessOperand(ITypeService service, MethodDef method, IList <Instruction> body, ref int index, MemberRef operand) { if (operand.MethodSig == null) { return; } var currentMethod = service.GetScannedItem(method); if (body[index].OpCode == OpCodes.Newobj) { FactoryHealper.ApplyObjectCreationProxy(service, currentMethod, body, ref index, operand); } else { FactoryHealper.ApplyCallProxy(service, currentMethod, body, ref index, operand); } }