From 8e8609cd032d299f79307cfdd41998d331a876a7 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 12 May 2019 11:56:22 +0200 Subject: Simplify Plugin API and support all entry types --- .../cuchaz/enigma/gui/DecompiledClassSource.java | 28 +++++++++------------- 1 file changed, 11 insertions(+), 17 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 93643ab..1e96a06 100644 --- a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java +++ b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java @@ -4,18 +4,17 @@ import cuchaz.enigma.Deobfuscator; import cuchaz.enigma.analysis.EntryReference; import cuchaz.enigma.analysis.SourceIndex; import cuchaz.enigma.analysis.Token; -import cuchaz.enigma.api.EnigmaPlugin; import cuchaz.enigma.gui.highlight.TokenHighlightType; import cuchaz.enigma.translation.LocalNameGenerator; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.representation.TypeDescriptor; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.LocalVariableDefEntry; import javax.annotation.Nullable; import java.util.*; +import java.util.stream.Stream; public class DecompiledClassSource { private final ClassEntry classEntry; @@ -55,10 +54,10 @@ public class DecompiledClassSource { highlightToken(movedToken, TokenHighlightType.DEOBFUSCATED); return translatedEntry.getSourceRemapName(); } else { - String proposedName = proposeName(deobfuscator, entry); - if (proposedName != null) { + Optional proposedName = proposeName(deobfuscator, entry); + if (proposedName.isPresent()) { highlightToken(movedToken, TokenHighlightType.PROPOSED); - return proposedName; + return proposedName.get(); } highlightToken(movedToken, TokenHighlightType.OBFUSCATED); @@ -73,18 +72,13 @@ public class DecompiledClassSource { return null; } - @Nullable - private String proposeName(Deobfuscator deobfuscator, Entry entry) { - if (entry instanceof FieldEntry) { - for (EnigmaPlugin plugin : deobfuscator.getPlugins()) { - String owner = entry.getContainingClass().getFullName(); - String proposal = plugin.proposeFieldName(owner, entry.getName(), ((FieldEntry) entry).getDesc().toString()); - if (proposal != null) { - return proposal; - } - } - } - return null; + private Optional proposeName(Deobfuscator deobfuscator, Entry entry) { + Stream proposals = deobfuscator.getPlugins() + .map(plugin -> plugin.proposeName(entry, deobfuscator.getMapper())) + .filter(Optional::isPresent) + .map(Optional::get); + + return proposals.findFirst(); } @Nullable -- cgit v1.2.3 From 5afc4472807f71f30f5d5be2d4c4632ed3204ec4 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 12 May 2019 15:34:42 +0200 Subject: Separate JarProcessor and EntryNameProposer --- src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (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 1e96a06..d7c981a 100644 --- a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java +++ b/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java @@ -73,7 +73,7 @@ public class DecompiledClassSource { } private Optional proposeName(Deobfuscator deobfuscator, Entry entry) { - Stream proposals = deobfuscator.getPlugins() + Stream proposals = deobfuscator.getNameProposers() .map(plugin -> plugin.proposeName(entry, deobfuscator.getMapper())) .filter(Optional::isPresent) .map(Optional::get); -- cgit v1.2.3 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