Java 类org.mockito.asm.ClassVisitor 实例源码

项目:mockito-cglib    文件:BeanGenerator.java   
public void generateClass(ClassVisitor v) throws Exception {
    int size = props.size();
    String[] names = (String[])props.keySet().toArray(new String[size]);
    Type[] types = new Type[size];
    for (int i = 0; i < size; i++) {
        types[i] = (Type)props.get(names[i]);
    }
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   superclass != null ? Type.getType(superclass) : Constants.TYPE_OBJECT,
                   null,
                   null);
    EmitUtils.null_constructor(ce);
    EmitUtils.add_properties(ce, names, types);
    ce.end_class();
}
项目:mockito-cglib    文件:BulkBeanEmitter.java   
public BulkBeanEmitter(ClassVisitor v,
                       String className,
                       Class target,
                       String[] getterNames,
                       String[] setterNames,
                       Class[] types) {
    super(v);

    Method[] getters = new Method[getterNames.length];
    Method[] setters = new Method[setterNames.length];
    validate(target, getterNames, setterNames, types, getters, setters);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BULK_BEAN, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    generateGet(target, getters);
    generateSet(target, setters);
    end_class();
}
项目:mockito-cglib    文件:InterfaceMaker.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC | Constants.ACC_INTERFACE,
                   getClassName(),
                   null,
                   null,
                   Constants.SOURCE_FILE);
    for (Iterator it = signatures.keySet().iterator(); it.hasNext();) {
        Signature sig = (Signature)it.next();
        Type[] exceptions = (Type[])signatures.get(sig);
        ce.begin_method(Constants.ACC_PUBLIC | Constants.ACC_ABSTRACT,
                        sig,
                        exceptions).end_method();
    }
    ce.end_class();
}
项目:mockito-cglib    文件:StringSwitcher.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   STRING_SWITCHER,
                   null,
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);
    final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, INT_VALUE, null);
    e.load_arg(0);
    final List stringList = Arrays.asList(strings);
    int style = fixedInput ? Constants.SWITCH_STYLE_HASHONLY : Constants.SWITCH_STYLE_HASH;
    EmitUtils.string_switch(e, strings, style, new ObjectSwitchCallback() {
        public void processCase(Object key, Label end) {
            e.push(ints[stringList.indexOf(key)]);
            e.return_value();
        }
        public void processDefault() {
            e.push(-1);
            e.return_value();
        }
    });
    e.end_method();
    ce.end_class();
}
项目:astor    文件:BeanGenerator.java   
public void generateClass(ClassVisitor v) throws Exception {
    int size = props.size();
    String[] names = (String[])props.keySet().toArray(new String[size]);
    Type[] types = new Type[size];
    for (int i = 0; i < size; i++) {
        types[i] = (Type)props.get(names[i]);
    }
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   superclass != null ? Type.getType(superclass) : Constants.TYPE_OBJECT,
                   null,
                   null);
    EmitUtils.null_constructor(ce);
    EmitUtils.add_properties(ce, names, types);
    ce.end_class();
}
项目:astor    文件:BulkBeanEmitter.java   
public BulkBeanEmitter(ClassVisitor v,
                       String className,
                       Class target,
                       String[] getterNames,
                       String[] setterNames,
                       Class[] types) {
    super(v);

    Method[] getters = new Method[getterNames.length];
    Method[] setters = new Method[setterNames.length];
    validate(target, getterNames, setterNames, types, getters, setters);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BULK_BEAN, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    generateGet(target, getters);
    generateSet(target, setters);
    end_class();
}
项目:astor    文件:InterfaceMaker.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC | Constants.ACC_INTERFACE,
                   getClassName(),
                   null,
                   null,
                   Constants.SOURCE_FILE);
    for (Iterator it = signatures.keySet().iterator(); it.hasNext();) {
        Signature sig = (Signature)it.next();
        Type[] exceptions = (Type[])signatures.get(sig);
        ce.begin_method(Constants.ACC_PUBLIC | Constants.ACC_ABSTRACT,
                        sig,
                        exceptions).end_method();
    }
    ce.end_class();
}
项目:astor    文件:StringSwitcher.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   STRING_SWITCHER,
                   null,
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);
    final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, INT_VALUE, null);
    e.load_arg(0);
    final List stringList = Arrays.asList(strings);
    int style = fixedInput ? Constants.SWITCH_STYLE_HASHONLY : Constants.SWITCH_STYLE_HASH;
    EmitUtils.string_switch(e, strings, style, new ObjectSwitchCallback() {
        public void processCase(Object key, Label end) {
            e.push(ints[stringList.indexOf(key)]);
            e.return_value();
        }
        public void processDefault() {
            e.push(-1);
            e.return_value();
        }
    });
    e.end_method();
    ce.end_class();
}
项目:astor    文件:BeanGenerator.java   
public void generateClass(ClassVisitor v) throws Exception {
    int size = props.size();
    String[] names = (String[])props.keySet().toArray(new String[size]);
    Type[] types = new Type[size];
    for (int i = 0; i < size; i++) {
        types[i] = (Type)props.get(names[i]);
    }
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   superclass != null ? Type.getType(superclass) : Constants.TYPE_OBJECT,
                   null,
                   null);
    EmitUtils.null_constructor(ce);
    EmitUtils.add_properties(ce, names, types);
    ce.end_class();
}
项目:astor    文件:BulkBeanEmitter.java   
public BulkBeanEmitter(ClassVisitor v,
                       String className,
                       Class target,
                       String[] getterNames,
                       String[] setterNames,
                       Class[] types) {
    super(v);

    Method[] getters = new Method[getterNames.length];
    Method[] setters = new Method[setterNames.length];
    validate(target, getterNames, setterNames, types, getters, setters);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BULK_BEAN, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    generateGet(target, getters);
    generateSet(target, setters);
    end_class();
}
项目:astor    文件:InterfaceMaker.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC | Constants.ACC_INTERFACE,
                   getClassName(),
                   null,
                   null,
                   Constants.SOURCE_FILE);
    for (Iterator it = signatures.keySet().iterator(); it.hasNext();) {
        Signature sig = (Signature)it.next();
        Type[] exceptions = (Type[])signatures.get(sig);
        ce.begin_method(Constants.ACC_PUBLIC | Constants.ACC_ABSTRACT,
                        sig,
                        exceptions).end_method();
    }
    ce.end_class();
}
项目:astor    文件:StringSwitcher.java   
public void generateClass(ClassVisitor v) throws Exception {
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   STRING_SWITCHER,
                   null,
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);
    final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, INT_VALUE, null);
    e.load_arg(0);
    final List stringList = Arrays.asList(strings);
    int style = fixedInput ? Constants.SWITCH_STYLE_HASHONLY : Constants.SWITCH_STYLE_HASH;
    EmitUtils.string_switch(e, strings, style, new ObjectSwitchCallback() {
        public void processCase(Object key, Label end) {
            e.push(ints[stringList.indexOf(key)]);
            e.return_value();
        }
        public void processDefault() {
            e.push(-1);
            e.return_value();
        }
    });
    e.end_method();
    ce.end_class();
}
项目:mockito-cglib    文件:BeanMapEmitter.java   
public BeanMapEmitter(ClassVisitor v, String className, Class type, int require) {
    super(v);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BEAN_MAP, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor();

    Map getters = makePropertyMap(ReflectUtils.getBeanGetters(type));
    Map setters = makePropertyMap(ReflectUtils.getBeanSetters(type));
    Map allProps = new HashMap();
    allProps.putAll(getters);
    allProps.putAll(setters);

    if (require != 0) {
        for (Iterator it = allProps.keySet().iterator(); it.hasNext();) {
            String name = (String)it.next();
            if ((((require & BeanMap.REQUIRE_GETTER) != 0) && !getters.containsKey(name)) ||
                (((require & BeanMap.REQUIRE_SETTER) != 0) && !setters.containsKey(name))) {
                it.remove();
                getters.remove(name);
                setters.remove(name);
            }
        }
    }
    generateGet(type, getters);
    generatePut(type, setters);

    String[] allNames = getNames(allProps);
    generateKeySet(allNames);
    generateGetPropertyType(allProps, allNames);
    end_class();
}
项目:mockito-cglib    文件:Mixin.java   
public void generateClass(ClassVisitor v) {
    switch (style) {
    case STYLE_INTERFACES:
        new MixinEmitter(v, getClassName(), classes, route);
        break;
    case STYLE_BEANS:
        new MixinBeanEmitter(v, getClassName(), classes);
        break;
    case STYLE_EVERYTHING:
        new MixinEverythingEmitter(v, getClassName(), classes);
        break;
    }
}
项目:mockito-cglib    文件:MulticastDelegate.java   
public void generateClass(ClassVisitor cv) {
    final MethodInfo method = ReflectUtils.getMethodInfo(ReflectUtils.findInterfaceMethod(iface));

    ClassEmitter ce = new ClassEmitter(cv);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   MULTICAST_DELEGATE,
                   new Type[]{ Type.getType(iface) },
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);

    // generate proxied method
    emitProxy(ce, method);

    // newInstance
    CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, null);
    e.new_instance_this();
    e.dup();
    e.invoke_constructor_this();
    e.return_value();
    e.end_method();

    // add
    e = ce.begin_method(Constants.ACC_PUBLIC, ADD_DELEGATE, null);
    e.load_this();
    e.load_arg(0);
    e.checkcast(Type.getType(iface));
    e.invoke_virtual_this(ADD_HELPER);
    e.return_value();
    e.end_method();

    ce.end_class();
}
项目:mockito-cglib    文件:ParallelSorter.java   
public void generateClass(ClassVisitor v) throws Exception {
    if (arrays.length == 0) {
        throw new IllegalArgumentException("No arrays specified to sort");
    }
    for (int i = 0; i < arrays.length; i++) {
        if (!arrays[i].getClass().isArray()) {
            throw new IllegalArgumentException(arrays[i].getClass() + " is not an array");
        }
    }
    new ParallelSorterEmitter(v, getClassName(), arrays);
}
项目:mockito-cglib    文件:ParallelSorterEmitter.java   
public ParallelSorterEmitter(ClassVisitor v, String className, Object[] arrays) {
    super(v);
    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, PARALLEL_SORTER, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor(arrays);
    generateSwap(arrays);
    end_class();
}
项目:mockito-cglib    文件:MethodNode.java   
/**
 * Makes the given class visitor visit this method.
 * 
 * @param cv a class visitor.
 */
public void accept(final ClassVisitor cv) {
    String[] exceptions = new String[this.exceptions.size()];
    this.exceptions.toArray(exceptions);
    MethodVisitor mv = cv.visitMethod(access,
            name,
            desc,
            signature,
            exceptions);
    if (mv != null) {
        accept(mv);
    }
}
项目:astor    文件:BeanMapEmitter.java   
public BeanMapEmitter(ClassVisitor v, String className, Class type, int require) {
    super(v);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BEAN_MAP, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor();

    Map getters = makePropertyMap(ReflectUtils.getBeanGetters(type));
    Map setters = makePropertyMap(ReflectUtils.getBeanSetters(type));
    Map allProps = new HashMap();
    allProps.putAll(getters);
    allProps.putAll(setters);

    if (require != 0) {
        for (Iterator it = allProps.keySet().iterator(); it.hasNext();) {
            String name = (String)it.next();
            if ((((require & BeanMap.REQUIRE_GETTER) != 0) && !getters.containsKey(name)) ||
                (((require & BeanMap.REQUIRE_SETTER) != 0) && !setters.containsKey(name))) {
                it.remove();
                getters.remove(name);
                setters.remove(name);
            }
        }
    }
    generateGet(type, getters);
    generatePut(type, setters);

    String[] allNames = getNames(allProps);
    generateKeySet(allNames);
    generateGetPropertyType(allProps, allNames);
    end_class();
}
项目:astor    文件:Mixin.java   
public void generateClass(ClassVisitor v) {
    switch (style) {
    case STYLE_INTERFACES:
        new MixinEmitter(v, getClassName(), classes, route);
        break;
    case STYLE_BEANS:
        new MixinBeanEmitter(v, getClassName(), classes);
        break;
    case STYLE_EVERYTHING:
        new MixinEverythingEmitter(v, getClassName(), classes);
        break;
    }
}
项目:astor    文件:MulticastDelegate.java   
public void generateClass(ClassVisitor cv) {
    final MethodInfo method = ReflectUtils.getMethodInfo(ReflectUtils.findInterfaceMethod(iface));

    ClassEmitter ce = new ClassEmitter(cv);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   MULTICAST_DELEGATE,
                   new Type[]{ Type.getType(iface) },
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);

    // generate proxied method
    emitProxy(ce, method);

    // newInstance
    CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, null);
    e.new_instance_this();
    e.dup();
    e.invoke_constructor_this();
    e.return_value();
    e.end_method();

    // add
    e = ce.begin_method(Constants.ACC_PUBLIC, ADD_DELEGATE, null);
    e.load_this();
    e.load_arg(0);
    e.checkcast(Type.getType(iface));
    e.invoke_virtual_this(ADD_HELPER);
    e.return_value();
    e.end_method();

    ce.end_class();
}
项目:astor    文件:ParallelSorter.java   
public void generateClass(ClassVisitor v) throws Exception {
    if (arrays.length == 0) {
        throw new IllegalArgumentException("No arrays specified to sort");
    }
    for (int i = 0; i < arrays.length; i++) {
        if (!arrays[i].getClass().isArray()) {
            throw new IllegalArgumentException(arrays[i].getClass() + " is not an array");
        }
    }
    new ParallelSorterEmitter(v, getClassName(), arrays);
}
项目:astor    文件:ParallelSorterEmitter.java   
public ParallelSorterEmitter(ClassVisitor v, String className, Object[] arrays) {
    super(v);
    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, PARALLEL_SORTER, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor(arrays);
    generateSwap(arrays);
    end_class();
}
项目:astor    文件:MethodNode.java   
/**
 * Makes the given class visitor visit this method.
 * 
 * @param cv a class visitor.
 */
public void accept(final ClassVisitor cv) {
    String[] exceptions = new String[this.exceptions.size()];
    this.exceptions.toArray(exceptions);
    MethodVisitor mv = cv.visitMethod(access,
            name,
            desc,
            signature,
            exceptions);
    if (mv != null) {
        accept(mv);
    }
}
项目:astor    文件:BeanMapEmitter.java   
public BeanMapEmitter(ClassVisitor v, String className, Class type, int require) {
    super(v);

    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BEAN_MAP, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor();

    Map getters = makePropertyMap(ReflectUtils.getBeanGetters(type));
    Map setters = makePropertyMap(ReflectUtils.getBeanSetters(type));
    Map allProps = new HashMap();
    allProps.putAll(getters);
    allProps.putAll(setters);

    if (require != 0) {
        for (Iterator it = allProps.keySet().iterator(); it.hasNext();) {
            String name = (String)it.next();
            if ((((require & BeanMap.REQUIRE_GETTER) != 0) && !getters.containsKey(name)) ||
                (((require & BeanMap.REQUIRE_SETTER) != 0) && !setters.containsKey(name))) {
                it.remove();
                getters.remove(name);
                setters.remove(name);
            }
        }
    }
    generateGet(type, getters);
    generatePut(type, setters);

    String[] allNames = getNames(allProps);
    generateKeySet(allNames);
    generateGetPropertyType(allProps, allNames);
    end_class();
}
项目:astor    文件:Mixin.java   
public void generateClass(ClassVisitor v) {
    switch (style) {
    case STYLE_INTERFACES:
        new MixinEmitter(v, getClassName(), classes, route);
        break;
    case STYLE_BEANS:
        new MixinBeanEmitter(v, getClassName(), classes);
        break;
    case STYLE_EVERYTHING:
        new MixinEverythingEmitter(v, getClassName(), classes);
        break;
    }
}
项目:astor    文件:MulticastDelegate.java   
public void generateClass(ClassVisitor cv) {
    final MethodInfo method = ReflectUtils.getMethodInfo(ReflectUtils.findInterfaceMethod(iface));

    ClassEmitter ce = new ClassEmitter(cv);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   MULTICAST_DELEGATE,
                   new Type[]{ Type.getType(iface) },
                   Constants.SOURCE_FILE);
    EmitUtils.null_constructor(ce);

    // generate proxied method
    emitProxy(ce, method);

    // newInstance
    CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, null);
    e.new_instance_this();
    e.dup();
    e.invoke_constructor_this();
    e.return_value();
    e.end_method();

    // add
    e = ce.begin_method(Constants.ACC_PUBLIC, ADD_DELEGATE, null);
    e.load_this();
    e.load_arg(0);
    e.checkcast(Type.getType(iface));
    e.invoke_virtual_this(ADD_HELPER);
    e.return_value();
    e.end_method();

    ce.end_class();
}
项目:astor    文件:ParallelSorter.java   
public void generateClass(ClassVisitor v) throws Exception {
    if (arrays.length == 0) {
        throw new IllegalArgumentException("No arrays specified to sort");
    }
    for (int i = 0; i < arrays.length; i++) {
        if (!arrays[i].getClass().isArray()) {
            throw new IllegalArgumentException(arrays[i].getClass() + " is not an array");
        }
    }
    new ParallelSorterEmitter(v, getClassName(), arrays);
}
项目:astor    文件:ParallelSorterEmitter.java   
public ParallelSorterEmitter(ClassVisitor v, String className, Object[] arrays) {
    super(v);
    begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, PARALLEL_SORTER, null, Constants.SOURCE_FILE);
    EmitUtils.null_constructor(this);
    EmitUtils.factory_method(this, NEW_INSTANCE);
    generateConstructor(arrays);
    generateSwap(arrays);
    end_class();
}
项目:astor    文件:MethodNode.java   
/**
 * Makes the given class visitor visit this method.
 * 
 * @param cv a class visitor.
 */
public void accept(final ClassVisitor cv) {
    String[] exceptions = new String[this.exceptions.size()];
    this.exceptions.toArray(exceptions);
    MethodVisitor mv = cv.visitMethod(access,
            name,
            desc,
            signature,
            exceptions);
    if (mv != null) {
        accept(mv);
    }
}
项目:mockito-cglib    文件:AbstractClassTransformer.java   
public void setTarget(ClassVisitor target) {
    cv = target;
}
项目:mockito-cglib    文件:ClassReaderGenerator.java   
public void generateClass(ClassVisitor v) {
    r.accept(v, attrs, flags);
}
项目:mockito-cglib    文件:TransformingClassGenerator.java   
public void generateClass(ClassVisitor v) throws Exception {
    t.setTarget(v);
    gen.generateClass(t);
}
项目:mockito-cglib    文件:ClassTransformerTee.java   
public ClassTransformerTee(ClassVisitor branch) {
    super(null);
    this.branch = branch;
}
项目:mockito-cglib    文件:ClassTransformerTee.java   
public void setTarget(ClassVisitor target) { 
    cv = new ClassVisitorTee(branch, target);
}
项目:mockito-cglib    文件:ImmutableBean.java   
public void generateClass(ClassVisitor v) {
    Type targetType = Type.getType(target);
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   targetType,
                   null,
                   Constants.SOURCE_FILE);

    ce.declare_field(Constants.ACC_FINAL | Constants.ACC_PRIVATE, FIELD_NAME, targetType, null);

    CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, CSTRUCT_OBJECT, null);
    e.load_this();
    e.super_invoke_constructor();
    e.load_this();
    e.load_arg(0);
    e.checkcast(targetType);
    e.putfield(FIELD_NAME);
    e.return_value();
    e.end_method();

    PropertyDescriptor[] descriptors = ReflectUtils.getBeanProperties(target);
    Method[] getters = ReflectUtils.getPropertyMethods(descriptors, true, false);
    Method[] setters = ReflectUtils.getPropertyMethods(descriptors, false, true);

    for (int i = 0; i < getters.length; i++) {
        MethodInfo getter = ReflectUtils.getMethodInfo(getters[i]);
        e = EmitUtils.begin_method(ce, getter, Constants.ACC_PUBLIC);
        e.load_this();
        e.getfield(FIELD_NAME);
        e.invoke(getter);
        e.return_value();
        e.end_method();
    }

    for (int i = 0; i < setters.length; i++) {
        MethodInfo setter = ReflectUtils.getMethodInfo(setters[i]);
        e = EmitUtils.begin_method(ce, setter, Constants.ACC_PUBLIC);
        e.throw_exception(ILLEGAL_STATE_EXCEPTION, "Bean is immutable");
        e.end_method();
    }

    ce.end_class();
}
项目:mockito-cglib    文件:BeanMap.java   
public void generateClass(ClassVisitor v) throws Exception {
    new BeanMapEmitter(v, getClassName(), beanClass, require);
}
项目:mockito-cglib    文件:BulkBean.java   
public void generateClass(ClassVisitor v) throws Exception {
    new BulkBeanEmitter(v, getClassName(), target, getters, setters, types);
}
项目:mockito-cglib    文件:BeanCopier.java   
public void generateClass(ClassVisitor v) {
    Type sourceType = Type.getType(source);
    Type targetType = Type.getType(target);
    ClassEmitter ce = new ClassEmitter(v);
    ce.begin_class(Constants.V1_2,
                   Constants.ACC_PUBLIC,
                   getClassName(),
                   BEAN_COPIER,
                   null,
                   Constants.SOURCE_FILE);

    EmitUtils.null_constructor(ce);
    CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, COPY, null);
    PropertyDescriptor[] getters = ReflectUtils.getBeanGetters(source);
    PropertyDescriptor[] setters = ReflectUtils.getBeanGetters(target);

    Map names = new HashMap();
    for (int i = 0; i < getters.length; i++) {
        names.put(getters[i].getName(), getters[i]);
    }
    Local targetLocal = e.make_local();
    Local sourceLocal = e.make_local();
    if (useConverter) {
        e.load_arg(1);
        e.checkcast(targetType);
        e.store_local(targetLocal);
        e.load_arg(0);                
        e.checkcast(sourceType);
        e.store_local(sourceLocal);
    } else {
        e.load_arg(1);
        e.checkcast(targetType);
        e.load_arg(0);
        e.checkcast(sourceType);
    }
    for (int i = 0; i < setters.length; i++) {
        PropertyDescriptor setter = setters[i];
        PropertyDescriptor getter = (PropertyDescriptor)names.get(setter.getName());
        if (getter != null) {
            MethodInfo read = ReflectUtils.getMethodInfo(getter.getReadMethod());
            MethodInfo write = ReflectUtils.getMethodInfo(setter.getWriteMethod());
            if (useConverter) {
                Type setterType = write.getSignature().getArgumentTypes()[0];
                e.load_local(targetLocal);
                e.load_arg(2);
                e.load_local(sourceLocal);
                e.invoke(read);
                e.box(read.getSignature().getReturnType());
                EmitUtils.load_class(e, setterType);
                e.push(write.getSignature().getName());
                e.invoke_interface(CONVERTER, CONVERT);
                e.unbox_or_zero(setterType);
                e.invoke(write);
            } else if (compatible(getter, setter)) {
                e.dup2();
                e.invoke(read);
                e.invoke(write);
            }
        }
    }
    e.return_value();
    e.end_method();
    ce.end_class();
}
项目:mockito-cglib    文件:MixinBeanEmitter.java   
public MixinBeanEmitter(ClassVisitor v, String className, Class[] classes) {
    super(v, className, classes, null);
}