private static void GenerateSerializeMethod() { var serializeMethod = _context.BaseBarfSerializer.ResolveMethod("Serialize", _context.Type, typeof(BarfSerializationArgs)); var serializeMethodReference = _context.Import(serializeMethod); var method = CreateMethodOverride(serializeMethodReference, _context.Import(typeof(void)), false, false, false); method.Parameters.Add(new ParameterDefinition(_context.Import(_context.Type)) { Name = "instance" }); method.Parameters.Add(new ParameterDefinition(_context.Import(typeof(BarfSerializationArgs))) { Name = "args" }); _context.BarfSerializer.Methods.Add(method); var methodHeader = new MethodHeader { Attributes = CallingConventions.HasThis, DeclaringType = _context.BaseBarfSerializer, ParameterTypes = new[] { _context.Type, typeof(BarfSerializationArgs) }, ReturnType = typeof(void) }; using (var writer = new CecilCilWriter(methodHeader, method.Body)) { // type is not available yet so we're using void since that type is not referenced anyway. _context.SerializerBuilder.GenerateSerializeMethod(writer); } }
private static void GenerateFillMethod() { var fillMethod = typeof(IBarfTester <>) .ResolveGenericType(_context.Type) .ResolveMethod("Fill"); var fillMethodReference = _context.Module.Import(fillMethod); var method = CreateMethodOverride(fillMethodReference, _context.Import(typeof(void)), false, false, true); method.Parameters.Add(new ParameterDefinition(_context.Import(_context.Type.ResolveByRef())) { Name = "instance" }); method.Parameters.Add(new ParameterDefinition(_context.Import(typeof(FillArgs))) { Name = "args" }); _context.BarfTester.Methods.Add(method); var methodHeader = new MethodHeader { Attributes = CallingConventions.HasThis, DeclaringType = typeof(void), // a place holder ParameterTypes = new[] { _context.Type.ResolveByRef(), typeof(FillArgs) }, ReturnType = typeof(void) }; using (var writer = new CecilCilWriter(methodHeader, method.Body)) { _context.TesterBuilder.GenerateFill(writer); } }
private static void GenerateCreateEmptyMethod() { var createEmptyMethod = _context.BaseBarfSerializer.ResolveMethod("CreateEmpty", Type.EmptyTypes); var createEmtpyMethodReference = _context.Import(createEmptyMethod); var method = CreateMethodOverride(createEmtpyMethodReference, _context.Import(_context.Type), false, false, false); _context.BarfSerializer.Methods.Add(method); var methodHeader = new MethodHeader { Attributes = CallingConventions.HasThis, DeclaringType = _context.BaseBarfSerializer, ParameterTypes = Type.EmptyTypes, ReturnType = _context.Type }; using (var writer = new CecilCilWriter(methodHeader, method.Body)) { // type is not available yet so we're using void since that type is not referenced anyway. _context.SerializerBuilder.GenerateCreateEmptyMethod(writer); } }