Package cn.wensiqun.asmsupport.creator

Source Code of cn.wensiqun.asmsupport.creator.ClassCreator

package cn.wensiqun.asmsupport.creator;


import org.objectweb.asm.Opcodes;

import cn.wensiqun.asmsupport.block.method.cinit.CInitBody;
import cn.wensiqun.asmsupport.block.method.common.CommonMethodBody;
import cn.wensiqun.asmsupport.block.method.common.StaticMethodBody;
import cn.wensiqun.asmsupport.block.method.init.InitBody;
import cn.wensiqun.asmsupport.clazz.AClass;
import cn.wensiqun.asmsupport.definition.variable.LocalVariable;
import cn.wensiqun.asmsupport.utils.ASConstant;


/**
*
* @author 温斯群(Joe Wen)
*
*/
public class ClassCreator extends AbstractClassCreatorContext {

    public ClassCreator(int version, int access, String name,
            Class<?> superCls, Class<?>[] interfaces) {
        super(version, access, name, superCls, interfaces);
    }

    /**
     *
     * @param name
     * @param modifiers
     * @param fieldClass
     * @param value
     * @return
     */
    public void createGlobalVariable(String name, int modifiers,
            AClass fieldClass) {
        GlobalVariableCreator fc = new GlobalVariableCreator(name, modifiers,
                fieldClass);
        fieldCreators.add(fc);
    }
   
    /**
     *
     * @param name
     * @param arguments
     * @param argNames
     * @param returnClass
     * @param exceptions
     * @param access
     * @param mb
     * @return
     */
    public final void createMethod(String name, AClass[] argClasses,
            String[] argNames, AClass returnClass, Class<?>[] exceptions,
            int access, CommonMethodBody mb) {
      if((access & Opcodes.ACC_STATIC) != 0){
        access -= Opcodes.ACC_STATIC;
      }
        methodCreaters.add(MethodCreator.methodCreatorForAdd(name, argClasses, argNames,
                returnClass, exceptions, access, mb));
    }
   
    /**
     *
     * @param name
     * @param argClasses
     * @param argNames
     * @param returnClass
     * @param exceptions
     * @param access
     * @param mb
     * @return
     */
    public void createStaticMethod(String name, AClass[] argClasses,
            String[] argNames, AClass returnClass, Class<?>[] exceptions,
            int access, StaticMethodBody mb) {
      if((access & Opcodes.ACC_STATIC) == 0){
        access += Opcodes.ACC_STATIC;
      }
        methodCreaters.add(MethodCreator.methodCreatorForAdd(name, argClasses, argNames,
                returnClass, exceptions, access, mb));
    }

    /**
     * create constructor;
     *
     * @param arguments
     * @param argNames
     * @param mb
     * @param access
     */
    public void createConstructor(AClass[] arguments,
            String[] argNames, InitBody initBody, int access) {
        methodCreaters.add(MethodCreator.methodCreatorForAdd(ASConstant.INIT, arguments, argNames,
                null, null, access, initBody));
        haveInitMethod = true;
    }

    /**
     *
     * @param mb
     */
    public void createStaticBlock(CInitBody cinitb) {
      checkStaticBlock();
      existedStaticBlock = true;
        methodCreaters.add(0, MethodCreator.methodCreatorForAdd(ASConstant.CLINIT, null, null, null, null,
                Opcodes.ACC_STATIC, cinitb));
    }
   
    @Override
    protected void createDefaultConstructor() {
        createConstructor(null, null, new InitBody() {
            @Override
            public void generateBody(LocalVariable... argus) {
                invokeSuperConstructor();
                runReturn();
            }
           
        }, Opcodes.ACC_PUBLIC);
    }
}
TOP

Related Classes of cn.wensiqun.asmsupport.creator.ClassCreator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.