From 50d4fc8430573757c5fe4f4a1d3b1c4871dbfb46 Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Sun, 7 Jun 2020 17:26:41 +0200 Subject: Add remap crash handler --- .../java/cuchaz/enigma/classhandle/ClassHandleError.java | 5 +++++ .../java/cuchaz/enigma/classhandle/ClassHandleProvider.java | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'enigma/src/main/java') diff --git a/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java b/enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java index a11b9dc..20f847a 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 { return new ClassHandleError(Type.DECOMPILE, cause); } + public static ClassHandleError remap(Throwable cause) { + return new ClassHandleError(Type.REMAP, cause); + } + public enum Type { DECOMPILE, + REMAP, } } \ 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 2d9b52d..f9e4eff 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; import javax.annotation.Nullable; +import org.objectweb.asm.tree.ClassNode; + import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.bytecode.translators.SourceFixVisitor; @@ -19,7 +21,6 @@ import cuchaz.enigma.events.ClassHandleListener.InvalidationType; import cuchaz.enigma.source.*; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.utils.Result; -import org.objectweb.asm.tree.ClassNode; import static cuchaz.enigma.utils.Utils.withLock; @@ -285,9 +286,13 @@ public final class ClassHandleProvider { int v = mappedVersion.incrementAndGet(); f.thenAcceptAsync(res -> { if (res == null || mappedVersion.get() != v) return; - res = res.map(source -> { - source.remapSource(p.project, p.project.getMapper().getDeobfuscator()); - return source; + res = res.andThen(source -> { + try { + source.remapSource(p.project, p.project.getMapper().getDeobfuscator()); + return Result.ok(source); + } catch (Throwable e) { + return Result.err(ClassHandleError.remap(e)); + } }); Entry.this.source = res; Entry.this.waitingSources.forEach(s -> s.complete(source)); -- cgit v1.2.3