Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2014-09-23 11:33:59 +0400
committerMike Krüger <mkrueger@xamarin.com>2014-09-23 11:33:59 +0400
commita199791619e11821335f041df4edbd6b85b7c2d2 (patch)
treeb27b02c21fc856ec905d59e379df20715b51e452 /main/src/addins/MonoDevelop.AssemblyBrowser
parent4b23db17b74c0fab8759f9c3117e5edd906a18fe (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.cs33
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;
}