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

📄 invoker.java

📁 大名鼎鼎的java动态脚本语言。已经通过了sun的认证
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                // lets try see if there's an iterator() method                final Method method = value.getClass().getMethod("iterator", EMPTY_TYPES);                if (method != null) {                    AccessController.doPrivileged(new PrivilegedAction() {                        public Object run() {                            method.setAccessible(true);                            return null;                        }                    });                    return (Iterator) method.invoke(value, EMPTY_ARGUMENTS);                }            }            catch (Exception e) {                //  ignore            }        }        return asCollection(value).iterator();    }    /**     * @return true if the two objects are null or the objects are equal     */    public boolean objectsEqual(Object left, Object right) {        if (left == right) {            return true;        }        if (left != null) {            if (right == null) {                return false;            }            if (left instanceof Comparable) {                return compareTo(left, right) == 0;            }            else if (left instanceof List && right instanceof List) {                return DefaultGroovyMethods.equals((List) left, (List) right);            }            else {                return left.equals(right);            }        }        return false;    }    public String inspect(Object self) {        return format(self, true);    }    /**     * Compares the two objects handling nulls gracefully and performing numeric type coercion if required     */    public int compareTo(Object left, Object right) {        //System.out.println("Comparing: " + left + " to: " + right);        if (left == right) {            return 0;        }        if (left == null) {            return -1;        }        else if (right == null) {            return 1;        }        if (left instanceof Comparable) {            if (left instanceof Number) {                if (isValidCharacterString(right)) {                    return asCharacter((Number) left).compareTo(asCharacter((String) right));                }                return DefaultGroovyMethods.compareTo((Number) left, asNumber(right));            }            else if (left instanceof Character) {                if (isValidCharacterString(right)) {                    return ((Character) left).compareTo(asCharacter((String) right));                }                else if (right instanceof Number) {                    return ((Character) left).compareTo(asCharacter((Number) right));                }            }            else if (right instanceof Number) {                if (isValidCharacterString(left)) {                    return asCharacter((String) left).compareTo(asCharacter((Number) right));                }                return DefaultGroovyMethods.compareTo(asNumber(left), (Number) right);            }            else if (left instanceof String && right instanceof Character) {                return ((String) left).compareTo(right.toString());            }            else if (left instanceof String && right instanceof GString) {                return ((String) left).compareTo(right.toString());            }            Comparable comparable = (Comparable) left;            return comparable.compareTo(right);        }        if (left.getClass().isArray()) {            Collection leftList = asCollection(left);            if (right.getClass().isArray()) {                right = asCollection(right);            }            return ((Comparable) leftList).compareTo(right);        }        /** todo we might wanna do some type conversion here */        throw new GroovyRuntimeException("Cannot compare values: " + left + " and " + right);    }    /**     * A helper method to provide some better toString() behaviour such as turning arrays     * into tuples     */    public String toString(Object arguments) {        if (arguments instanceof Object[])            return toArrayString((Object[]) arguments);        else if (arguments instanceof Map)            return toMapString((Map) arguments);        else if (arguments instanceof Collection)            return format(arguments, true);        else            return format(arguments, false);    }    /**     * A helper method to format the arguments types as a comma-separated list     */    public String toTypeString(Object[] arguments) {        if (arguments == null) {            return "null";        }        StringBuffer argBuf = new StringBuffer();        for (int i = 0; i < arguments.length; i++) {            if (i > 0) {                argBuf.append(", ");            }            argBuf.append(arguments[i] != null ? arguments[i].getClass().getName() : "null");        }        return argBuf.toString();    }    /**     * A helper method to return the string representation of a map with bracket boundaries "[" and "]".     */    public String toMapString(Map arg) {        if (arg == null) {            return "null";        }        if (arg.isEmpty()) {            return "[:]";        }        String sbdry = "[";        String ebdry = "]";        StringBuffer buffer = new StringBuffer(sbdry);        boolean first = true;        for (Iterator iter = arg.entrySet().iterator(); iter.hasNext();) {            if (first)                first = false;            else                buffer.append(", ");            Map.Entry entry = (Map.Entry) iter.next();            buffer.append(format(entry.getKey(), true));            buffer.append(":");            buffer.append(format(entry.getValue(), true));        }        buffer.append(ebdry);        return buffer.toString();    }    /**     * A helper method to return the string representation of a list with bracket boundaries "[" and "]".     */    public String toListString(Collection arg) {        if (arg == null) {            return "null";        }        if (arg.isEmpty()) {            return "[]";        }        String sbdry = "[";        String ebdry = "]";        StringBuffer buffer = new StringBuffer(sbdry);        boolean first = true;        for (Iterator iter = arg.iterator(); iter.hasNext();) {            if (first)                first = false;            else                buffer.append(", ");            Object elem = iter.next();            buffer.append(format(elem, true));        }        buffer.append(ebdry);        return buffer.toString();    }    /**     * A helper method to return the string representation of an arrray of objects     * with brace boundaries "{" and "}".     */    public String toArrayString(Object[] arguments) {        if (arguments == null) {            return "null";        }        String sbdry = "{";        String ebdry = "}";        StringBuffer argBuf = new StringBuffer(sbdry);        for (int i = 0; i < arguments.length; i++) {            if (i > 0) {                argBuf.append(", ");            }            argBuf.append(format(arguments[i], true));        }        argBuf.append(ebdry);        return argBuf.toString();    }    protected String format(Object arguments, boolean verbose) {        if (arguments == null) {            return "null";        }        else if (arguments.getClass().isArray()) {            return format(asCollection(arguments), verbose);        }        else if (arguments instanceof Range) {            Range range = (Range) arguments;            if (verbose) {                return range.inspect();            }            else {                return range.toString();            }        }        else if (arguments instanceof List) {            List list = (List) arguments;            StringBuffer buffer = new StringBuffer("[");            boolean first = true;            for (Iterator iter = list.iterator(); iter.hasNext();) {                if (first) {                    first = false;                }                else {                    buffer.append(", ");                }                buffer.append(format(iter.next(), verbose));            }            buffer.append("]");            return buffer.toString();        }        else if (arguments instanceof Map) {            Map map = (Map) arguments;            if (map.isEmpty()) {                return "[:]";            }            StringBuffer buffer = new StringBuffer("[");            boolean first = true;            for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {                if (first) {                    first = false;                }                else {                    buffer.append(", ");                }                Map.Entry entry = (Map.Entry) iter.next();                buffer.append(format(entry.getKey(), verbose));                buffer.append(":");                buffer.append(format(entry.getValue(), verbose));            }            buffer.append("]");            return buffer.toString();        }        else if (arguments instanceof Element) {            Element node = (Element) arguments;            OutputFormat format = new OutputFormat(node.getOwnerDocument());            format.setOmitXMLDeclaration(true);            format.setIndenting(true);            format.setLineWidth(0);            format.setPreserveSpace(true);            StringWriter sw = new StringWriter();            XMLSerializer serializer = new XMLSerializer(sw, format);            try {                serializer.asDOMSerializer();                serializer.serialize(node);            }            catch (IOException e) {            }            return sw.toString();        }        else if (arguments instanceof String) {            if (verbose) {                String arg = ((String)arguments).replaceAll("\\n", "\\\\n");    // line feed                arg = arg.replaceAll("\\r", "\\\\r");      // carriage return                arg = arg.replaceAll("\\t", "\\\\t");      // tab                arg = arg.replaceAll("\\f", "\\\\f");      // form feed                arg = arg.replaceAll("\\\"", "\\\\\"");    // double quotation amrk                arg = arg.replaceAll("\\\\", "\\\\");      // back slash                return "\"" + arg + "\"";            }            else {                return (String) arguments;            }        }        else {            return arguments.toString();        }    }    /**     * Looks up the given property of the given object     */    public Object getProperty(Object object, String property) {        if (object == null) {            throw new NullPointerException("Cannot get property: " + property + " on null object");        }        else if (object instanceof GroovyObject) {            GroovyObject pogo = (GroovyObject) object;            return pogo.getProperty(property);        }        else if (object instanceof Map) {            Map map = (Map) object;            return map.get(property);        }        else {            return metaRegistry.getMetaClass(object.getClass()).getProperty(object, property);        }    }        /**     * Sets the property on the given object     */    public void setProperty(Object object, String property, Object newValue) {        if (object == null) {            throw new GroovyRuntimeException("Cannot set property on null object");        }        else if (object instanceof GroovyObject) {            GroovyObject pogo = (GroovyObject) object;            pogo.setProperty(property, newValue);        }        else if (object instanceof Map) {            Map map = (Map) object;            map.put(property, newValue);        }        else {            if (object instanceof Class)                metaRegistry.getMetaClass((Class) object).setProperty((Class) object, property, newValue);            else                metaRegistry.getMetaClass(object.getClass()).setProperty(object, property, newValue);        }    }    /**     * Looks up the given attribute (field) on the given object     */    public Object getAttribute(Object object, String attribute) {        if (object == null) {            throw new NullPointerException("Cannot get attribute: " + attribute + " on null object");            /**             } else if (object instanceof GroovyObject) {             GroovyObject pogo = (GroovyObject) object;             return pogo.getAttribute(attribute);             } else if (object instanceof Map) {             Map map = (Map) object;             return map.get(attribute);             */        }        else {            if (object instanceof Class) {                return metaRegistry.getMetaClass((Class) object).getAttribute(object, attribute);            } else if (object instanceof GroovyObject) {                return ((GroovyObject)object).getMetaClass().getAttribute(object, attribute);            } else {                return metaRegistry.getMetaClass(object.getClass()).getAttribute(object, attribute);            }	}    }    /**     * Sets the given attribute (field) on the given object     */    public void setAttribute(Object object, String attribute, Object newValue) {        if (object == null) {            throw new GroovyRuntimeException("Cannot set attribute on null object");            /*        } else if (object instanceof GroovyObject) {            GroovyObject pogo = (GroovyObject) object;            pogo.setProperty(attribute, newValue);        } else if (object instanceof Map) {            Map map = (Map) object;            map.put(attribute, newValue);            */        }        else {            if (object instanceof Class) {                metaRegistry.getMetaClass((Class) object).setAttribute(object, attribute, newValue);            } else if (object instanceof GroovyObject) {                ((GroovyObject)object).getMetaClass().setAttribute(object, attribute, newValue);            } else {                metaRegistry.getMetaClass(object.getClass()).setAttribute(object, attribute, newValue);            }	}    }    /**     * Returns the method pointer for the given object name     */    public Closure getMethodPointer(Object object, String methodName) {        if (object == null) {            throw new NullPointerException("Cannot access method pointer for '" + methodName + "' on null object");        }        return MetaClassHelper.getMethodPointer(object, methodName);    }    /**     * Attempts to load the given class via name using the current class loader     * for this code or the thread context class loader     */

⌨️ 快捷键说明

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