public static List <ReferenceSegment> Decompile(TextEditorData data, ModuleDefinition module, TypeDefinition currentType, Action <AstBuilder> setData, DecompilerSettings settings) { try { var context = new DecompilerContext(module); var source = new CancellationTokenSource(); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = settings; AstBuilder astBuilder = new AstBuilder(context); setData(astBuilder); astBuilder.RunTransformations(o => false); GeneratedCodeSettings.Default.Apply(astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter(data.Document); astBuilder.GenerateCode(output); output.SetDocumentData(); return(output.ReferencedSegments); } catch (Exception e) { data.Text = "Decompilation failed: \n" + e; } return(null); }
public static List <ReferenceSegment> Decompile(TextEditor data, AssemblyLoader assemblyLoader, Func <CSharpDecompiler, SyntaxTree> decompile, DecompilerSettings settings = null, DecompileFlags flags = null) { settings = settings ?? GetDecompilerSettings(data, publicOnly: flags.PublicOnly); var csharpDecompiler = assemblyLoader.CSharpDecompiler; try { var syntaxTree = decompile(csharpDecompiler); if (!flags.MethodBodies) { MethodBodyRemoveVisitor.RemoveMethodBodies(syntaxTree); } var output = new ColoredCSharpFormatter(data); TokenWriter tokenWriter = new TextTokenWriter(output, settings, csharpDecompiler.TypeSystem) { FoldBraces = settings.FoldBraces }; var formattingPolicy = settings.CSharpFormattingOptions; syntaxTree.AcceptVisitor(new CSharpOutputVisitor(tokenWriter, formattingPolicy)); output.SetDocumentData(); return(output.ReferencedSegments); } catch (Exception e) { data.InsertText(data.Length, "/* decompilation failed: \n" + e + " */"); } return(null); }
public static string Decompile(DomCecilMethod method, bool markup) { if (method.MethodDefinition.IsPInvokeImpl) { return(GettextCatalog.GetString("Method is P/Invoke")); } if (method.MethodDefinition.Body == null) { IType type = method.DeclaringType; return(type == null || type.ClassType == ClassType.Interface ? GettextCatalog.GetString("Interface method") : GettextCatalog.GetString("Abstract method")); } StringBuilder result = new StringBuilder(); try { //ControlFlowGraph controlFlowGraph = ControlFlowGraph.Create (method.MethodDefinition); ILanguage lang = CSharp.GetLanguage(CSharpVersion.V3); ColoredCSharpFormatter formatter = new ColoredCSharpFormatter(); ILanguageWriter langWriter = lang.GetWriter(formatter); langWriter.Write(method.MethodDefinition); result.Append(formatter.Text); } catch (Exception e) { result.Append("Decompilation failed: \n" + e); } return(result.ToString()); }
public static List <ReferenceSegment> Decompile(TextEditorData data, ModuleDefinition module, TypeDefinition currentType, Action <AstBuilder> setData, DecompilerSettings settings) { try { var types = DesktopService.GetMimeTypeInheritanceChain(data.Document.MimeType); var codePolicy = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy <MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy> (types); var context = new DecompilerContext(module); var source = new CancellationTokenSource(); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = settings; AstBuilder astBuilder = new AstBuilder(context); setData(astBuilder); astBuilder.RunTransformations(o => false); GeneratedCodeSettings.Default.Apply(astBuilder.CompilationUnit); var output = new ColoredCSharpFormatter(data.Document); CSharpFormattingOptions options = codePolicy.CreateOptions(); astBuilder.GenerateCode(output, options); output.SetDocumentData(); return(output.ReferencedSegments); } catch (Exception e) { data.Text = "Decompilation failed: \n" + e; } return(null); }
public static List <ReferenceSegment> Decompile(TextEditorData data, ModuleDefinition module, TypeDefinition currentType, Action <AstBuilder> setData, DecompilerSettings settings) { var context = new DecompilerContext(module); var source = new CancellationTokenSource(); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = settings; try { var astBuilder = new AstBuilder(context); setData(astBuilder); astBuilder.RunTransformations(o => false); GeneratedCodeSettings.Default.Apply(astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter(data.Document); astBuilder.GenerateCode(output); output.SetDocumentData(); return(output.ReferencedSegments); } catch (Exception e) { // exception -> try to decompile without method bodies try { var astBuilder = new AstBuilder(context); astBuilder.DecompileMethodBodies = false; setData(astBuilder); astBuilder.RunTransformations(o => false); GeneratedCodeSettings.Default.Apply(astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter(data.Document); astBuilder.GenerateCode(output); output.SetDocumentData(); data.Document.Insert(data.Document.TextLength, "/* body decompilation failed: \n" + e + " */"); } catch (Exception e2) { data.Text = "/* fallback decompilation failed: \n" + e2 + "*/"; } } return(null); }
public static List <ReferenceSegment> Disassemble(TextEditor data, Action <ReflectionDisassembler> setData) { var source = new CancellationTokenSource(); var output = new ColoredCSharpFormatter(data); var disassembler = new ReflectionDisassembler(output, source.Token); setData(disassembler); output.SetDocumentData(); return(output.ReferencedSegments); }
public static Task <List <ReferenceSegment> > DecompileAsync(TextEditor data, AssemblyLoader assemblyLoader, Func <CSharpDecompiler, SyntaxTree> decompile, DecompilerSettings settings = null, DecompileFlags flags = null) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (assemblyLoader == null) { throw new ArgumentNullException(nameof(assemblyLoader)); } return(Task.Run(async delegate { settings = settings ?? GetDecompilerSettings(data, publicOnly: flags.PublicOnly); var csharpDecompiler = assemblyLoader.CSharpDecompiler; try { var syntaxTree = decompile(csharpDecompiler); if (!flags.MethodBodies) { MethodBodyRemoveVisitor.RemoveMethodBodies(syntaxTree); } return await Runtime.RunInMainThread(delegate { if (data.IsDisposed) { return new List <ReferenceSegment> (); } var output = new ColoredCSharpFormatter(data); TokenWriter tokenWriter = new TextTokenWriter(output, settings, csharpDecompiler.TypeSystem) { FoldBraces = settings.FoldBraces }; var formattingPolicy = settings.CSharpFormattingOptions; syntaxTree.AcceptVisitor(new CSharpOutputVisitor(tokenWriter, formattingPolicy)); output.SetDocumentData(); return output.ReferencedSegments; }); } catch (Exception e) { await Runtime.RunInMainThread(delegate { data.InsertText(data.Length, "/* decompilation failed: \n" + e + " */"); }); } return new List <ReferenceSegment> (); })); }
public static List<ReferenceSegment> Disassemble (TextEditorData data, Action<ReflectionDisassembler> setData) { var source = new CancellationTokenSource (); var output = new ColoredCSharpFormatter (data.Document); var disassembler = new ReflectionDisassembler (output, true, source.Token); setData (disassembler); output.SetDocumentData (); return output.ReferencedSegments; }
public static List<ReferenceSegment> Decompile (TextEditorData data, ModuleDefinition module, TypeDefinition currentType, Action<AstBuilder> setData, DecompilerSettings settings) { try { var context = new DecompilerContext (module); var source = new CancellationTokenSource (); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = settings; AstBuilder astBuilder = new AstBuilder (context); setData (astBuilder); astBuilder.RunTransformations (o => false); GeneratedCodeSettings.Default.Apply (astBuilder.CompilationUnit); var output = new ColoredCSharpFormatter (data.Document); astBuilder.GenerateCode (output); output.SetDocumentData (); return output.ReferencedSegments; } catch (Exception e) { data.Text = "Decompilation failed: \n" + e; } return null; }
public static List<ReferenceSegment> Decompile (TextEditor data, ModuleDefinition module, TypeDefinition currentType, Action<AstBuilder> setData, DecompilerSettings settings) { var context = new DecompilerContext (module); var source = new CancellationTokenSource (); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = settings; try { var astBuilder = new AstBuilder (context); setData (astBuilder); astBuilder.RunTransformations (o => false); GeneratedCodeSettings.Default.Apply (astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter (data); astBuilder.GenerateCode (output); output.SetDocumentData (); return output.ReferencedSegments; } catch (Exception e) { // exception -> try to decompile without method bodies try { var astBuilder = new AstBuilder (context); astBuilder.DecompileMethodBodies = false; setData (astBuilder); astBuilder.RunTransformations (o => false); GeneratedCodeSettings.Default.Apply (astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter (data); astBuilder.GenerateCode (output); output.SetDocumentData (); data.InsertText (data.Length, "/* body decompilation failed: \n" + e + " */"); } catch (Exception e2) { data.Text = "/* fallback decompilation failed: \n" + e2 +"*/"; } } return null; }
public static List<ReferenceSegment> Decompile (TextEditorData data, ModuleDefinition module, TypeDefinition currentType, Action<AstBuilder> setData) { try { var types = DesktopService.GetMimeTypeInheritanceChain (data.Document.MimeType); var codePolicy = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy> (types); var context = new DecompilerContext (module); var source = new CancellationTokenSource (); context.CancellationToken = source.Token; context.CurrentType = currentType; context.Settings = new DecompilerSettings () { AnonymousMethods = true, AutomaticEvents = true, AutomaticProperties = true, ForEachStatement = true, LockStatement = true }; AstBuilder astBuilder = new AstBuilder (context); setData (astBuilder); astBuilder.RunTransformations (o => false); var output = new ColoredCSharpFormatter (data.Document); astBuilder.GenerateCode (output, codePolicy.CreateOptions ()); output.SetDocumentData (); return output.ReferencedSegments; } catch (Exception e) { data.Text = "Decompilation failed: \n" + e; } return null; }
public static string Decompile (DomCecilMethod method, bool markup) { if (method.MethodDefinition.IsPInvokeImpl) return GettextCatalog.GetString ("Method is P/Invoke"); if (method.MethodDefinition.Body == null) { IType type = method.DeclaringType; return type == null || type.ClassType == ClassType.Interface ? GettextCatalog.GetString ("Interface method") : GettextCatalog.GetString ("Abstract method"); } StringBuilder result = new StringBuilder (); try { //ControlFlowGraph controlFlowGraph = ControlFlowGraph.Create (method.MethodDefinition); ILanguage lang = CSharp.GetLanguage (CSharpVersion.V3); ColoredCSharpFormatter formatter = new ColoredCSharpFormatter (); ILanguageWriter langWriter = lang.GetWriter (formatter); langWriter.Write (method.MethodDefinition); result.Append (formatter.Text); } catch (Exception e) { result.Append ("Decompilation failed: \n" + e); } return result.ToString (); }