summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/bytecode
diff options
context:
space:
mode:
authorGravatar Cuchaz2015-03-30 22:00:54 -0400
committerGravatar Cuchaz2015-03-30 22:00:54 -0400
commit22cac8f1a25c7d34a94bc5e00c56c0532509071f (patch)
tree7b3784fc8eb4936c54ada9e685d551bf294e620b /src/cuchaz/enigma/bytecode
parentfix unintentional compile time transitive dependency on procyon (diff)
downloadenigma-fork-22cac8f1a25c7d34a94bc5e00c56c0532509071f.tar.gz
enigma-fork-22cac8f1a25c7d34a94bc5e00c56c0532509071f.tar.xz
enigma-fork-22cac8f1a25c7d34a94bc5e00c56c0532509071f.zip
add publifier
Diffstat (limited to 'src/cuchaz/enigma/bytecode')
-rw-r--r--src/cuchaz/enigma/bytecode/ClassPublifier.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/cuchaz/enigma/bytecode/ClassPublifier.java b/src/cuchaz/enigma/bytecode/ClassPublifier.java
new file mode 100644
index 0000000..d8162e4
--- /dev/null
+++ b/src/cuchaz/enigma/bytecode/ClassPublifier.java
@@ -0,0 +1,41 @@
1package cuchaz.enigma.bytecode;
2
3import javassist.CtBehavior;
4import javassist.CtClass;
5import javassist.CtField;
6import javassist.bytecode.AccessFlag;
7import javassist.bytecode.InnerClassesAttribute;
8
9
10public class ClassPublifier {
11
12 public static CtClass publify(CtClass c) {
13
14 // publify all the fields
15 for (CtField field : c.getDeclaredFields()) {
16 field.setModifiers(publify(field.getModifiers()));
17 }
18
19 // publify all the methods and constructors
20 for (CtBehavior behavior : c.getDeclaredBehaviors()) {
21 behavior.setModifiers(publify(behavior.getModifiers()));
22 }
23
24 // publify all the inner classes
25 InnerClassesAttribute attr = (InnerClassesAttribute)c.getClassFile().getAttribute(InnerClassesAttribute.tag);
26 if (attr != null) {
27 for (int i=0; i<attr.tableLength(); i++) {
28 attr.setAccessFlags(i, publify(attr.accessFlags(i)));
29 }
30 }
31
32 return c;
33 }
34
35 private static int publify(int flags) {
36 if (AccessFlag.isPrivate(flags) || AccessFlag.isProtected(flags)) {
37 flags = AccessFlag.setPublic(flags);
38 }
39 return flags;
40 }
41}