summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java')
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java b/src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java
index eb7e9a1..d49f13a 100644
--- a/src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java
+++ b/src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java
@@ -19,8 +19,9 @@ import java.util.Map;
19 19
20import cuchaz.enigma.mapping.ClassEntry; 20import cuchaz.enigma.mapping.ClassEntry;
21import cuchaz.enigma.mapping.ClassNameReplacer; 21import cuchaz.enigma.mapping.ClassNameReplacer;
22import cuchaz.enigma.mapping.Mappings;
22import cuchaz.enigma.mapping.Translator; 23import cuchaz.enigma.mapping.Translator;
23import javassist.CtClass; 24import javassist.*;
24import javassist.bytecode.*; 25import javassist.bytecode.*;
25import javassist.bytecode.SignatureAttribute.*; 26import javassist.bytecode.SignatureAttribute.*;
26 27
@@ -70,6 +71,41 @@ public class ClassRenamer {
70 } 71 }
71 } 72 }
72 73
74 public static void applyModifier(Object obj, Mappings.EntryModifier modifier)
75 {
76 int mod = -1;
77 if (obj instanceof CtField)
78 mod = ((CtField) obj).getModifiers();
79 else if (obj instanceof CtBehavior)
80 mod = ((CtBehavior) obj).getModifiers();
81 else if (obj instanceof CtClass)
82 mod = ((CtClass) obj).getModifiers();
83
84 if (mod != -1)
85 {
86 switch (modifier)
87 {
88 case PRIVATE:
89 mod = Modifier.setPrivate(mod);
90 break;
91 case PROTECTED:
92 mod = Modifier.setProtected(mod);
93 break;
94 case PUBLIC:
95 mod = Modifier.setPublic(mod);
96 break;
97 default:
98 break;
99 }
100 if (obj instanceof CtField)
101 ((CtField) obj).setModifiers(mod);
102 else if (obj instanceof CtBehavior)
103 ((CtBehavior) obj).setModifiers(mod);
104 else
105 ((CtClass) obj).setModifiers(mod);
106 }
107 }
108
73 public static void renameClasses(CtClass c, final Translator translator) { 109 public static void renameClasses(CtClass c, final Translator translator) {
74 renameClasses(c, className -> { 110 renameClasses(c, className -> {
75 ClassEntry entry = translator.translateEntry(new ClassEntry(className)); 111 ClassEntry entry = translator.translateEntry(new ClassEntry(className));
@@ -110,6 +146,7 @@ public class ClassRenamer {
110 146
111 // rename the constant pool (covers ClassInfo, MethodTypeInfo, and NameAndTypeInfo) 147 // rename the constant pool (covers ClassInfo, MethodTypeInfo, and NameAndTypeInfo)
112 ConstPool constPool = c.getClassFile().getConstPool(); 148 ConstPool constPool = c.getClassFile().getConstPool();
149 String className = constPool.getClassName();
113 constPool.renameClass(map); 150 constPool.renameClass(map);
114 151
115 // rename class attributes 152 // rename class attributes
@@ -140,8 +177,9 @@ public class ClassRenamer {
140 if (attr != null) { 177 if (attr != null) {
141 for (int i = 0; i < attr.tableLength(); i++) { 178 for (int i = 0; i < attr.tableLength(); i++) {
142 179
180 String innerName = attr.innerClass(i);
143 // get the inner class full name (which has already been translated) 181 // get the inner class full name (which has already been translated)
144 ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(attr.innerClass(i))); 182 ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(innerName));
145 183
146 if (attr.innerNameIndex(i) != 0) { 184 if (attr.innerNameIndex(i) != 0) {
147 // update the inner name 185 // update the inner name