Class[] types = constructor.getParameterTypes(); List typeList = new ArrayList(types.length + 2); typeList.addAll(Arrays.asList(types)); typeList.add(MethodInterceptor.class); if (delegating) { typeList.add(Object.class); } Class[] argTypes = (Class[])typeList.toArray(new Class[typeList.size()]); constructorTypes.add(argTypes);  begin_constructor(argTypes);
begin_constructor(constructor);
    private void generateConstructors() throws NoSuchMethodException {        constructorTypes = new ArrayList(constructorList.size());        for (Iterator i = constructorList.iterator(); i.hasNext();) {            Constructor constructor = (Constructor)i.next();            Class[] types = constructor.getParameterTypes();            List typeList = new ArrayList(types.length + 2);            typeList.addAll(Arrays.asList(types));            typeList.add(MethodInterceptor.class);            if (delegating) {                typeList.add(Object.class);            }            Class[] argTypes = (Class[])typeList.toArray(new Class[typeList.size()]);            constructorTypes.add(argTypes);            begin_constructor(argTypes);            load_this();            dup();            load_arg(types.length);            putfield(INTERCEPTOR_FIELD);                        if (delegating) {                dup();                load_arg(types.length + 1);                checkcast(getSuperclass());                putfield(DELEGATE_FIELD);            }            load_args(0, types.length);            super_invoke(constructor);            return_value();                   end_method();        }    }