diff options
| author | 2015-02-23 23:29:22 -0500 | |
|---|---|---|
| committer | 2015-02-23 23:29:22 -0500 | |
| commit | 2dc7428e37bdd7a119f53d02ce157675509b0d63 (patch) | |
| tree | 68f409ac726166e427eea3a199eb462130c53ccd /src/cuchaz/enigma/mapping/EntryFactory.java | |
| parent | make types serializable (diff) | |
| download | enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.tar.gz enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.tar.xz enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.zip | |
lots of work in better handling of inner classes
also working on recognizing unobfuscated and deobfuscated jars
(needed for M3L)
Diffstat (limited to 'src/cuchaz/enigma/mapping/EntryFactory.java')
| -rw-r--r-- | src/cuchaz/enigma/mapping/EntryFactory.java | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/cuchaz/enigma/mapping/EntryFactory.java b/src/cuchaz/enigma/mapping/EntryFactory.java index dceea29..bbdfa73 100644 --- a/src/cuchaz/enigma/mapping/EntryFactory.java +++ b/src/cuchaz/enigma/mapping/EntryFactory.java | |||
| @@ -25,25 +25,19 @@ public class EntryFactory { | |||
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | public static ClassEntry getObfClassEntry(JarIndex jarIndex, ClassMapping classMapping) { | 27 | public static ClassEntry getObfClassEntry(JarIndex jarIndex, ClassMapping classMapping) { |
| 28 | return new ClassEntry(getChainedOuterClassName(jarIndex, classMapping.getObfName())); | 28 | return getChainedOuterClassName(jarIndex, new ClassEntry(classMapping.getObfFullName())); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | private static String getChainedOuterClassName(JarIndex jarIndex, String obfClassName) { | 31 | public static ClassEntry getChainedOuterClassName(JarIndex jarIndex, ClassEntry obfClassEntry) { |
| 32 | 32 | ||
| 33 | // lookup the chain of outer classes | 33 | // lookup the chain of outer classes |
| 34 | List<String> obfOuterClassNames = Lists.newArrayList(); | 34 | List<ClassEntry> obfClassChain = Lists.newArrayList(obfClassEntry); |
| 35 | String checkName = obfClassName; | 35 | ClassEntry checkClassEntry = obfClassEntry; |
| 36 | while (true) { | 36 | while (true) { |
| 37 | 37 | ClassEntry obfOuterClassEntry = jarIndex.getOuterClass(checkClassEntry); | |
| 38 | // if this class name has a package, then it can't be an inner class | 38 | if (obfOuterClassEntry != null) { |
| 39 | if (!new ClassEntry(checkName).isInDefaultPackage()) { | 39 | obfClassChain.add(obfOuterClassEntry); |
| 40 | break; | 40 | checkClassEntry = obfOuterClassEntry; |
| 41 | } | ||
| 42 | |||
| 43 | String obfOuterClassName = jarIndex.getOuterClass(checkName); | ||
| 44 | if (obfOuterClassName != null) { | ||
| 45 | obfOuterClassNames.add(obfOuterClassName); | ||
| 46 | checkName = obfOuterClassName; | ||
| 47 | } else { | 41 | } else { |
| 48 | break; | 42 | break; |
| 49 | } | 43 | } |
| @@ -51,12 +45,15 @@ public class EntryFactory { | |||
| 51 | 45 | ||
| 52 | // build the chained class name | 46 | // build the chained class name |
| 53 | StringBuilder buf = new StringBuilder(); | 47 | StringBuilder buf = new StringBuilder(); |
| 54 | for (int i=obfOuterClassNames.size()-1; i>=0; i--) { | 48 | for (int i=obfClassChain.size()-1; i>=0; i--) { |
| 55 | buf.append(obfOuterClassNames.get(i)); | 49 | if (buf.length() == 0) { |
| 56 | buf.append("$"); | 50 | buf.append(obfClassChain.get(i).getName()); |
| 51 | } else { | ||
| 52 | buf.append("$"); | ||
| 53 | buf.append(obfClassChain.get(i).getSimpleName()); | ||
| 54 | } | ||
| 57 | } | 55 | } |
| 58 | buf.append(obfClassName); | 56 | return new ClassEntry(buf.toString()); |
| 59 | return buf.toString(); | ||
| 60 | } | 57 | } |
| 61 | 58 | ||
| 62 | public static ClassEntry getDeobfClassEntry(ClassMapping classMapping) { | 59 | public static ClassEntry getDeobfClassEntry(ClassMapping classMapping) { |