001package io.ebean.enhance.querybean; 002 003import io.ebean.enhance.asm.ClassVisitor; 004import io.ebean.enhance.asm.Label; 005import io.ebean.enhance.asm.Opcodes; 006 007import static io.ebean.enhance.common.EnhanceConstants.INIT; 008import static io.ebean.enhance.common.EnhanceConstants.L_OBJECT; 009import static io.ebean.enhance.common.EnhanceConstants.L_STRING; 010 011/** 012 * Changes the existing constructor to remove all the field initialisation as these are going to be 013 * initialised lazily by calls to our generated methods. 014 */ 015public class TypeQueryAssocMainConstructor extends BaseConstructorAdapter implements Opcodes, Constants { 016 017 private final ClassInfo classInfo; 018 019 private final ClassVisitor cv; 020 021 private final String desc; 022 023 private final String signature; 024 025 /** 026 * Construct for a query bean class given its associated entity bean domain class and a class visitor. 027 */ 028 public TypeQueryAssocMainConstructor(ClassInfo classInfo, ClassVisitor cv, String desc, String signature) { 029 super(); 030 this.cv = cv; 031 this.classInfo = classInfo; 032 this.desc = desc; 033 this.signature = signature; 034 } 035 036 @Override 037 public void visitCode() { 038 039 mv = cv.visitMethod(ACC_PUBLIC, INIT, desc, signature, null); 040 mv.visitCode(); 041 Label l0 = new Label(); 042 mv.visitLabel(l0); 043 mv.visitLineNumber(1, l0); 044 mv.visitVarInsn(ALOAD, 0); 045 mv.visitVarInsn(ALOAD, 1); 046 mv.visitVarInsn(ALOAD, 2); 047 mv.visitVarInsn(ALOAD, 3); 048 mv.visitMethodInsn(INVOKESPECIAL, TQ_ASSOC_BEAN, INIT, "(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;)V", false); 049 Label l1 = new Label(); 050 mv.visitLabel(l1); 051 mv.visitLineNumber(2, l1); 052 mv.visitInsn(RETURN); 053 Label l2 = new Label(); 054 mv.visitLabel(l2); 055 mv.visitLocalVariable("this", "L" + classInfo.getClassName() + ";", "L" + classInfo.getClassName() + "<TR;>;", l0, l2, 0); 056 mv.visitLocalVariable("name", L_STRING, null, l0, l2, 1); 057 mv.visitLocalVariable("root", L_OBJECT, "TR;", l0, l2, 2); 058 mv.visitLocalVariable("prefix", L_STRING, null, l0, l2, 3); 059 mv.visitLocalVariable("depth", "I", null, l0, l2, 4); 060 mv.visitMaxs(4, 5); 061 mv.visitEnd(); 062 } 063 064}