⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memberresolver.java

📁 Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            throw new NoFieldException(jvmClassName + "$" + field, expr);        }    }    /**     * @param jvmClassName  a JVM class name.  e.g. java/lang/String     */    public CtField lookupFieldByJvmName(String jvmClassName, Symbol fieldName)        throws CompileError    {        return lookupField(jvmToJavaName(jvmClassName), fieldName);    }    /**     * @param name      a qualified class name. e.g. java.lang.String     */    public CtField lookupField(String className, Symbol fieldName)        throws CompileError    {        CtClass cc = lookupClass(className, false);        try {            return cc.getField(fieldName.get());        }        catch (NotFoundException e) {}        throw new CompileError("no such field: " + fieldName.get());    }    public CtClass lookupClassByName(ASTList name) throws CompileError {        return lookupClass(Declarator.astToClassName(name, '.'), false);    }    public CtClass lookupClassByJvmName(String jvmName) throws CompileError {        return lookupClass(jvmToJavaName(jvmName), false);    }    public CtClass lookupClass(Declarator decl) throws CompileError {        return lookupClass(decl.getType(), decl.getArrayDim(),                           decl.getClassName());    }    /**     * @parma classname         jvm class name.     */    public CtClass lookupClass(int type, int dim, String classname)        throws CompileError    {        String cname = "";        CtClass clazz;        if (type == CLASS) {            clazz = lookupClassByJvmName(classname);            if (dim > 0)                cname = clazz.getName();            else                return clazz;        }        else            cname = getTypeName(type);        while (dim-- > 0)            cname += "[]";        return lookupClass(cname, false);    }    /*     * type cannot be CLASS     */    static String getTypeName(int type) throws CompileError {        String cname = "";        switch (type) {        case BOOLEAN :            cname = "boolean";            break;        case CHAR :            cname = "char";            break;        case BYTE :            cname = "byte";            break;        case SHORT :            cname = "short";            break;        case INT :            cname = "int";            break;        case LONG :            cname = "long";            break;        case FLOAT :            cname = "float";            break;        case DOUBLE :            cname = "double";            break;        case VOID :            cname = "void";            break;        default :            fatal();        }        return cname;    }    /**     * @param name      a qualified class name. e.g. java.lang.String     */    public CtClass lookupClass(String name, boolean notCheckInner)        throws CompileError    {        try {            return lookupClass0(name, notCheckInner);        }        catch (NotFoundException e) {            return searchImports(name);        }    }    private CtClass searchImports(String orgName)        throws CompileError    {        if (orgName.indexOf('.') < 0) {            Iterator it = classPool.getImportedPackages();            while (it.hasNext()) {                String pac = (String)it.next();                String fqName = pac + '.' + orgName;                try {                    CtClass cc = classPool.get(fqName);                    // if the class is found,                    classPool.recordInvalidClassName(orgName);                    return cc;                }                catch (NotFoundException e) {                    classPool.recordInvalidClassName(fqName);                }            }        }        throw new CompileError("no such class: " + orgName);    }    private CtClass lookupClass0(String classname, boolean notCheckInner)        throws NotFoundException    {        CtClass cc = null;        do {            try {                cc = classPool.get(classname);            }            catch (NotFoundException e) {                int i = classname.lastIndexOf('.');                if (notCheckInner || i < 0)                    throw e;                else {                    StringBuffer sbuf = new StringBuffer(classname);                    sbuf.setCharAt(i, '$');                    classname = sbuf.toString();                }            }        } while (cc == null);        return cc;    }    /* Converts a class name into a JVM-internal representation.     *     * It may also expand a simple class name to java.lang.*.     * For example, this converts Object into java/lang/Object.     */    public String resolveClassName(ASTList name) throws CompileError {        if (name == null)            return null;        else            return javaToJvmName(lookupClassByName(name).getName());    }    /* Expands a simple class name to java.lang.*.     * For example, this converts Object into java/lang/Object.     */    public String resolveJvmClassName(String jvmName) throws CompileError {        if (jvmName == null)            return null;        else            return javaToJvmName(lookupClassByJvmName(jvmName).getName());    }    public static CtClass getSuperclass(CtClass c) throws CompileError {        try {            CtClass sc = c.getSuperclass();            if (sc != null)                return sc;        }        catch (NotFoundException e) {}        throw new CompileError("cannot find the super class of "                               + c.getName());    }    public static String javaToJvmName(String classname) {        return classname.replace('.', '/');    }    public static String jvmToJavaName(String classname) {        return classname.replace('/', '.');    }    public static int descToType(char c) throws CompileError {        switch (c) {        case 'Z' :            return BOOLEAN;        case 'C' :            return CHAR;        case 'B' :            return  BYTE;        case 'S' :            return SHORT;        case 'I' :            return INT;        case 'J' :            return LONG;        case 'F' :            return FLOAT;        case 'D' :            return DOUBLE;        case 'V' :            return VOID;        case 'L' :        case '[' :            return CLASS;        default :            fatal();            return VOID;    // never reach here        }    }    public static int getModifiers(ASTList mods) {        int m = 0;        while (mods != null) {            Keyword k = (Keyword)mods.head();            mods = mods.tail();            switch (k.get()) {            case STATIC :                m |= Modifier.STATIC;                break;            case FINAL :                m |= Modifier.FINAL;                break;            case SYNCHRONIZED :                m |= Modifier.SYNCHRONIZED;                break;            case ABSTRACT :                m |= Modifier.ABSTRACT;                break;            case PUBLIC :                m |= Modifier.PUBLIC;                break;            case PROTECTED :                m |= Modifier.PROTECTED;                break;            case PRIVATE :                m |= Modifier.PRIVATE;                break;            case VOLATILE :                m |= Modifier.VOLATILE;                break;            case TRANSIENT :                m |= Modifier.TRANSIENT;                break;            case STRICT :                m |= Modifier.STRICT;                break;            }        }        return m;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -