summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
diff options
context:
space:
mode:
authorGravatar gegy10002019-06-16 23:49:25 +0200
committerGravatar gegy10002019-06-16 23:49:25 +0200
commite27d5967029f4f3da8889dd673ba516dcd9f3ac8 (patch)
tree71c98afad01cafdb2884da288e494e8761c2a8ff /src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
parentMerge remote-tracking branch 'origin/master' into proposal-tweak (diff)
downloadenigma-fork-e27d5967029f4f3da8889dd673ba516dcd9f3ac8.tar.gz
enigma-fork-e27d5967029f4f3da8889dd673ba516dcd9f3ac8.tar.xz
enigma-fork-e27d5967029f4f3da8889dd673ba516dcd9f3ac8.zip
Plugin rework along with API rework: Enigma split from EnigmaProject; plugins now provide services configurable via a profile
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java')
-rw-r--r--src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
index d7c981a..44f70f8 100644
--- a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
+++ b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
@@ -1,12 +1,17 @@
1package cuchaz.enigma.gui; 1package cuchaz.enigma.gui;
2 2
3import cuchaz.enigma.Deobfuscator; 3import cuchaz.enigma.EnigmaProject;
4import cuchaz.enigma.EnigmaServices;
4import cuchaz.enigma.analysis.EntryReference; 5import cuchaz.enigma.analysis.EntryReference;
5import cuchaz.enigma.analysis.SourceIndex; 6import cuchaz.enigma.analysis.SourceIndex;
6import cuchaz.enigma.analysis.Token; 7import cuchaz.enigma.analysis.Token;
8import cuchaz.enigma.api.service.NameProposalService;
7import cuchaz.enigma.gui.highlight.TokenHighlightType; 9import cuchaz.enigma.gui.highlight.TokenHighlightType;
8import cuchaz.enigma.translation.LocalNameGenerator; 10import cuchaz.enigma.translation.LocalNameGenerator;
9import cuchaz.enigma.translation.Translator; 11import cuchaz.enigma.translation.Translator;
12import cuchaz.enigma.translation.mapping.EntryRemapper;
13import cuchaz.enigma.translation.mapping.EntryResolver;
14import cuchaz.enigma.translation.mapping.ResolutionStrategy;
10import cuchaz.enigma.translation.representation.TypeDescriptor; 15import cuchaz.enigma.translation.representation.TypeDescriptor;
11import cuchaz.enigma.translation.representation.entry.ClassEntry; 16import cuchaz.enigma.translation.representation.entry.ClassEntry;
12import cuchaz.enigma.translation.representation.entry.Entry; 17import cuchaz.enigma.translation.representation.entry.Entry;
@@ -34,27 +39,27 @@ public class DecompiledClassSource {
34 return new DecompiledClassSource(classEntry, new SourceIndex(text)); 39 return new DecompiledClassSource(classEntry, new SourceIndex(text));
35 } 40 }
36 41
37 public void remapSource(Deobfuscator deobfuscator, Translator translator) { 42 public void remapSource(EnigmaProject project, Translator translator) {
38 highlightedTokens.clear(); 43 highlightedTokens.clear();
39 44
40 SourceRemapper remapper = new SourceRemapper(obfuscatedIndex.getSource(), obfuscatedIndex.referenceTokens()); 45 SourceRemapper remapper = new SourceRemapper(obfuscatedIndex.getSource(), obfuscatedIndex.referenceTokens());
41 46
42 SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(deobfuscator, token, movedToken, translator)); 47 SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(project, token, movedToken, translator));
43 remappedIndex = obfuscatedIndex.remapTo(remapResult); 48 remappedIndex = obfuscatedIndex.remapTo(remapResult);
44 } 49 }
45 50
46 private String remapToken(Deobfuscator deobfuscator, Token token, Token movedToken, Translator translator) { 51 private String remapToken(EnigmaProject project, Token token, Token movedToken, Translator translator) {
47 EntryReference<Entry<?>, Entry<?>> reference = obfuscatedIndex.getReference(token); 52 EntryReference<Entry<?>, Entry<?>> reference = obfuscatedIndex.getReference(token);
48 53
49 Entry<?> entry = reference.getNameableEntry(); 54 Entry<?> entry = reference.getNameableEntry();
50 Entry<?> translatedEntry = translator.translate(entry); 55 Entry<?> translatedEntry = translator.translate(entry);
51 56
52 if (deobfuscator.isRenamable(reference)) { 57 if (project.isRenamable(reference)) {
53 if (isDeobfuscated(entry, translatedEntry)) { 58 if (isDeobfuscated(entry, translatedEntry)) {
54 highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED); 59 highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED);
55 return translatedEntry.getSourceRemapName(); 60 return translatedEntry.getSourceRemapName();
56 } else { 61 } else {
57 Optional<String> proposedName = proposeName(deobfuscator, entry); 62 Optional<String> proposedName = proposeName(project, entry);
58 if (proposedName.isPresent()) { 63 if (proposedName.isPresent()) {
59 highlightToken(movedToken, TokenHighlightType.PROPOSED); 64 highlightToken(movedToken, TokenHighlightType.PROPOSED);
60 return proposedName.get(); 65 return proposedName.get();
@@ -72,13 +77,22 @@ public class DecompiledClassSource {
72 return null; 77 return null;
73 } 78 }
74 79
75 private Optional<String> proposeName(Deobfuscator deobfuscator, Entry<?> entry) { 80 private Optional<String> proposeName(EnigmaProject project, Entry<?> entry) {
76 Stream<String> proposals = deobfuscator.getNameProposers() 81 EnigmaServices services = project.getEnigma().getServices();
77 .map(plugin -> plugin.proposeName(entry, deobfuscator.getMapper()))
78 .filter(Optional::isPresent)
79 .map(Optional::get);
80 82
81 return proposals.findFirst(); 83 return services.get(NameProposalService.TYPE).flatMap(nameProposalService -> {
84 EntryResolver resolver = project.getMapper().getObfResolver();
85
86 Collection<Entry<?>> resolved = resolver.resolveEntry(entry, ResolutionStrategy.RESOLVE_ROOT);
87 EntryRemapper mapper = project.getMapper();
88
89 Stream<String> proposals = resolved.stream()
90 .map(e -> nameProposalService.proposeName(e, mapper))
91 .filter(Optional::isPresent)
92 .map(Optional::get);
93
94 return proposals.findFirst();
95 });
82 } 96 }
83 97
84 @Nullable 98 @Nullable