Example #1
0
        internal override void AddInterfaceImplementations(
            TypeBuilder classBuilder,
            IEnumerable <InterfaceDescription> interfaceDescriptions)
        {
            // ensure that method data types are built for each of the remote interfaces
            var methodBodyTypesResultsMap = interfaceDescriptions.ToDictionary(
                d => d,
                d => this.CodeBuilder.GetOrBuildMethodBodyTypes(d.InterfaceType));


            foreach (var item in methodBodyTypesResultsMap)
            {
                var interfaceDescription = item.Key;
                var methodBodyTypesMap   = item.Value.MethodBodyTypesMap;

                foreach (var methodDescription in interfaceDescription.Methods)
                {
                    var methodBodyTypes = methodBodyTypesMap[methodDescription.Name];


                    if (TypeUtility.IsVoidType(methodDescription.ReturnType))
                    {
                        var interfaceMethod = methodDescription.MethodInfo;

                        var methodBuilder = CodeBuilderUtils.CreateExplitInterfaceMethodBuilder(
                            classBuilder,
                            interfaceMethod);

                        var ilGen = methodBuilder.GetILGenerator();

                        base.AddVoidMethodImplementation2(ilGen, interfaceDescription.Id, methodDescription,
                                                          interfaceDescription.InterfaceType.FullName);
#if !DotNetCoreClr
                        this.AddVoidMethodImplementationV1(ilGen,
                                                           interfaceDescription.V1Id,
                                                           methodDescription,
                                                           methodBodyTypes);
#endif
                        ilGen.Emit(OpCodes.Ret);
                    }
                }
            }
        }