From ad59e46740ef636b95667615e3881fcee6fbbcb9 Mon Sep 17 00:00:00 2001 From: liach Date: Fri, 8 Nov 2019 16:35:19 -0600 Subject: Allow multiple services for enigma (#168) * Allow multiple services for enigma Signed-off-by: liach * Delete bad dummy Signed-off-by: liach --- .../java/cuchaz/enigma/ProposingTranslator.java | 74 ++++++++++++---------- 1 file changed, 42 insertions(+), 32 deletions(-) (limited to 'src/main/java/cuchaz/enigma/ProposingTranslator.java') 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; import cuchaz.enigma.api.service.NameProposalService; import cuchaz.enigma.translation.Translatable; import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.mapping.*; +import cuchaz.enigma.translation.mapping.EntryRemapper; +import cuchaz.enigma.translation.mapping.ResolutionStrategy; import cuchaz.enigma.translation.representation.entry.Entry; +import java.util.Arrays; import java.util.Optional; public class ProposingTranslator implements Translator { - private final EntryRemapper mapper; - private final NameProposalService nameProposalService; - - public ProposingTranslator(EntryRemapper mapper, NameProposalService nameProposalService) { - this.mapper = mapper; - this.nameProposalService = nameProposalService; - } - - @Override - @SuppressWarnings("unchecked") - public T translate(T translatable) { - if (translatable == null) { - return null; - } - - T deobfuscated = mapper.deobfuscate(translatable); - - if (translatable instanceof Entry && ((Entry) deobfuscated).getName().equals(((Entry) translatable).getName())) { - return mapper.getObfResolver() - .resolveEntry((Entry) translatable, ResolutionStrategy.RESOLVE_ROOT) - .stream() - .map(e1 -> nameProposalService.proposeName(e1, mapper)) - .filter(Optional::isPresent) - .map(Optional::get) - .findFirst() - .map(newName -> (T) ((Entry) deobfuscated).withName(newName)) - .orElse(deobfuscated); - } - - return deobfuscated; - } + private final EntryRemapper mapper; + private final NameProposalService[] nameProposalServices; + + public ProposingTranslator(EntryRemapper mapper, NameProposalService[] nameProposalServices) { + this.mapper = mapper; + this.nameProposalServices = nameProposalServices; + } + + @Override + @SuppressWarnings("unchecked") + public T translate(T translatable) { + if (translatable == null) { + return null; + } + + T deobfuscated = mapper.deobfuscate(translatable); + + if (translatable instanceof Entry && ((Entry) deobfuscated).getName().equals(((Entry) translatable).getName())) { + return mapper.getObfResolver() + .resolveEntry((Entry) translatable, ResolutionStrategy.RESOLVE_ROOT) + .stream() + .map(this::proposeName) + .filter(Optional::isPresent) + .map(Optional::get) + .findFirst() + .map(newName -> (T) ((Entry) deobfuscated).withName(newName)) + .orElse(deobfuscated); + } + + return deobfuscated; + } + + private Optional proposeName(Entry entry) { + return Arrays.stream(nameProposalServices) + .map(service -> service.proposeName(entry, mapper)) + .filter(Optional::isPresent) + .map(Optional::get) + .findFirst(); + } } -- cgit v1.2.3