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(); }