diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/bytecode/ClassRenamer.java | 42 |
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 | ||
| 20 | import cuchaz.enigma.mapping.ClassEntry; | 20 | import cuchaz.enigma.mapping.ClassEntry; |
| 21 | import cuchaz.enigma.mapping.ClassNameReplacer; | 21 | import cuchaz.enigma.mapping.ClassNameReplacer; |
| 22 | import cuchaz.enigma.mapping.Mappings; | ||
| 22 | import cuchaz.enigma.mapping.Translator; | 23 | import cuchaz.enigma.mapping.Translator; |
| 23 | import javassist.CtClass; | 24 | import javassist.*; |
| 24 | import javassist.bytecode.*; | 25 | import javassist.bytecode.*; |
| 25 | import javassist.bytecode.SignatureAttribute.*; | 26 | import 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 |