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

📄 classnode.java

📁 大名鼎鼎的java动态脚本语言。已经通过了sun的认证
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    /**     * @return a list of methods which match the given name     */    public List getMethods(String name) {        List answer = new ArrayList();        ClassNode node = this;        do {            for (Iterator iter = node.getMethods().iterator(); iter.hasNext();) {                MethodNode method = (MethodNode) iter.next();                if (name.equals(method.getName())) {                    answer.add(method);                }            }            node = node.getSuperClass();        }        while (node != null);        return answer;    }    /**     * @return the method matching the given name and parameters or null     */    public MethodNode getDeclaredMethod(String name, Parameter[] parameters) {        for (Iterator iter = getMethods().iterator(); iter.hasNext();) {            MethodNode method = (MethodNode) iter.next();            if (name.equals(method.getName()) && parametersEqual(method.getParameters(), parameters)) {                return method;            }        }        return null;    }    /**     * @return true if this node is derived from the given class node     */    public boolean isDerivedFrom(ClassNode type) {        ClassNode node = getSuperClass();        while (node != null) {            if (type.equals(node)) {                return true;            }            node = node.getSuperClass();        }        return false;    }    /**     * @return true if this class is derived from a groovy object     *         i.e. it implements GroovyObject     */    public boolean isDerivedFromGroovyObject() {        return implementsInteface(GroovyObject.class.getName());    }    /**     * @param name the fully qualified name of the interface     * @return true if this class or any base class implements the given interface     */    public boolean implementsInteface(String name) {        ClassNode node = redirect();        do {            if (node.declaresInterface(name)) {                return true;            }            node = node.getSuperClass();        }        while (node != null);        return false;    }    /**     * @param name the fully qualified name of the interface     * @return true if this class declares that it implements the given interface     */    public boolean declaresInterface(String name) {        ClassNode[] interfaces = redirect().getInterfaces();        int size = interfaces.length;        for (int i = 0; i < size; i++) {            if (interfaces[i].getName().equals(name)) {                return true;            }        }        return false;    }    /**     * @return the ClassNode of the super class of this type     */    public ClassNode getSuperClass() {        if (!lazyInitDone && !isResolved()) {            throw new GroovyBugError("Classnode#getSuperClass for "+getName()+" called before class resolving");        }        return getUnresolvedSuperClass();    }        public ClassNode getUnresolvedSuperClass() {        if (!lazyInitDone) {            lazyClassInit();        }        return redirect().superClass;    }    /**     * Factory method to create a new MethodNode via reflection     */    protected MethodNode createMethodNode(Method method) {        Parameter[] parameters = createParameters(method.getParameterTypes());        return new MethodNode(method.getName(), method.getModifiers(), ClassHelper.make(method.getReturnType()), parameters, ClassHelper.make(method.getExceptionTypes()), EmptyStatement.INSTANCE);    }    /**     * @param types     * @return     */    protected Parameter[] createParameters(Class[] types) {        Parameter[] parameters = Parameter.EMPTY_ARRAY;        int size = types.length;        if (size > 0) {            parameters = new Parameter[size];            for (int i = 0; i < size; i++) {                parameters[i] = createParameter(types[i], i);            }        }        return parameters;    }    protected Parameter createParameter(Class parameterType, int idx) {        return new Parameter(ClassHelper.make(parameterType), "param" + idx);    }    public CompileUnit getCompileUnit() {        if (redirect!=null) return redirect().getCompileUnit();        if (compileUnit == null && module != null) {            compileUnit = module.getUnit();        }        return compileUnit;    }        protected void setCompileUnit(CompileUnit cu) {        if (redirect!=null) redirect().setCompileUnit(cu);        if (compileUnit!= null) compileUnit = cu;    }    /**     * @return true if the two arrays are of the same size and have the same contents     */    protected boolean parametersEqual(Parameter[] a, Parameter[] b) {        if (a.length == b.length) {            boolean answer = true;            for (int i = 0; i < a.length; i++) {                if (!a[i].getType().equals(b[i].getType())) {                    answer = false;                    break;                }            }            return answer;        }        return false;    }    /**     * @return the package name of this class     */    public String getPackageName() {        int idx = getName().lastIndexOf('.');        if (idx > 0) {            return getName().substring(0, idx);        }        return null;    }    public String getNameWithoutPackage() {        int idx = getName().lastIndexOf('.');        if (idx > 0) {            return getName().substring(idx + 1);        }        return getName();    }    public void visitContents(GroovyClassVisitor visitor) {                // now lets visit the contents of the class        for (Iterator iter = getProperties().iterator(); iter.hasNext();) {            PropertyNode pn = (PropertyNode) iter.next();            visitor.visitProperty(pn);        }        for (Iterator iter = getFields().iterator(); iter.hasNext();) {            FieldNode fn = (FieldNode) iter.next();            visitor.visitField(fn);        }        for (Iterator iter = getDeclaredConstructors().iterator(); iter.hasNext();) {            ConstructorNode cn = (ConstructorNode) iter.next();            visitor.visitConstructor(cn);        }        for (Iterator iter = getMethods().iterator(); iter.hasNext();) {            MethodNode mn = (MethodNode) iter.next();            visitor.visitMethod(mn);        }    }    public MethodNode getGetterMethod(String getterName) {        for (Iterator iter = getMethods().iterator(); iter.hasNext();) {            MethodNode method = (MethodNode) iter.next();            if (getterName.equals(method.getName())                    && ClassHelper.VOID_TYPE!=method.getReturnType()                    && method.getParameters().length == 0) {                return method;            }        }        return null;    }    public MethodNode getSetterMethod(String getterName) {        for (Iterator iter = getMethods().iterator(); iter.hasNext();) {            MethodNode method = (MethodNode) iter.next();            if (getterName.equals(method.getName())                    && ClassHelper.VOID_TYPE==method.getReturnType()                    && method.getParameters().length == 1) {                return method;            }        }        return null;    }    /**     * Is this class delcared in a static method (such as a closure / inner class declared in a static method)     *     * @return     */    public boolean isStaticClass() {        return redirect().staticClass;    }    public void setStaticClass(boolean staticClass) {        redirect().staticClass = staticClass;    }    /**     * @return Returns true if this inner class or closure was declared inside a script body     */    public boolean isScriptBody() {        return redirect().scriptBody;    }    public void setScriptBody(boolean scriptBody) {        redirect().scriptBody = scriptBody;    }    public boolean isScript() {        return redirect().script || isDerivedFrom(ClassHelper.SCRIPT_TYPE);    }    public void setScript(boolean script) {        redirect().script = script;    }    public String toString() {        return super.toString() + "[name: " + getName() + "]";    }    /**     * Returns true if the given method has a possibly matching method with the given name and arguments     */    public boolean hasPossibleMethod(String name, Expression arguments) {        int count = 0;        if (arguments instanceof TupleExpression) {            TupleExpression tuple = (TupleExpression) arguments;            // TODO this won't strictly be true when using list expension in argument calls            count = tuple.getExpressions().size();        }        ClassNode node = this;        do {            for (Iterator iter = getMethods().iterator(); iter.hasNext();) {                MethodNode method = (MethodNode) iter.next();                if (name.equals(method.getName()) && method.getParameters().length == count) {                    return true;                }            }            node = node.getSuperClass();        }        while (node != null);        return false;    }        public boolean isInterface(){        return (getModifiers() & Opcodes.ACC_INTERFACE) > 0;     }        public boolean isResolved(){        return redirect().clazz!=null || (componentType != null && componentType.isResolved());    }        public boolean isArray(){        return componentType!=null;    }        public ClassNode getComponentType() {        return componentType;    }        public Class getTypeClass(){        Class c = redirect().clazz;        if (c!=null) return c;        ClassNode component = redirect().componentType;        if (component!=null && component.isResolved()){            ClassNode cn = component.makeArray();            setRedirect(cn);            return redirect().clazz;        }        throw new GroovyBugError("ClassNode#getTypeClass for "+getName()+" is called before the type class is set ");    }        public boolean hasPackageName(){        return redirect().name.indexOf('.')>0;    }}

⌨️ 快捷键说明

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