scriptbytecodeadapter.java

来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 834 行 · 第 1/3 页

JAVA
834
字号
    public static Object getFieldOnSuperSafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        return getFieldOnSuper(senderClass,receiver,messageName);
    }
    
    public static Object getFieldOnSuperSpreadSafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        if (! (receiver instanceof List)) return getFieldOnSuper(senderClass,receiver,messageName);
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            answer.add(getFieldOnSuper(senderClass, it.next(), messageName));
        }
        return answer;
    }

    //  --------------------------------------------------------
    //              field handling super: set
    //  --------------------------------------------------------       

    public static void setFieldOnSuper(Object messageArgument,Class senderClass, Object receiver, String messageName) throws Throwable{
        try {
            if (receiver instanceof Class) {
                InvokerHelper.setAttribute(receiver,messageName,messageArgument); 
            } else {          
                MetaClass mc = ((GroovyObject) receiver).getMetaClass();
                mc.setAttribute(senderClass, receiver, messageName, messageArgument, true, true);
            }
        } catch (GroovyRuntimeException gre) {
            unwrap(gre);
        }
    }
    
    public static void setFieldOnSuperSafe(Object messageArgument,Class senderClass, Object receiver, String messageName) throws Throwable{
        setFieldOnSuper(messageArgument,senderClass,receiver,messageName);
    }
    
    public static void setFieldOnSuperSpreadSafe(Object messageArgument,Class senderClass, Object receiver, String messageName) throws Throwable{
        if (! (receiver instanceof List)) {
            setFieldOnSuper(messageArgument,senderClass,receiver,messageName);
            return;
        }
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            setFieldOnSuper(messageArgument,senderClass, it.next(), messageName);
        }
    }

    
    //  --------------------------------------------------------
    //              normal field handling : get
    //  --------------------------------------------------------       

    public static Object getField(Class senderClass, Object receiver, String messageName) throws Throwable{
        try {
            return InvokerHelper.getAttribute(receiver, messageName);
        } catch (GroovyRuntimeException gre) {
            return unwrap(gre);
        }
    }
    
    public static Object getFieldSafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        return getField(senderClass,receiver,messageName);
    }
    
    public static Object getFieldSpreadSafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        if (! (receiver instanceof List)) return getField(senderClass,receiver,messageName);
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            answer.add(getFieldSafe(senderClass, it.next(), messageName));
        }
        return answer;
    }

    //  --------------------------------------------------------
    //              normal field handling : set
    //  --------------------------------------------------------       

    public static void setField(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        try {
            InvokerHelper.setAttribute(receiver, messageName,messageArgument);
        } catch (GroovyRuntimeException gre) {
            unwrap(gre);
        }
    }
    
    public static void setFieldSafe(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        setField(messageArgument,senderClass,receiver,messageName);
    }
    
    public static void setFieldSpreadSafe(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        if (! (receiver instanceof List)) {
            setField(messageArgument,senderClass,receiver,messageName);
            return;
        }
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            setFieldSafe(messageArgument,senderClass, it.next(), messageName);
        }
    }
    
    //  --------------------------------------------------------
    //              normal GroovyObject field handling : get
    //  --------------------------------------------------------       

    public static Object getGroovyObjectField(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        return receiver.getMetaClass().getAttribute(receiver,messageName);
    }
    
    public static Object getGroovyObjectFieldSafe(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        return receiver.getMetaClass().getAttribute(receiver,messageName);
    }
    
    public static Object getGroovyObjectFieldSpreadSafe(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        if (! (receiver instanceof List)) return getGroovyObjectField(senderClass,receiver,messageName);
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            answer.add(getFieldSafe(senderClass, it.next(), messageName));
        }
        return answer;
    }

    //  --------------------------------------------------------
    //              normal field handling : set
    //  --------------------------------------------------------       

    public static void setGroovyObjectField(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        receiver.getMetaClass().setAttribute(receiver,messageName,messageArgument);
    }
    
    public static void setGroovyObjectFieldSafe(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        receiver.getMetaClass().setAttribute(receiver,messageName,messageArgument);
    }
    
    public static void setGroovyObjectFieldSpreadSafe(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        if (! (receiver instanceof List)) {
            setGroovyObjectField(messageArgument,senderClass,receiver,messageName);
            return;
        }
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            setFieldSafe(messageArgument,senderClass, it.next(), messageName);
        }
    }

    //  --------------------------------------------------------
    //              Property handling super: get
    //  --------------------------------------------------------       

    public static Object getPropertyOnSuper(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        return invokeMethodOnSuperN(senderClass, receiver, "getProperty", new Object[]{messageName});
    }
    
    public static Object getPropertyOnSuperSafe(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        return getPropertyOnSuper(senderClass,receiver,messageName);
    }
    
    public static Object getPropertyOnSuperSpreadSafe(Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (! (receiver instanceof List)) return getPropertyOnSuper(senderClass,receiver,messageName);
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            answer.add(getPropertySafe(senderClass, it.next(), messageName));
        }
        return answer;
    }

    //  --------------------------------------------------------
    //              Property handling super: set
    //  --------------------------------------------------------       

    public static void setPropertyOnSuper(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        try {
            InvokerHelper.setAttribute(receiver, messageName,messageArgument);
        } catch (GroovyRuntimeException gre) {
            unwrap(gre);
        }
    }
    
    public static void setPropertyOnSuperSafe(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        setPropertyOnSuper(messageArgument, senderClass,receiver,messageName);
    }
    
    public static void setPropertyOnSuperSpreadSafe(Object messageArgument, Class senderClass, GroovyObject receiver, String messageName) throws Throwable{
        if (! (receiver instanceof List)) {
            setPropertyOnSuper(messageArgument, senderClass,receiver,messageName);
            return;
        }
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            setPropertySafe(messageArgument, senderClass, it.next(), messageName);
        }
    }

    
    //  --------------------------------------------------------
    //              normal Property handling : get
    //  --------------------------------------------------------       

    public static Object getProperty(Class senderClass, Object receiver, String messageName) throws Throwable{
        try {
            return InvokerHelper.getProperty(receiver, messageName);
        } catch (GroovyRuntimeException gre) {
            return unwrap(gre);
        }
    }
    
    public static Object getPropertySafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        return getProperty(senderClass,receiver,messageName);
    }
    
    public static Object getPropertySpreadSafe(Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return null;
        if (! (receiver instanceof List)) return getProperty(senderClass,receiver,messageName);
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            answer.add(getPropertySafe(senderClass, it.next(), messageName));
        }
        return answer;
    }
    
    //  --------------------------------------------------------
    //              normal Property handling : set
    //  --------------------------------------------------------       

    public static void setProperty(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        try {
            InvokerHelper.setProperty(receiver, messageName,messageArgument);
        } catch (GroovyRuntimeException gre) {
            unwrap(gre);
        }
    }
    
    public static void setPropertySafe(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        setProperty(messageArgument,senderClass,receiver,messageName);
    }
    
    public static void setPropertySpreadSafe(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable{
        if (receiver==null) return;
        if (! (receiver instanceof List)) {
            setProperty(messageArgument, senderClass, receiver, messageName);
            return;
        }
        
        List list = (List) receiver;
        List answer = new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            setPropertySafe(messageArgument, senderClass, it.next(), messageName);
        }
    }
    
    
    //  --------------------------------------------------------
    //              normal GroovyObject Property handling : get

⌨️ 快捷键说明

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