From c31b70da2f88c41936a3fd7d69f445ef1db6548d Mon Sep 17 00:00:00 2001 From: Runemoro Date: Mon, 26 Aug 2019 00:55:44 -0400 Subject: Use name proposal service when exporting deobfuscated jar or decompiled sources (#159) --- .../java/cuchaz/enigma/ProposingTranslator.java | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/java/cuchaz/enigma/ProposingTranslator.java (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 new file mode 100644 index 0000000..0807880 --- /dev/null +++ b/src/main/java/cuchaz/enigma/ProposingTranslator.java @@ -0,0 +1,43 @@ +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.representation.entry.Entry; + +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; + } +} -- cgit v1.2.3