diff options
5 files changed, 29 insertions, 5 deletions
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java index a45ecc93..bf1d5fb2 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java | |||
| @@ -57,7 +57,7 @@ public class PanelEditor { | |||
| 57 | private final JProgressBar decompilingProgressBar = new JProgressBar(0, 100); | 57 | private final JProgressBar decompilingProgressBar = new JProgressBar(0, 100); |
| 58 | 58 | ||
| 59 | // error display UI | 59 | // error display UI |
| 60 | private final JLabel errorLabel = new JLabel(I18n.translate("editor.decompile_error")); | 60 | private final JLabel errorLabel = new JLabel(); |
| 61 | private final JTextArea errorTextArea = new JTextArea(); | 61 | private final JTextArea errorTextArea = new JTextArea(); |
| 62 | private final JScrollPane errorScrollPane = new JScrollPane(this.errorTextArea); | 62 | private final JScrollPane errorScrollPane = new JScrollPane(this.errorTextArea); |
| 63 | private final JButton retryButton = new JButton(I18n.translate("general.retry")); | 63 | private final JButton retryButton = new JButton(I18n.translate("general.retry")); |
| @@ -336,6 +336,18 @@ public class PanelEditor { | |||
| 336 | 336 | ||
| 337 | public void displayError(ClassHandleError t) { | 337 | public void displayError(ClassHandleError t) { |
| 338 | this.setDisplayMode(DisplayMode.ERRORED); | 338 | this.setDisplayMode(DisplayMode.ERRORED); |
| 339 | String str; | ||
| 340 | switch(t.type) { | ||
| 341 | case DECOMPILE: | ||
| 342 | str = "editor.decompile_error"; | ||
| 343 | break; | ||
| 344 | case REMAP: | ||
| 345 | str = "editor.remap_error"; | ||
| 346 | break; | ||
| 347 | default: | ||
| 348 | throw new IllegalStateException("unreachable"); | ||
| 349 | } | ||
| 350 | this.errorLabel.setText(I18n.translate(str)); | ||
| 339 | this.errorTextArea.setText(t.getStackTrace()); | 351 | this.errorTextArea.setText(t.getStackTrace()); |
| 340 | this.errorTextArea.setCaretPosition(0); | 352 | this.errorTextArea.setCaretPosition(0); |
| 341 | } | 353 | } |
diff --git a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java index a11b9dce..20f847ae 100644 --- a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java +++ b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java | |||
| @@ -28,8 +28,13 @@ public final class ClassHandleError { | |||
| 28 | return new ClassHandleError(Type.DECOMPILE, cause); | 28 | return new ClassHandleError(Type.DECOMPILE, cause); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | public static ClassHandleError remap(Throwable cause) { | ||
| 32 | return new ClassHandleError(Type.REMAP, cause); | ||
| 33 | } | ||
| 34 | |||
| 31 | public enum Type { | 35 | public enum Type { |
| 32 | DECOMPILE, | 36 | DECOMPILE, |
| 37 | REMAP, | ||
| 33 | } | 38 | } |
| 34 | 39 | ||
| 35 | } \ No newline at end of file | 40 | } \ No newline at end of file |
diff --git a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java index 2d9b52d9..f9e4eff8 100644 --- a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java +++ b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java | |||
| @@ -11,6 +11,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; | |||
| 11 | 11 | ||
| 12 | import javax.annotation.Nullable; | 12 | import javax.annotation.Nullable; |
| 13 | 13 | ||
| 14 | import org.objectweb.asm.tree.ClassNode; | ||
| 15 | |||
| 14 | import cuchaz.enigma.Enigma; | 16 | import cuchaz.enigma.Enigma; |
| 15 | import cuchaz.enigma.EnigmaProject; | 17 | import cuchaz.enigma.EnigmaProject; |
| 16 | import cuchaz.enigma.bytecode.translators.SourceFixVisitor; | 18 | import cuchaz.enigma.bytecode.translators.SourceFixVisitor; |
| @@ -19,7 +21,6 @@ import cuchaz.enigma.events.ClassHandleListener.InvalidationType; | |||
| 19 | import cuchaz.enigma.source.*; | 21 | import cuchaz.enigma.source.*; |
| 20 | import cuchaz.enigma.translation.representation.entry.ClassEntry; | 22 | import cuchaz.enigma.translation.representation.entry.ClassEntry; |
| 21 | import cuchaz.enigma.utils.Result; | 23 | import cuchaz.enigma.utils.Result; |
| 22 | import org.objectweb.asm.tree.ClassNode; | ||
| 23 | 24 | ||
| 24 | import static cuchaz.enigma.utils.Utils.withLock; | 25 | import static cuchaz.enigma.utils.Utils.withLock; |
| 25 | 26 | ||
| @@ -285,9 +286,13 @@ public final class ClassHandleProvider { | |||
| 285 | int v = mappedVersion.incrementAndGet(); | 286 | int v = mappedVersion.incrementAndGet(); |
| 286 | f.thenAcceptAsync(res -> { | 287 | f.thenAcceptAsync(res -> { |
| 287 | if (res == null || mappedVersion.get() != v) return; | 288 | if (res == null || mappedVersion.get() != v) return; |
| 288 | res = res.map(source -> { | 289 | res = res.andThen(source -> { |
| 289 | source.remapSource(p.project, p.project.getMapper().getDeobfuscator()); | 290 | try { |
| 290 | return source; | 291 | source.remapSource(p.project, p.project.getMapper().getDeobfuscator()); |
| 292 | return Result.ok(source); | ||
| 293 | } catch (Throwable e) { | ||
| 294 | return Result.err(ClassHandleError.remap(e)); | ||
| 295 | } | ||
| 291 | }); | 296 | }); |
| 292 | Entry.this.source = res; | 297 | Entry.this.source = res; |
| 293 | Entry.this.waitingSources.forEach(s -> s.complete(source)); | 298 | Entry.this.waitingSources.forEach(s -> s.complete(source)); |
diff --git a/enigma/src/main/resources/lang/de_de.json b/enigma/src/main/resources/lang/de_de.json index ef41da15..65685cf7 100644 --- a/enigma/src/main/resources/lang/de_de.json +++ b/enigma/src/main/resources/lang/de_de.json | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | "editor.decompiling": "Dekompiliere...", | 12 | "editor.decompiling": "Dekompiliere...", |
| 13 | "editor.decompile_error": "Ein Fehler ist während des Dekompilierens aufgetreten.", | 13 | "editor.decompile_error": "Ein Fehler ist während des Dekompilierens aufgetreten.", |
| 14 | "editor.remap_error": "Ein Fehler ist während des Remappens aufgetreten.", | ||
| 14 | 15 | ||
| 15 | "validation.message.empty_field": "Dieses Feld muss ausgefüllt werden.", | 16 | "validation.message.empty_field": "Dieses Feld muss ausgefüllt werden.", |
| 16 | "validation.message.not_int": "Wert muss eine ganze Zahl sein.", | 17 | "validation.message.not_int": "Wert muss eine ganze Zahl sein.", |
diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index 9b12f429..c2a739c1 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json | |||
| @@ -79,6 +79,7 @@ | |||
| 79 | 79 | ||
| 80 | "editor.decompiling": "Decompiling...", | 80 | "editor.decompiling": "Decompiling...", |
| 81 | "editor.decompile_error": "An error was encountered while decompiling.", | 81 | "editor.decompile_error": "An error was encountered while decompiling.", |
| 82 | "editor.remap_error": "An error was encountered while remapping.", | ||
| 82 | 83 | ||
| 83 | "info_panel.classes.obfuscated": "Obfuscated Classes", | 84 | "info_panel.classes.obfuscated": "Obfuscated Classes", |
| 84 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", | 85 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", |