diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2014-09-23 11:33:59 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2014-09-23 11:33:59 +0400 |
commit | a199791619e11821335f041df4edbd6b85b7c2d2 (patch) | |
tree | b27b02c21fc856ec905d59e379df20715b51e452 /main/src/addins/MonoDevelop.AssemblyBrowser | |
parent | 4b23db17b74c0fab8759f9c3117e5edd906a18fe (diff) |
Fixed 'Bug 22752 - Assembly Browser Crashes'
Diffstat (limited to 'main/src/addins/MonoDevelop.AssemblyBrowser')
-rw-r--r-- | main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/TreeNodes/DomMethodNodeBuilder.cs | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/TreeNodes/DomMethodNodeBuilder.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/TreeNodes/DomMethodNodeBuilder.cs index fd4b4afdd8..8dcafdd61a 100644 --- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/TreeNodes/DomMethodNodeBuilder.cs +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/TreeNodes/DomMethodNodeBuilder.cs @@ -130,20 +130,14 @@ namespace MonoDevelop.AssemblyBrowser 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 context = new DecompilerContext (module); - var source = new CancellationTokenSource (); - - context.CancellationToken = source.Token; - context.CurrentType = currentType; - - context.Settings = settings; - - AstBuilder astBuilder = new AstBuilder (context); - + var astBuilder = new AstBuilder (context); setData (astBuilder); - astBuilder.RunTransformations (o => false); GeneratedCodeSettings.Default.Apply (astBuilder.SyntaxTree); var output = new ColoredCSharpFormatter (data.Document); @@ -151,7 +145,20 @@ namespace MonoDevelop.AssemblyBrowser output.SetDocumentData (); return output.ReferencedSegments; } catch (Exception e) { - data.Text = "Decompilation failed: \n" + 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; } |