protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState) { var state = (AddMembersDecompileCodeState)decompileCodeState; state.CancellationToken.ThrowIfCancellationRequested(); DecompileTypeMethods options; options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, nonNestedType); options.Types.Add(nonNestedType); options.Types.AddRange(nonNestedType.GetTypes()); options.DecompileHidden = false; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, nonNestedType); options.Types.Add(nonNestedType); options.Types.AddRange(nonNestedType.GetTypes()); options.DecompileHidden = true; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); var result = new DecompileAsyncResult(); result.AddDocument(MainCodeName, state.MainOutput.ToString(), state.MainOutput.Span); result.AddDocument(MainGeneratedCodeName, state.HiddenOutput.ToString(), null); return(Task.FromResult(result)); }
internal static DecompiledBodyKind GetDecompiledBodyKind(DecompileTypeMethods info, AstBuilder builder, MethodDef method) { if (info.DecompileHidden) { return(DecompiledBodyKind.Empty); } if (info.Methods.Contains(method)) { return(DecompiledBodyKind.Full); } return(DecompiledBodyKind.Empty); }
void DecompileTypeMethods(DecompileTypeMethods info) { var state = CreateAstBuilder(info.Context, CSharpDecompiler.CreateDecompilerSettings_DecompileTypeMethods(langSettings.Settings, !info.DecompileHidden), currentType: info.Type); try { state.AstBuilder.GetDecompiledBodyKind = (builder, method) => CSharpDecompiler.GetDecompiledBodyKind(info, builder, method); state.AstBuilder.AddType(info.Type); RunTransformsAndGenerateCode(ref state, info.Output, info.Context, new DecompileTypeMethodsTransform(info.Methods, !info.DecompileHidden, info.MakeEverythingPublic)); } finally { state.Dispose(); } }
protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState) { var state = (EditClassDecompileCodeState)decompileCodeState; state.CancellationToken.ThrowIfCancellationRequested(); state.DecompilationContext.CalculateILSpans = true; var options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, nonNestedTypeToEdit); options.DecompileHidden = false; options.ShowAll = true; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); var result = new DecompileAsyncResult(); result.AddDocument(MainCodeName, state.MainOutput.ToString(), state.MainOutput.Span); return(Task.FromResult(result)); }
Task DecompileAsync(MethodDef method, MethodSourceStatement?methodSourceStatement) { Debug.Assert(decompileCodeState == null); if (decompileCodeState != null) { throw new InvalidOperationException(); } var state = new DecompileCodeState(method, methodSourceStatement); decompileCodeState = state; return(Task.Run(() => { state.CancellationToken.ThrowIfCancellationRequested(); var type = method.DeclaringType; while (type.DeclaringType != null) { type = type.DeclaringType; } DecompileTypeMethods options; state.DecompilationContext.CalculateBinSpans = true; options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, type); options.Methods.Add(method); options.DecompileHidden = false; options.MakeEverythingPublic = makeEverythingPublic; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); state.DecompilationContext.CalculateBinSpans = false; options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, type); options.Methods.Add(method); options.DecompileHidden = true; options.MakeEverythingPublic = makeEverythingPublic; decompiler.Decompile(DecompilationType.TypeMethods, options); }, state.CancellationToken)); }
protected override Task <DecompileAsyncResult> DecompileAsync(DecompileCodeState decompileCodeState) { var state = (EditMethodDecompileCodeState)decompileCodeState; state.CancellationToken.ThrowIfCancellationRequested(); var type = methodToEdit.DeclaringType; while (type.DeclaringType != null) { type = type.DeclaringType; } DecompileTypeMethods options; state.DecompilationContext.CalculateBinSpans = true; options = new DecompileTypeMethods(state.MainOutput, state.DecompilationContext, type); options.Methods.Add(methodToEdit); options.DecompileHidden = false; options.MakeEverythingPublic = makeEverythingPublic; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); state.DecompilationContext.CalculateBinSpans = false; options = new DecompileTypeMethods(state.HiddenOutput, state.DecompilationContext, type); options.Methods.Add(methodToEdit); options.DecompileHidden = true; options.MakeEverythingPublic = makeEverythingPublic; decompiler.Decompile(DecompilationType.TypeMethods, options); state.CancellationToken.ThrowIfCancellationRequested(); var result = new DecompileAsyncResult(); result.AddDocument(MAIN_CODE_NAME, state.MainOutput.ToString(), state.MainOutput.Span); result.AddDocument(MAIN_G_CODE_NAME, state.HiddenOutput.ToString(), null); return(Task.FromResult(result)); }