summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/ProposingTranslator.java
diff options
context:
space:
mode:
authorGravatar liach2019-11-08 16:35:19 -0600
committerGravatar modmuss502019-11-08 22:35:19 +0000
commitad59e46740ef636b95667615e3881fcee6fbbcb9 (patch)
tree2cc829684426f8f0373834efe4bee0513a0544f2 /src/main/java/cuchaz/enigma/ProposingTranslator.java
parentAdd tinyv2 save/load (diff)
downloadenigma-fork-ad59e46740ef636b95667615e3881fcee6fbbcb9.tar.gz
enigma-fork-ad59e46740ef636b95667615e3881fcee6fbbcb9.tar.xz
enigma-fork-ad59e46740ef636b95667615e3881fcee6fbbcb9.zip
Allow multiple services for enigma (#168)
* Allow multiple services for enigma Signed-off-by: liach <liach@users.noreply.github.com> * Delete bad dummy Signed-off-by: liach <liach@users.noreply.github.com>
Diffstat (limited to 'src/main/java/cuchaz/enigma/ProposingTranslator.java')
-rw-r--r--src/main/java/cuchaz/enigma/ProposingTranslator.java74
1 files changed, 42 insertions, 32 deletions
diff --git a/src/main/java/cuchaz/enigma/ProposingTranslator.java b/src/main/java/cuchaz/enigma/ProposingTranslator.java
index 0807880..018fbfd 100644
--- a/src/main/java/cuchaz/enigma/ProposingTranslator.java
+++ b/src/main/java/cuchaz/enigma/ProposingTranslator.java
@@ -3,41 +3,51 @@ package cuchaz.enigma;
3import cuchaz.enigma.api.service.NameProposalService; 3import cuchaz.enigma.api.service.NameProposalService;
4import cuchaz.enigma.translation.Translatable; 4import cuchaz.enigma.translation.Translatable;
5import cuchaz.enigma.translation.Translator; 5import cuchaz.enigma.translation.Translator;
6import cuchaz.enigma.translation.mapping.*; 6import cuchaz.enigma.translation.mapping.EntryRemapper;
7import cuchaz.enigma.translation.mapping.ResolutionStrategy;
7import cuchaz.enigma.translation.representation.entry.Entry; 8import cuchaz.enigma.translation.representation.entry.Entry;
8 9
10import java.util.Arrays;
9import java.util.Optional; 11import java.util.Optional;
10 12
11public class ProposingTranslator implements Translator { 13public class ProposingTranslator implements Translator {
12 private final EntryRemapper mapper; 14 private final EntryRemapper mapper;
13 private final NameProposalService nameProposalService; 15 private final NameProposalService[] nameProposalServices;
14 16
15 public ProposingTranslator(EntryRemapper mapper, NameProposalService nameProposalService) { 17 public ProposingTranslator(EntryRemapper mapper, NameProposalService[] nameProposalServices) {
16 this.mapper = mapper; 18 this.mapper = mapper;
17 this.nameProposalService = nameProposalService; 19 this.nameProposalServices = nameProposalServices;
18 } 20 }
19 21
20 @Override 22 @Override
21 @SuppressWarnings("unchecked") 23 @SuppressWarnings("unchecked")
22 public <T extends Translatable> T translate(T translatable) { 24 public <T extends Translatable> T translate(T translatable) {
23 if (translatable == null) { 25 if (translatable == null) {
24 return null; 26 return null;
25 } 27 }
26 28
27 T deobfuscated = mapper.deobfuscate(translatable); 29 T deobfuscated = mapper.deobfuscate(translatable);
28 30
29 if (translatable instanceof Entry && ((Entry) deobfuscated).getName().equals(((Entry<?>) translatable).getName())) { 31 if (translatable instanceof Entry && ((Entry) deobfuscated).getName().equals(((Entry<?>) translatable).getName())) {
30 return mapper.getObfResolver() 32 return mapper.getObfResolver()
31 .resolveEntry((Entry<?>) translatable, ResolutionStrategy.RESOLVE_ROOT) 33 .resolveEntry((Entry<?>) translatable, ResolutionStrategy.RESOLVE_ROOT)
32 .stream() 34 .stream()
33 .map(e1 -> nameProposalService.proposeName(e1, mapper)) 35 .map(this::proposeName)
34 .filter(Optional::isPresent) 36 .filter(Optional::isPresent)
35 .map(Optional::get) 37 .map(Optional::get)
36 .findFirst() 38 .findFirst()
37 .map(newName -> (T) ((Entry) deobfuscated).withName(newName)) 39 .map(newName -> (T) ((Entry) deobfuscated).withName(newName))
38 .orElse(deobfuscated); 40 .orElse(deobfuscated);
39 } 41 }
40 42
41 return deobfuscated; 43 return deobfuscated;
42 } 44 }
45
46 private Optional<String> proposeName(Entry<?> entry) {
47 return Arrays.stream(nameProposalServices)
48 .map(service -> service.proposeName(entry, mapper))
49 .filter(Optional::isPresent)
50 .map(Optional::get)
51 .findFirst();
52 }
43} 53}