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