From e27d5967029f4f3da8889dd673ba516dcd9f3ac8 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 16 Jun 2019 23:49:25 +0200 Subject: Plugin rework along with API rework: Enigma split from EnigmaProject; plugins now provide services configurable via a profile --- .../cuchaz/enigma/gui/DecompiledClassSource.java | 38 +++++++++++++++------- 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java') 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 @@ package cuchaz.enigma.gui; -import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.EnigmaProject; +import cuchaz.enigma.EnigmaServices; import cuchaz.enigma.analysis.EntryReference; import cuchaz.enigma.analysis.SourceIndex; import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.api.service.NameProposalService; import cuchaz.enigma.gui.highlight.TokenHighlightType; import cuchaz.enigma.translation.LocalNameGenerator; import cuchaz.enigma.translation.Translator; +import cuchaz.enigma.translation.mapping.EntryRemapper; +import cuchaz.enigma.translation.mapping.EntryResolver; +import cuchaz.enigma.translation.mapping.ResolutionStrategy; import cuchaz.enigma.translation.representation.TypeDescriptor; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.Entry; @@ -34,27 +39,27 @@ public class DecompiledClassSource { return new DecompiledClassSource(classEntry, new SourceIndex(text)); } - public void remapSource(Deobfuscator deobfuscator, Translator translator) { + public void remapSource(EnigmaProject project, Translator translator) { highlightedTokens.clear(); SourceRemapper remapper = new SourceRemapper(obfuscatedIndex.getSource(), obfuscatedIndex.referenceTokens()); - SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(deobfuscator, token, movedToken, translator)); + SourceRemapper.Result remapResult = remapper.remap((token, movedToken) -> remapToken(project, token, movedToken, translator)); remappedIndex = obfuscatedIndex.remapTo(remapResult); } - private String remapToken(Deobfuscator deobfuscator, Token token, Token movedToken, Translator translator) { + private String remapToken(EnigmaProject project, Token token, Token movedToken, Translator translator) { EntryReference, Entry> reference = obfuscatedIndex.getReference(token); Entry entry = reference.getNameableEntry(); Entry translatedEntry = translator.translate(entry); - if (deobfuscator.isRenamable(reference)) { + if (project.isRenamable(reference)) { if (isDeobfuscated(entry, translatedEntry)) { highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED); return translatedEntry.getSourceRemapName(); } else { - Optional proposedName = proposeName(deobfuscator, entry); + Optional proposedName = proposeName(project, entry); if (proposedName.isPresent()) { highlightToken(movedToken, TokenHighlightType.PROPOSED); return proposedName.get(); @@ -72,13 +77,22 @@ public class DecompiledClassSource { return null; } - private Optional proposeName(Deobfuscator deobfuscator, Entry entry) { - Stream proposals = deobfuscator.getNameProposers() - .map(plugin -> plugin.proposeName(entry, deobfuscator.getMapper())) - .filter(Optional::isPresent) - .map(Optional::get); + private Optional proposeName(EnigmaProject project, Entry entry) { + EnigmaServices services = project.getEnigma().getServices(); - return proposals.findFirst(); + return services.get(NameProposalService.TYPE).flatMap(nameProposalService -> { + EntryResolver resolver = project.getMapper().getObfResolver(); + + Collection> resolved = resolver.resolveEntry(entry, ResolutionStrategy.RESOLVE_ROOT); + EntryRemapper mapper = project.getMapper(); + + Stream proposals = resolved.stream() + .map(e -> nameProposalService.proposeName(e, mapper)) + .filter(Optional::isPresent) + .map(Optional::get); + + return proposals.findFirst(); + }); } @Nullable -- cgit v1.2.3