diff options
| author | 2019-11-08 17:24:41 -0600 | |
|---|---|---|
| committer | 2019-11-08 23:24:41 +0000 | |
| commit | b49e7eeb75837faeafb938a739cd2fa82594bcea (patch) | |
| tree | 2c1b726c16556f78c660f4e044f9f2e5f0a88b45 | |
| parent | Add stats generation (#177) (diff) | |
| download | enigma-b49e7eeb75837faeafb938a739cd2fa82594bcea.tar.gz enigma-b49e7eeb75837faeafb938a739cd2fa82594bcea.tar.xz enigma-b49e7eeb75837faeafb938a739cd2fa82594bcea.zip | |
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 <liach@users.noreply.github.com>
* Names can have $ in java
Signed-off-by: liach <liach@users.noreply.github.com>
| -rw-r--r-- | src/main/java/cuchaz/enigma/analysis/SourceIndex.java | 18 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java | 24 |
2 files changed, 27 insertions, 15 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java index ed12ce37..a800f432 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; | |||
| 16 | import com.google.common.collect.Maps; | 16 | import com.google.common.collect.Maps; |
| 17 | import com.google.common.collect.Multimap; | 17 | import com.google.common.collect.Multimap; |
| 18 | import com.strobel.decompiler.languages.Region; | 18 | import com.strobel.decompiler.languages.Region; |
| 19 | import com.strobel.decompiler.languages.java.ast.*; | 19 | import com.strobel.decompiler.languages.java.ast.AstNode; |
| 20 | import com.strobel.decompiler.languages.java.ast.CompilationUnit; | ||
| 21 | import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration; | ||
| 22 | import com.strobel.decompiler.languages.java.ast.Identifier; | ||
| 23 | import com.strobel.decompiler.languages.java.ast.TypeDeclaration; | ||
| 20 | import cuchaz.enigma.gui.SourceRemapper; | 24 | import cuchaz.enigma.gui.SourceRemapper; |
| 21 | import cuchaz.enigma.translation.mapping.EntryResolver; | 25 | import cuchaz.enigma.translation.mapping.EntryResolver; |
| 22 | import cuchaz.enigma.translation.mapping.ResolutionStrategy; | 26 | import cuchaz.enigma.translation.mapping.ResolutionStrategy; |
| @@ -133,12 +137,12 @@ public class SourceIndex { | |||
| 133 | // DEBUG | 137 | // DEBUG |
| 134 | // System.out.println( String.format( "%s \"%s\" region: %s", node.getNodeType(), name, region ) ); | 138 | // System.out.println( String.format( "%s \"%s\" region: %s", node.getNodeType(), name, region ) ); |
| 135 | 139 | ||
| 136 | // if the token has a $ in it, something's wrong. Ignore this token | 140 | // Tokens can have $ in name, even for top-level classes |
| 137 | if (name.lastIndexOf('$') >= 0 && this.ignoreBadTokens) { | 141 | //if (name.lastIndexOf('$') >= 0 && this.ignoreBadTokens) { |
| 138 | // DEBUG | 142 | // // DEBUG |
| 139 | System.err.println(String.format("WARNING: %s \"%s\" is probably a bad token. It was ignored", node.getNodeType(), name)); | 143 | // System.err.println(String.format("WARNING: %s \"%s\" is probably a bad token. It was ignored", node.getNodeType(), name)); |
| 140 | return null; | 144 | // return null; |
| 141 | } | 145 | //} |
| 142 | 146 | ||
| 143 | return token; | 147 | return token; |
| 144 | } | 148 | } |
diff --git a/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java b/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java index 485daf55..88ed96f4 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 { | |||
| 18 | private final EntryIndex entryIndex; | 18 | private final EntryIndex entryIndex; |
| 19 | private final EntryRemapper mapper; | 19 | private final EntryRemapper mapper; |
| 20 | private final EntryResolver entryResolver; | 20 | private final EntryResolver entryResolver; |
| 21 | private final ObfuscationTestService obfuscationTestService; | 21 | private final List<ObfuscationTestService> obfuscationTestServices; |
| 22 | private final NameProposalService nameProposalService; | 22 | private final List<NameProposalService> nameProposalServices; |
| 23 | 23 | ||
| 24 | public StatsGenerator(EnigmaProject project) { | 24 | public StatsGenerator(EnigmaProject project) { |
| 25 | entryIndex = project.getJarIndex().getEntryIndex(); | 25 | entryIndex = project.getJarIndex().getEntryIndex(); |
| 26 | mapper = project.getMapper(); | 26 | mapper = project.getMapper(); |
| 27 | entryResolver = project.getJarIndex().getEntryResolver(); | 27 | entryResolver = project.getJarIndex().getEntryResolver(); |
| 28 | obfuscationTestService = project.getEnigma().getServices().get(ObfuscationTestService.TYPE).orElse(null); | 28 | obfuscationTestServices = project.getEnigma().getServices().get(ObfuscationTestService.TYPE); |
| 29 | nameProposalService = project.getEnigma().getServices().get(NameProposalService.TYPE).orElse(null); | 29 | nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | public String generate(ProgressListener progress, Set<StatsMember> includedMembers) { | 32 | public String generate(ProgressListener progress, Set<StatsMember> includedMembers) { |
| @@ -112,12 +112,20 @@ public class StatsGenerator { | |||
| 112 | private boolean isObfuscated(Entry<?> entry) { | 112 | private boolean isObfuscated(Entry<?> entry) { |
| 113 | String name = entry.getName(); | 113 | String name = entry.getName(); |
| 114 | 114 | ||
| 115 | if (obfuscationTestService != null && obfuscationTestService.testDeobfuscated(entry)) { | 115 | if (!obfuscationTestServices.isEmpty()) { |
| 116 | return false; | 116 | for (ObfuscationTestService service : obfuscationTestServices) { |
| 117 | if (service.testDeobfuscated(entry)) { | ||
| 118 | return false; | ||
| 119 | } | ||
| 120 | } | ||
| 117 | } | 121 | } |
| 118 | 122 | ||
| 119 | if (nameProposalService != null && nameProposalService.proposeName(entry, mapper).isPresent()) { | 123 | if (!nameProposalServices.isEmpty()) { |
| 120 | return false; | 124 | for (NameProposalService service : nameProposalServices) { |
| 125 | if (service.proposeName(entry, mapper).isPresent()) { | ||
| 126 | return false; | ||
| 127 | } | ||
| 128 | } | ||
| 121 | } | 129 | } |
| 122 | 130 | ||
| 123 | String mappedName = mapper.deobfuscate(entry).getName(); | 131 | String mappedName = mapper.deobfuscate(entry).getName(); |