void CloneLambdaMethodAndItsLocalMethods()
        {
            var displayClassExecuteMethodAndItsLocalMethods = CecilHelpers.FindUsedInstanceMethodsOnSameType(LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs).Prepend(LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs).ToList();

            if (LambdaJobDescriptionConstruction.ExecutionMode != ExecutionMode.Run)
            {
                VerifyClosureFunctionDoesNotWriteToCapturedVariable(displayClassExecuteMethodAndItsLocalMethods);
            }

            (ClonedMethods, ClonedFields) = CecilHelpers.CloneClosureExecuteMethodAndItsLocalFunctions(displayClassExecuteMethodAndItsLocalMethods, TypeDefinition, "OriginalLambdaBody");

            if (LambdaJobDescriptionConstruction.DelegateProducingSequence.CapturesLocals)
            {
                ReadFromDisplayClassMethod = AddMethodToTransferFieldsWithDisplayClass("ReadFromDisplayClass", TransferDirection.DisplayClassToJob);
                if (LambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run)
                {
                    WriteToDisplayClassMethod = AddMethodToTransferFieldsWithDisplayClass("WriteToDisplayClass", TransferDirection.JobToDisplayClass);
                }
            }

            //todo: ressurect
            //ApplyPostProcessingOnJobCode(clonedMethods, providerInformations);

            VerifyDisplayClassFieldsAreValid();
        }