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