001package io.ebean.enhance.querybean;
002
003import io.ebean.enhance.common.EnhanceContext;
004import io.ebean.enhance.asm.MethodVisitor;
005import io.ebean.enhance.asm.Opcodes;
006
007/**
008 * Adapter that changes GETFIELD calls to type query beans to instead use the generated
009 * 'property access' methods.
010 */
011public class MethodAdapter extends MethodVisitor implements Opcodes {
012
013  private final EnhanceContext enhanceContext;
014
015  private final ClassInfo classInfo;
016
017  public MethodAdapter(MethodVisitor mv, EnhanceContext enhanceContext, ClassInfo classInfo) {
018    super(ASM5, mv);
019    this.enhanceContext = enhanceContext;
020    this.classInfo = classInfo;
021  }
022
023  @Override
024  public void visitFieldInsn(int opcode, String owner, String name, String desc) {
025
026    if (opcode == GETFIELD && enhanceContext.isQueryBean(owner)) {
027      classInfo.addGetFieldIntercept(owner, name);
028      mv.visitMethodInsn(INVOKEVIRTUAL, owner, "_" + name, "()" + desc, false);
029    } else {
030      super.visitFieldInsn(opcode, owner, name, desc);
031    }
032  }
033
034}