diff options
Diffstat (limited to 'enigma/src/main/java')
| -rw-r--r-- | enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleError.java | 5 | ||||
| -rw-r--r-- | enigma/src/main/java/cuchaz/enigma/classhandle/ClassHandleProvider.java | 13 |
2 files changed, 14 insertions, 4 deletions
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 { | |||
| 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 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; | |||
| 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)); |