summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java
diff options
context:
space:
mode:
authorGravatar Thog2016-10-30 23:37:29 +0100
committerGravatar Thog2016-10-30 23:37:29 +0100
commit6235bfc5ab85cdd471e315c52c413991fb9dbddf (patch)
treef8d726850a60786176f999952c2e9f7c83e5ccbd /src/main/java/cuchaz/enigma/bytecode/InnerClassWriter.java
parentFix order of packages, hanging of Enigma and classes nodes not renamed when p... (diff)
downloadenigma-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.java39
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;
15import java.util.Collection; 15import java.util.Collection;
16import java.util.List; 16import java.util.List;
17 17
18import cuchaz.enigma.Deobfuscator;
18import cuchaz.enigma.analysis.JarIndex; 19import cuchaz.enigma.analysis.JarIndex;
19import cuchaz.enigma.mapping.BehaviorEntry; 20import cuchaz.enigma.mapping.*;
20import cuchaz.enigma.mapping.ClassEntry; 21import javassist.ClassPool;
21import cuchaz.enigma.mapping.EntryFactory;
22import javassist.CtClass; 22import javassist.CtClass;
23import javassist.bytecode.AccessFlag; 23import javassist.NotFoundException;
24import javassist.bytecode.ConstPool; 24import javassist.bytecode.*;
25import javassist.bytecode.EnclosingMethodAttribute;
26import javassist.bytecode.InnerClassesAttribute;
27 25
28public class InnerClassWriter { 26public 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