From 2dc7428e37bdd7a119f53d02ce157675509b0d63 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 23 Feb 2015 23:29:22 -0500 Subject: lots of work in better handling of inner classes also working on recognizing unobfuscated and deobfuscated jars (needed for M3L) --- src/cuchaz/enigma/mapping/EntryFactory.java | 35 +++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/cuchaz/enigma/mapping/EntryFactory.java') 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 { } public static ClassEntry getObfClassEntry(JarIndex jarIndex, ClassMapping classMapping) { - return new ClassEntry(getChainedOuterClassName(jarIndex, classMapping.getObfName())); + return getChainedOuterClassName(jarIndex, new ClassEntry(classMapping.getObfFullName())); } - private static String getChainedOuterClassName(JarIndex jarIndex, String obfClassName) { + public static ClassEntry getChainedOuterClassName(JarIndex jarIndex, ClassEntry obfClassEntry) { // lookup the chain of outer classes - List obfOuterClassNames = Lists.newArrayList(); - String checkName = obfClassName; + List obfClassChain = Lists.newArrayList(obfClassEntry); + ClassEntry checkClassEntry = obfClassEntry; while (true) { - - // if this class name has a package, then it can't be an inner class - if (!new ClassEntry(checkName).isInDefaultPackage()) { - break; - } - - String obfOuterClassName = jarIndex.getOuterClass(checkName); - if (obfOuterClassName != null) { - obfOuterClassNames.add(obfOuterClassName); - checkName = obfOuterClassName; + ClassEntry obfOuterClassEntry = jarIndex.getOuterClass(checkClassEntry); + if (obfOuterClassEntry != null) { + obfClassChain.add(obfOuterClassEntry); + checkClassEntry = obfOuterClassEntry; } else { break; } @@ -51,12 +45,15 @@ public class EntryFactory { // build the chained class name StringBuilder buf = new StringBuilder(); - for (int i=obfOuterClassNames.size()-1; i>=0; i--) { - buf.append(obfOuterClassNames.get(i)); - buf.append("$"); + for (int i=obfClassChain.size()-1; i>=0; i--) { + if (buf.length() == 0) { + buf.append(obfClassChain.get(i).getName()); + } else { + buf.append("$"); + buf.append(obfClassChain.get(i).getSimpleName()); + } } - buf.append(obfClassName); - return buf.toString(); + return new ClassEntry(buf.toString()); } public static ClassEntry getDeobfClassEntry(ClassMapping classMapping) { -- cgit v1.2.3