From d23e4d934c9b020adcbde411a64bbef7549f3020 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Tue, 19 Feb 2019 19:16:55 +0200 Subject: Write stacktrace to editor when decompilation throws an exception --- src/main/java/cuchaz/enigma/gui/GuiController.java | 35 ++++++++++++++-------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'src/main/java/cuchaz/enigma/gui/GuiController.java') diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index 357d812..a8ff0d0 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -35,6 +35,8 @@ import javax.annotation.Nullable; import java.awt.event.ItemEvent; import java.io.File; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.nio.file.Path; import java.util.Collection; import java.util.Deque; @@ -320,7 +322,7 @@ public class GuiController { DECOMPILER_SERVICE.submit(() -> { try { if (requiresDecompile) { - decompileSource(targetClass, deobfuscator.getObfSourceProvider()); + currentSource = decompileSource(targetClass, deobfuscator.getObfSourceProvider()); } remapSource(deobfuscator.getMapper().getDeobfuscator()); @@ -332,21 +334,28 @@ public class GuiController { }); } - private void decompileSource(ClassEntry targetClass, SourceProvider sourceProvider) { - CompilationUnit sourceTree = sourceProvider.getSources(targetClass.getFullName()); - if (sourceTree == null) { - gui.setEditorText("Unable to find class: " + targetClass); - return; - } + private DecompiledClassSource decompileSource(ClassEntry targetClass, SourceProvider sourceProvider) { + try { + CompilationUnit sourceTree = sourceProvider.getSources(targetClass.getFullName()); + if (sourceTree == null) { + gui.setEditorText("Unable to find class: " + targetClass); + return DecompiledClassSource.text(targetClass, "Unable to find class"); + } - DropImportAstTransform.INSTANCE.run(sourceTree); + DropImportAstTransform.INSTANCE.run(sourceTree); - String sourceString = sourceProvider.writeSourceToString(sourceTree); + String sourceString = sourceProvider.writeSourceToString(sourceTree); - SourceIndex index = SourceIndex.buildIndex(sourceString, sourceTree, true); - index.resolveReferences(deobfuscator.getMapper().getObfResolver()); + SourceIndex index = SourceIndex.buildIndex(sourceString, sourceTree, true); + index.resolveReferences(deobfuscator.getMapper().getObfResolver()); - currentSource = new DecompiledClassSource(targetClass, deobfuscator, index); + return new DecompiledClassSource(targetClass, index); + } catch (Exception e) { + StringWriter traceWriter = new StringWriter(); + e.printStackTrace(new PrintWriter(traceWriter)); + + return DecompiledClassSource.text(targetClass, traceWriter.toString()); + } } private void remapSource(Translator translator) { @@ -354,7 +363,7 @@ public class GuiController { return; } - currentSource.remapSource(translator); + currentSource.remapSource(deobfuscator, translator); gui.setEditorTheme(Config.getInstance().lookAndFeel); gui.setSource(currentSource); -- cgit v1.2.3