summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
diff options
context:
space:
mode:
authorGravatar gegy10002019-02-19 19:16:55 +0200
committerGravatar gegy10002019-02-19 19:16:55 +0200
commitd23e4d934c9b020adcbde411a64bbef7549f3020 (patch)
treebbd61d5fb08d589ede58d0949e33255b95f62bcc /src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
parentMatch token navigation reference resolution to match source index (diff)
downloadenigma-fork-d23e4d934c9b020adcbde411a64bbef7549f3020.tar.gz
enigma-fork-d23e4d934c9b020adcbde411a64bbef7549f3020.tar.xz
enigma-fork-d23e4d934c9b020adcbde411a64bbef7549f3020.zip
Write stacktrace to editor when decompilation throws an exception
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java')
-rw-r--r--src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
index 0ac41b3..93643ab 100644
--- a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
+++ b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
@@ -19,30 +19,32 @@ import java.util.*;
19 19
20public class DecompiledClassSource { 20public class DecompiledClassSource {
21 private final ClassEntry classEntry; 21 private final ClassEntry classEntry;
22 private final Deobfuscator deobfuscator;
23 22
24 private final SourceIndex obfuscatedIndex; 23 private final SourceIndex obfuscatedIndex;
25 private SourceIndex remappedIndex; 24 private SourceIndex remappedIndex;
26 25
27 private final Map<TokenHighlightType, Collection<Token>> highlightedTokens = new EnumMap<>(TokenHighlightType.class); 26 private final Map<TokenHighlightType, Collection<Token>> highlightedTokens = new EnumMap<>(TokenHighlightType.class);
28 27
29 public DecompiledClassSource(ClassEntry classEntry, Deobfuscator deobfuscator, SourceIndex index) { 28 public DecompiledClassSource(ClassEntry classEntry, SourceIndex index) {
30 this.classEntry = classEntry; 29 this.classEntry = classEntry;
31 this.deobfuscator = deobfuscator;
32 this.obfuscatedIndex = index; 30 this.obfuscatedIndex = index;
33 this.remappedIndex = index; 31 this.remappedIndex = index;
34 } 32 }
35 33
36 public void remapSource(Translator translator) { 34 public static DecompiledClassSource text(ClassEntry classEntry, String text) {
35 return new DecompiledClassSource(classEntry, new SourceIndex(text));
36 }
37
38 public void remapSource(Deobfuscator deobfuscator, Translator translator) {
37 highlightedTokens.clear(); 39 highlightedTokens.clear();
38 40
39 SourceRemapper remapper = new SourceRemapper(obfuscatedIndex.getSource(), obfuscatedIndex.referenceTokens()); 41 SourceRemapper remapper = new SourceRemapper(obfuscatedIndex.getSource(), obfuscatedIndex.referenceTokens());
40 42
41 SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(token, movedToken, translator)); 43 SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(deobfuscator, token, movedToken, translator));
42 remappedIndex = obfuscatedIndex.remapTo(remapResult); 44 remappedIndex = obfuscatedIndex.remapTo(remapResult);
43 } 45 }
44 46
45 private String remapToken(Token token, Token movedToken, Translator translator) { 47 private String remapToken(Deobfuscator deobfuscator, Token token, Token movedToken, Translator translator) {
46 EntryReference<Entry<?>, Entry<?>> reference = obfuscatedIndex.getReference(token); 48 EntryReference<Entry<?>, Entry<?>> reference = obfuscatedIndex.getReference(token);
47 49
48 Entry<?> entry = reference.getNameableEntry(); 50 Entry<?> entry = reference.getNameableEntry();
@@ -53,7 +55,7 @@ public class DecompiledClassSource {
53 highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED); 55 highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED);
54 return translatedEntry.getSourceRemapName(); 56 return translatedEntry.getSourceRemapName();
55 } else { 57 } else {
56 String proposedName = proposeName(entry); 58 String proposedName = proposeName(deobfuscator, entry);
57 if (proposedName != null) { 59 if (proposedName != null) {
58 highlightToken(movedToken, TokenHighlightType.PROPOSED); 60 highlightToken(movedToken, TokenHighlightType.PROPOSED);
59 return proposedName; 61 return proposedName;
@@ -72,7 +74,7 @@ public class DecompiledClassSource {
72 } 74 }
73 75
74 @Nullable 76 @Nullable
75 private String proposeName(Entry<?> entry) { 77 private String proposeName(Deobfuscator deobfuscator, Entry<?> entry) {
76 if (entry instanceof FieldEntry) { 78 if (entry instanceof FieldEntry) {
77 for (EnigmaPlugin plugin : deobfuscator.getPlugins()) { 79 for (EnigmaPlugin plugin : deobfuscator.getPlugins()) {
78 String owner = entry.getContainingClass().getFullName(); 80 String owner = entry.getContainingClass().getFullName();