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 TypeQueryAssocBasicConstructor extends BaseConstructorAdapter implements Opcodes, Constants { 016 017 018 private final ClassInfo classInfo; 019 020 private final ClassVisitor cv; 021 022 private final String desc; 023 024 private final String signature; 025 026 /** 027 * Construct for a query bean class given its associated entity bean domain class and a class visitor. 028 */ 029 public TypeQueryAssocBasicConstructor(ClassInfo classInfo, ClassVisitor cv, String desc, String signature) { 030 super(); 031 this.cv = cv; 032 this.classInfo = classInfo; 033 this.desc = desc; 034 this.signature = signature; 035 } 036 037 @Override 038 public void visitCode() { 039 040 mv = cv.visitMethod(ACC_PUBLIC, INIT, desc, signature, null); 041 mv.visitCode(); 042 Label l0 = new Label(); 043 mv.visitLabel(l0); 044 mv.visitLineNumber(1, l0); 045 mv.visitVarInsn(ALOAD, 0); 046 mv.visitVarInsn(ALOAD, 1); 047 mv.visitVarInsn(ALOAD, 2); 048 mv.visitInsn(ACONST_NULL); 049 mv.visitMethodInsn(INVOKESPECIAL, TQ_ASSOC_BEAN, INIT, "(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;)V", false); 050 Label l1 = new Label(); 051 mv.visitLabel(l1); 052 mv.visitLineNumber(2, l1); 053 mv.visitInsn(RETURN); 054 Label l2 = new Label(); 055 mv.visitLabel(l2); 056 mv.visitLocalVariable("this", "L" + classInfo.getClassName() + ";", "L" + classInfo.getClassName() + "<TR;>;", l0, l2, 0); 057 mv.visitLocalVariable("name", L_STRING, null, l0, l2, 1); 058 mv.visitLocalVariable("root", L_OBJECT, "TR;", l0, l2, 2); 059 mv.visitLocalVariable("depth", "I", null, l0, l2, 3); 060 mv.visitMaxs(4, 4); 061 mv.visitEnd(); 062 } 063 064}