diff options
author | zaaarf <zaaarf@proton.me> | 2023-03-01 22:02:29 +0100 |
---|---|---|
committer | zaaarf <zaaarf@proton.me> | 2023-03-01 22:02:29 +0100 |
commit | 9a355f33af77ea22776a943c6d12058cc61cce2a (patch) | |
tree | 828cb9c6c4d137231213980a9cde543dd5630a21 /src | |
parent | 65d732c0790a553d00f15ba54df082bf3171e506 (diff) |
feat: replaced put(), get() and call() with InsnNode extensions
Diffstat (limited to 'src')
3 files changed, 53 insertions, 52 deletions
diff --git a/src/main/java/ftbsc/lll/tools/StackTools.java b/src/main/java/ftbsc/lll/tools/StackTools.java index ef34155..6816860 100644 --- a/src/main/java/ftbsc/lll/tools/StackTools.java +++ b/src/main/java/ftbsc/lll/tools/StackTools.java @@ -86,56 +86,4 @@ public class StackTools implements Opcodes { method.localVariables.add(variable); return targetIndex; } - - /** - * Builds a node setting the given {@link FieldProxy} to the value currently - * on top of the stack. - * @implSpec if the field is not static, you are to load the containing - * object onto the stack the value you want to assign. - * @param f a {@link FieldProxy} representing the field to put. - * @return a {@link FieldInsnNode} representing the built node. - * @since 0.3.0 - */ - public static FieldInsnNode put(FieldProxy f) { - return new FieldInsnNode( - Modifier.isStatic(f.getModifiers()) ? PUTSTATIC : PUTFIELD, - f.getParent().replace('.', '/'), - f.getSrgName(), - f.getDescriptor() - ); - } - - /** - * Builds a node loading the given {@link FieldProxy} onto the stack. - * @implSpec if the field is not static, you are to load the containing - * object onto the stack before calling this. - * @param f a {@link FieldProxy} representing the field to load. - * @return a {@link FieldInsnNode} representing the built node. - * @since 0.3.0 - */ - public static FieldInsnNode get(FieldProxy f) { - return new FieldInsnNode( - Modifier.isStatic(f.getModifiers()) ? GETSTATIC : GETFIELD, - f.getParent().replace('.', '/'), - f.getSrgName(), - f.getDescriptor() - ); - } - - /** - * Builds a node calling the given {@link MethodProxy} with the given opcode. - * @param m a {@link MethodProxy} representing the method to call. - * @param opcode the opcode to use to call, must be one of INVOKEDYNAMIC, - * INVOKESPECIAL, INVOKEINTERFACE, INVOKESTATIC or INVOKEVIRTUAL. - * @return a {@link MethodInsnNode} representing the built node. - * @since 0.3.0 - */ - public static MethodInsnNode call(MethodProxy m, int opcode) { - return new MethodInsnNode( - opcode, - m.getParent().replace('.', '/'), - m.getSrgName(), - m.getDescriptor() - ); - } } diff --git a/src/main/java/ftbsc/lll/tools/nodes/FieldProxyInsnNode.java b/src/main/java/ftbsc/lll/tools/nodes/FieldProxyInsnNode.java new file mode 100644 index 0000000..34a0d67 --- /dev/null +++ b/src/main/java/ftbsc/lll/tools/nodes/FieldProxyInsnNode.java @@ -0,0 +1,26 @@ +package ftbsc.lll.tools.nodes; + +import ftbsc.lll.proxies.FieldProxy; +import org.objectweb.asm.tree.FieldInsnNode; + +/** + * Overrides the {@link FieldInsnNode} to add a constructor + * taking in a {@link FieldProxy}. + * @since 0.3.0 + */ +public class FieldProxyInsnNode extends FieldInsnNode { + /** + * Constructs a new {@link FieldInsnNode} starting + * from a {@link FieldProxy}. + * @param opcode the opcode, must be one of GETSTATIC, PUTSTATIC, + * GETFIELD or PUTFIELD + */ + public FieldProxyInsnNode(int opcode, FieldProxy proxy) { + super( + opcode, + proxy.getParent().replace('.', '/'), + proxy.getSrgName(), + proxy.getDescriptor() + ); + } +}
\ No newline at end of file diff --git a/src/main/java/ftbsc/lll/tools/nodes/MethodProxyInsnNode.java b/src/main/java/ftbsc/lll/tools/nodes/MethodProxyInsnNode.java new file mode 100644 index 0000000..10c091e --- /dev/null +++ b/src/main/java/ftbsc/lll/tools/nodes/MethodProxyInsnNode.java @@ -0,0 +1,27 @@ +package ftbsc.lll.tools.nodes; + +import ftbsc.lll.proxies.MethodProxy; +import org.objectweb.asm.tree.MethodInsnNode; + +/** + * Overrides the {@link MethodInsnNode} to add a constructor + * taking in a {@link MethodProxy}. + * @since 0.3.0 + */ +public class MethodProxyInsnNode extends MethodInsnNode { + + /** + * Constructs a new {@link MethodInsnNode} starting + * from a {@link MethodProxy}. + * @param opcode the opcode, must be one of INVOKEVIRTUAL, + * INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE + */ + public MethodProxyInsnNode(MethodProxy m, int opcode) { + super( + opcode, + m.getParent().replace('.', '/'), + m.getSrgName(), + m.getDescriptor() + ); + } +}
\ No newline at end of file |