diff options
| author | 2019-02-19 19:16:55 +0200 | |
|---|---|---|
| committer | 2019-02-19 19:16:55 +0200 | |
| commit | d23e4d934c9b020adcbde411a64bbef7549f3020 (patch) | |
| tree | bbd61d5fb08d589ede58d0949e33255b95f62bcc /src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java | |
| parent | Match token navigation reference resolution to match source index (diff) | |
| download | enigma-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.java | 18 |
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 | ||
| 20 | public class DecompiledClassSource { | 20 | public 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(); |