From 2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 19 May 2018 17:02:46 +0200 Subject: Initial port to ASM --- .../java/cuchaz/enigma/bytecode/AccessFlags.java | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/main/java/cuchaz/enigma/bytecode/AccessFlags.java (limited to 'src/main/java/cuchaz/enigma/bytecode/AccessFlags.java') diff --git a/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java new file mode 100644 index 0000000..0999abf --- /dev/null +++ b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java @@ -0,0 +1,79 @@ +package cuchaz.enigma.bytecode; + +import org.objectweb.asm.Opcodes; + +import java.lang.reflect.Modifier; + +public class AccessFlags { + private static final int SYNTHETIC_FLAG = 0x00001000; + private static final int BRIDGED_FLAG = 0x00000040; + + private int flags; + + public AccessFlags(int flags) { + this.flags = flags; + } + + public boolean isPrivate() { + return Modifier.isPrivate(this.flags); + } + + public boolean isProtected() { + return Modifier.isProtected(this.flags); + } + + public boolean isPublic() { + return Modifier.isPublic(this.flags); + } + + public boolean isSynthetic() { + return (this.flags & SYNTHETIC_FLAG) != 0; + } + + public boolean isStatic() { + return Modifier.isStatic(this.flags); + } + + public AccessFlags setPrivate() { + this.setVisibility(Opcodes.ACC_PRIVATE); + return this; + } + + public AccessFlags setProtected() { + this.setVisibility(Opcodes.ACC_PROTECTED); + return this; + } + + public AccessFlags setPublic() { + this.setVisibility(Opcodes.ACC_PUBLIC); + return this; + } + + public AccessFlags setBridged() { + this.setVisibility(BRIDGED_FLAG); + return this; + } + + public void setVisibility(int visibility) { + this.resetVisibility(); + this.flags |= visibility; + } + + private void resetVisibility() { + this.flags &= ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED | Opcodes.ACC_PUBLIC); + } + + public int getFlags() { + return this.flags; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof AccessFlags && ((AccessFlags) obj).flags == flags; + } + + @Override + public int hashCode() { + return flags; + } +} -- cgit v1.2.3 From 8e7453727ff059c8f1db7f89f6793d22cbd5e6fc Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 19 May 2018 18:02:29 +0200 Subject: Annotation + inner class translation --- src/main/java/cuchaz/enigma/bytecode/AccessFlags.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/main/java/cuchaz/enigma/bytecode/AccessFlags.java') diff --git a/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java index 0999abf..152f462 100644 --- a/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java +++ b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java @@ -5,6 +5,9 @@ import org.objectweb.asm.Opcodes; import java.lang.reflect.Modifier; public class AccessFlags { + public static final AccessFlags PUBLIC = new AccessFlags(Modifier.PUBLIC); + public static final AccessFlags PUBLIC_STATIC_FINAL = new AccessFlags(Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL); + private static final int SYNTHETIC_FLAG = 0x00001000; private static final int BRIDGED_FLAG = 0x00000040; -- cgit v1.2.3 From 732ae7336ef91e418adec6eec5233b20876cc41d Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 24 Jun 2018 19:50:40 +0200 Subject: Fix enum parameter index offset --- src/main/java/cuchaz/enigma/bytecode/AccessFlags.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/main/java/cuchaz/enigma/bytecode/AccessFlags.java') diff --git a/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java index 152f462..21b2489 100644 --- a/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java +++ b/src/main/java/cuchaz/enigma/bytecode/AccessFlags.java @@ -5,12 +5,6 @@ import org.objectweb.asm.Opcodes; import java.lang.reflect.Modifier; public class AccessFlags { - public static final AccessFlags PUBLIC = new AccessFlags(Modifier.PUBLIC); - public static final AccessFlags PUBLIC_STATIC_FINAL = new AccessFlags(Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL); - - private static final int SYNTHETIC_FLAG = 0x00001000; - private static final int BRIDGED_FLAG = 0x00000040; - private int flags; public AccessFlags(int flags) { @@ -30,13 +24,17 @@ public class AccessFlags { } public boolean isSynthetic() { - return (this.flags & SYNTHETIC_FLAG) != 0; + return (this.flags & Opcodes.ACC_SYNTHETIC) != 0; } public boolean isStatic() { return Modifier.isStatic(this.flags); } + public boolean isEnum() { + return (flags & Opcodes.ACC_ENUM) != 0; + } + public AccessFlags setPrivate() { this.setVisibility(Opcodes.ACC_PRIVATE); return this; @@ -53,7 +51,7 @@ public class AccessFlags { } public AccessFlags setBridged() { - this.setVisibility(BRIDGED_FLAG); + this.setVisibility(Opcodes.ACC_BRIDGE); return this; } -- cgit v1.2.3