From b49e7eeb75837faeafb938a739cd2fa82594bcea Mon Sep 17 00:00:00 2001 From: liach Date: Fri, 8 Nov 2019 17:24:41 -0600 Subject: Tweak runemoro's stats generator to be compatible with multiple services (#178) * Tweak runemoro's stats generator to be compatible with multiple services Signed-off-by: liach * Names can have $ in java Signed-off-by: liach --- .../java/cuchaz/enigma/analysis/SourceIndex.java | 18 +++++++++------- .../cuchaz/enigma/gui/stats/StatsGenerator.java | 24 ++++++++++++++-------- 2 files changed, 27 insertions(+), 15 deletions(-) (limited to 'src/main/java/cuchaz/enigma') diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java index ed12ce3..a800f43 100644 --- a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java @@ -16,7 +16,11 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.strobel.decompiler.languages.Region; -import com.strobel.decompiler.languages.java.ast.*; +import com.strobel.decompiler.languages.java.ast.AstNode; +import com.strobel.decompiler.languages.java.ast.CompilationUnit; +import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration; +import com.strobel.decompiler.languages.java.ast.Identifier; +import com.strobel.decompiler.languages.java.ast.TypeDeclaration; import cuchaz.enigma.gui.SourceRemapper; import cuchaz.enigma.translation.mapping.EntryResolver; import cuchaz.enigma.translation.mapping.ResolutionStrategy; @@ -133,12 +137,12 @@ public class SourceIndex { // DEBUG // System.out.println( String.format( "%s \"%s\" region: %s", node.getNodeType(), name, region ) ); - // if the token has a $ in it, something's wrong. Ignore this token - if (name.lastIndexOf('$') >= 0 && this.ignoreBadTokens) { - // DEBUG - System.err.println(String.format("WARNING: %s \"%s\" is probably a bad token. It was ignored", node.getNodeType(), name)); - return null; - } + // Tokens can have $ in name, even for top-level classes + //if (name.lastIndexOf('$') >= 0 && this.ignoreBadTokens) { + // // DEBUG + // System.err.println(String.format("WARNING: %s \"%s\" is probably a bad token. It was ignored", node.getNodeType(), name)); + // return null; + //} return token; } diff --git a/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java b/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java index 485daf5..88ed96f 100644 --- a/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java +++ b/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java @@ -18,15 +18,15 @@ public class StatsGenerator { private final EntryIndex entryIndex; private final EntryRemapper mapper; private final EntryResolver entryResolver; - private final ObfuscationTestService obfuscationTestService; - private final NameProposalService nameProposalService; + private final List obfuscationTestServices; + private final List nameProposalServices; public StatsGenerator(EnigmaProject project) { entryIndex = project.getJarIndex().getEntryIndex(); mapper = project.getMapper(); entryResolver = project.getJarIndex().getEntryResolver(); - obfuscationTestService = project.getEnigma().getServices().get(ObfuscationTestService.TYPE).orElse(null); - nameProposalService = project.getEnigma().getServices().get(NameProposalService.TYPE).orElse(null); + obfuscationTestServices = project.getEnigma().getServices().get(ObfuscationTestService.TYPE); + nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); } public String generate(ProgressListener progress, Set includedMembers) { @@ -112,12 +112,20 @@ public class StatsGenerator { private boolean isObfuscated(Entry entry) { String name = entry.getName(); - if (obfuscationTestService != null && obfuscationTestService.testDeobfuscated(entry)) { - return false; + if (!obfuscationTestServices.isEmpty()) { + for (ObfuscationTestService service : obfuscationTestServices) { + if (service.testDeobfuscated(entry)) { + return false; + } + } } - if (nameProposalService != null && nameProposalService.proposeName(entry, mapper).isPresent()) { - return false; + if (!nameProposalServices.isEmpty()) { + for (NameProposalService service : nameProposalServices) { + if (service.proposeName(entry, mapper).isPresent()) { + return false; + } + } } String mappedName = mapper.deobfuscate(entry).getName(); -- cgit v1.2.3