Package cn.wensiqun.asmsupport.clazz

Source Code of cn.wensiqun.asmsupport.clazz.SemiClass

package cn.wensiqun.asmsupport.clazz;

import java.lang.reflect.Field;

import org.objectweb.asm.Opcodes;

import cn.wensiqun.asmsupport.definition.variable.GlobalVariable;
import cn.wensiqun.asmsupport.exception.ASMSupportException;
import cn.wensiqun.asmsupport.utils.ModifierUtils;


/**
*
* @author 温斯群(Joe Wen)
*
*/
public class SemiClass extends NewMemberClass {

  SemiClass(int version, int access, String name, Class<?> superCls,
            Class<?>[] interfaces) {
        this.version = version;
        this.name = name;
        this.mod = access;
        this.superClass = superCls;
        this.interfaces = interfaces;

        if(!ModifierUtils.isInterface(mod)){
            this.mod += Opcodes.ACC_SUPER;
        }
       
    }

    @Override
    public String getDescription() {
        return new StringBuilder("L").append(getName().replace(".", "/"))
                .append(";").toString();
    }
   
    @Override
    public boolean isPrimitive() {
        return false;
    }

    @Override
    public boolean isArray() {
        return false;
    }

    @Override
    public int getDimension() {
        return -1;
    }

    @Override
    public int getCastOrder() {
        return 9;
    }
   
    /*@Override
    public MethodEntity availableMethod(AClass aclass, String name,
            AClass[] parameterTypes) {
        IMethodChooser chooser = new SemiClassMethodChooser(aclass, this, name, parameterTypes);
        return chooser.chooseMethod();
    }*/

    @Override
    public GlobalVariable getGlobalVariable(String name) {
      GlobalVariable gv = super.getGlobalVariable(name);
      if(gv != null){
          return gv;
        }
       
        Class<?> fieldOwner = superClass;
        Field f = null;
        for(;!fieldOwner.equals(Object.class;fieldOwner = fieldOwner.getSuperclass()){
            try {
                f = fieldOwner.getDeclaredField(name);
            } catch (NoSuchFieldException e) {
            }
        }
       
        if(f == null){
            throw new ASMSupportException("no such field exception : " + name);
        }
       
        return new GlobalVariable(AClassFactory.getProductClass(fieldOwner),
                new ProductClass(f.getType()), 0, name);
    }
}
TOP

Related Classes of cn.wensiqun.asmsupport.clazz.SemiClass

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.