diff options
| author | 2016-10-30 23:37:29 +0100 | |
|---|---|---|
| committer | 2016-10-30 23:37:29 +0100 | |
| commit | 6235bfc5ab85cdd471e315c52c413991fb9dbddf (patch) | |
| tree | f8d726850a60786176f999952c2e9f7c83e5ccbd /src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java | |
| parent | Fix order of packages, hanging of Enigma and classes nodes not renamed when p... (diff) | |
| download | enigma-fork-6235bfc5ab85cdd471e315c52c413991fb9dbddf.tar.gz enigma-fork-6235bfc5ab85cdd471e315c52c413991fb9dbddf.tar.xz enigma-fork-6235bfc5ab85cdd471e315c52c413991fb9dbddf.zip | |
BREAKING CHANGE: Implement modifier transformer
Known Bugs:
- Inner class modifier isn't saved to mapping
- Inner class modifier isn't applied to bytecode
Diffstat (limited to 'src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java b/src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java index 6d92610..6e2a29d 100644 --- a/src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java +++ b/src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java | |||
| @@ -15,22 +15,22 @@ import com.google.common.collect.Lists; | |||
| 15 | import java.util.Collection; | 15 | import java.util.Collection; |
| 16 | import java.util.List; | 16 | import java.util.List; |
| 17 | 17 | ||
| 18 | import cuchaz.enigma.Deobfuscator; | ||
| 18 | import cuchaz.enigma.analysis.JarIndex; | 19 | import cuchaz.enigma.analysis.JarIndex; |
| 19 | import cuchaz.enigma.mapping.BehaviorEntry; | 20 | import cuchaz.enigma.mapping.*; |
| 20 | import cuchaz.enigma.mapping.ClassEntry; | 21 | import javassist.ClassPool; |
| 21 | import cuchaz.enigma.mapping.EntryFactory; | ||
| 22 | import javassist.CtClass; | 22 | import javassist.CtClass; |
| 23 | import javassist.bytecode.AccessFlag; | 23 | import javassist.NotFoundException; |
| 24 | import javassist.bytecode.ConstPool; | 24 | import javassist.bytecode.*; |
| 25 | import javassist.bytecode.EnclosingMethodAttribute; | ||
| 26 | import javassist.bytecode.InnerClassesAttribute; | ||
| 27 | 25 | ||
| 28 | public class InnerClassWriter { | 26 | public class InnerClassWriter { |
| 29 | 27 | ||
| 30 | private JarIndex index; | 28 | private JarIndex index; |
| 29 | private Translator deobfuscatorTranslator; | ||
| 31 | 30 | ||
| 32 | public InnerClassWriter(JarIndex index) { | 31 | public InnerClassWriter(JarIndex index, Translator deobfuscatorTranslator) { |
| 33 | this.index = index; | 32 | this.index = index; |
| 33 | this.deobfuscatorTranslator = deobfuscatorTranslator; | ||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | public void write(CtClass c) { | 36 | public void write(CtClass c) { |
| @@ -96,6 +96,29 @@ public class InnerClassWriter { | |||
| 96 | } | 96 | } |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | // FIXME: modiffier is not applied to inner class | ||
| 100 | public static void changeModifier(CtClass c, InnerClassesAttribute attr, Translator translator) | ||
| 101 | { | ||
| 102 | ClassPool pool = c.getClassPool(); | ||
| 103 | for (int i = 0; i < attr.tableLength(); i++) { | ||
| 104 | |||
| 105 | String innerName = attr.innerClass(i); | ||
| 106 | // get the inner class full name (which has already been translated) | ||
| 107 | ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(innerName)); | ||
| 108 | try | ||
| 109 | { | ||
| 110 | CtClass innerClass = pool.get(innerName); | ||
| 111 | Mappings.EntryModifier modifier = translator.getModifier(classEntry); | ||
| 112 | if (modifier != null && modifier != Mappings.EntryModifier.UNCHANGED) | ||
| 113 | ClassRenamer.applyModifier(innerClass, modifier); | ||
| 114 | } catch (NotFoundException e) | ||
| 115 | { | ||
| 116 | // This shouldn't be possible in theory | ||
| 117 | //e.printStackTrace(); | ||
| 118 | } | ||
| 119 | } | ||
| 120 | } | ||
| 121 | |||
| 99 | private void writeInnerClass(InnerClassesAttribute attr, List<ClassEntry> obfClassChain, ClassEntry obfClassEntry) { | 122 | private void writeInnerClass(InnerClassesAttribute attr, List<ClassEntry> obfClassChain, ClassEntry obfClassEntry) { |
| 100 | 123 | ||
| 101 | // get the new inner class name | 124 | // get the new inner class name |