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}