package me.tomassetti.bytecode_generation.pushop;
import me.tomassetti.bytecode_generation.BytecodeSequence;
import me.tomassetti.jvm.JvmFieldDefinition;
import org.objectweb.asm.MethodVisitor;
import static org.objectweb.asm.Opcodes.GETFIELD;
public class PushInstanceField extends BytecodeSequence {
private JvmFieldDefinition fieldDefinition;
private boolean pushThis;
public PushInstanceField(JvmFieldDefinition fieldDefinition, boolean pushThis) {
this.fieldDefinition = fieldDefinition;
this.pushThis = pushThis;
}
public PushInstanceField(JvmFieldDefinition fieldDefinition) {
this(fieldDefinition, true);
}
@Override
public void operate(MethodVisitor mv) {
if (fieldDefinition.isStatic()) {
throw new UnsupportedOperationException();
} else {
if (pushThis) {
PushThis.getInstance().operate(mv);
}
mv.visitFieldInsn(GETFIELD, fieldDefinition.getOwnerInternalName(), fieldDefinition.getFieldName(), fieldDefinition.getDescriptor());
}
}
}