亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? javaadapter.java

?? 主要的怎么樣結合java 和 javascript!
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
                cfw.add(ByteCode.I2D);                break;            case 'l':                // load a long, convert to double.                cfw.add(ByteCode.LLOAD, paramOffset);                cfw.add(ByteCode.L2D);                size = 2;                break;            case 'f':                // load a float, convert to double.                cfw.add(ByteCode.FLOAD, paramOffset);                cfw.add(ByteCode.F2D);                break;            case 'd':                cfw.add(ByteCode.DLOAD, paramOffset);                size = 2;                break;            }            cfw.addInvoke(ByteCode.INVOKESPECIAL, "java/lang/Double",                          "<init>", "(D)V");        }        return size;    }    /**     * Generates code to convert a wrapped value type to a primitive type.     * Handles unwrapping java.lang.Boolean, and java.lang.Number types.     * Generates the appropriate RETURN bytecode.     */    static void generateReturnResult(ClassFileWriter cfw, Class retType,                                     boolean callConvertResult)    {        // wrap boolean values with java.lang.Boolean, convert all other        // primitive values to java.lang.Double.        if (retType == Void.TYPE) {            cfw.add(ByteCode.POP);            cfw.add(ByteCode.RETURN);        } else if (retType == Boolean.TYPE) {            cfw.addInvoke(ByteCode.INVOKESTATIC,                          "org/mozilla/javascript/Context",                          "toBoolean", "(Ljava/lang/Object;)Z");            cfw.add(ByteCode.IRETURN);        } else if (retType == Character.TYPE) {            // characters are represented as strings in JavaScript.            // return the first character.            // first convert the value to a string if possible.            cfw.addInvoke(ByteCode.INVOKESTATIC,                          "org/mozilla/javascript/Context",                          "toString",                          "(Ljava/lang/Object;)Ljava/lang/String;");            cfw.add(ByteCode.ICONST_0);            cfw.addInvoke(ByteCode.INVOKEVIRTUAL, "java/lang/String",                          "charAt", "(I)C");            cfw.add(ByteCode.IRETURN);        } else if (retType.isPrimitive()) {            cfw.addInvoke(ByteCode.INVOKESTATIC,                          "org/mozilla/javascript/Context",                          "toNumber", "(Ljava/lang/Object;)D");            String typeName = retType.getName();            switch (typeName.charAt(0)) {            case 'b':            case 's':            case 'i':                cfw.add(ByteCode.D2I);                cfw.add(ByteCode.IRETURN);                break;            case 'l':                cfw.add(ByteCode.D2L);                cfw.add(ByteCode.LRETURN);                break;            case 'f':                cfw.add(ByteCode.D2F);                cfw.add(ByteCode.FRETURN);                break;            case 'd':                cfw.add(ByteCode.DRETURN);                break;            default:                throw new RuntimeException("Unexpected return type " +                                           retType.toString());            }        } else {            String retTypeStr = retType.getName();            if (callConvertResult) {                cfw.addLoadConstant(retTypeStr);                cfw.addInvoke(ByteCode.INVOKESTATIC,                              "java/lang/Class",                              "forName",                              "(Ljava/lang/String;)Ljava/lang/Class;");                cfw.addInvoke(ByteCode.INVOKESTATIC,                              "org/mozilla/javascript/JavaAdapter",                              "convertResult",                              "(Ljava/lang/Object;"                              +"Ljava/lang/Class;"                              +")Ljava/lang/Object;");            }            // Now cast to return type            cfw.add(ByteCode.CHECKCAST, retTypeStr);            cfw.add(ByteCode.ARETURN);        }    }    private static void generateMethod(ClassFileWriter cfw, String genName,                                       String methodName, Class[] parms,                                       Class returnType)    {        StringBuffer sb = new StringBuffer();        int paramsEnd = appendMethodSignature(parms, returnType, sb);        String methodSignature = sb.toString();        cfw.startMethod(methodName, methodSignature,                        ClassFileWriter.ACC_PUBLIC);        // Prepare stack to call calMethod        // push factory        cfw.add(ByteCode.ALOAD_0);        cfw.add(ByteCode.GETFIELD, genName, "factory",                "Lorg/mozilla/javascript/ContextFactory;");        // push self        cfw.add(ByteCode.ALOAD_0);        cfw.add(ByteCode.GETFIELD, genName, "self",                "Lorg/mozilla/javascript/Scriptable;");        // push function        cfw.add(ByteCode.ALOAD_0);        cfw.add(ByteCode.GETFIELD, genName, "delegee",                "Lorg/mozilla/javascript/Scriptable;");        cfw.addPush(methodName);        cfw.addInvoke(ByteCode.INVOKESTATIC,                      "org/mozilla/javascript/JavaAdapter",                      "getFunction",                      "(Lorg/mozilla/javascript/Scriptable;"                      +"Ljava/lang/String;"                      +")Lorg/mozilla/javascript/Function;");        // push arguments        generatePushWrappedArgs(cfw, parms, parms.length);        // push bits to indicate which parameters should be wrapped        if (parms.length > 64) {            // If it will be an issue, then passing a static boolean array            // can be an option, but for now using simple bitmask            throw Context.reportRuntimeError0(                "JavaAdapter can not subclass methods with more then"                +" 64 arguments.");        }        long convertionMask = 0;        for (int i = 0; i != parms.length; ++i) {            if (!parms[i].isPrimitive()) {                convertionMask |= (1 << i);            }        }        cfw.addPush(convertionMask);        // go through utility method, which creates a Context to run the        // method in.        cfw.addInvoke(ByteCode.INVOKESTATIC,                      "org/mozilla/javascript/JavaAdapter",                      "callMethod",                      "(Lorg/mozilla/javascript/ContextFactory;"                      +"Lorg/mozilla/javascript/Scriptable;"                      +"Lorg/mozilla/javascript/Function;"                      +"[Ljava/lang/Object;"                      +"J"                      +")Ljava/lang/Object;");        generateReturnResult(cfw, returnType, true);        cfw.stopMethod((short)paramsEnd);    }    /**     * Generates code to push typed parameters onto the operand stack     * prior to a direct Java method call.     */    private static int generatePushParam(ClassFileWriter cfw, int paramOffset,                                         Class paramType)    {        if (!paramType.isPrimitive()) {            cfw.addALoad(paramOffset);            return 1;        }        String typeName = paramType.getName();        switch (typeName.charAt(0)) {        case 'z':        case 'b':        case 'c':        case 's':        case 'i':            // load an int value, convert to double.            cfw.addILoad(paramOffset);            return 1;        case 'l':            // load a long, convert to double.            cfw.addLLoad(paramOffset);            return 2;        case 'f':            // load a float, convert to double.            cfw.addFLoad(paramOffset);            return 1;        case 'd':            cfw.addDLoad(paramOffset);            return 2;        }        throw Kit.codeBug();    }    /**     * Generates code to return a Java type, after calling a Java method     * that returns the same type.     * Generates the appropriate RETURN bytecode.     */    private static void generatePopResult(ClassFileWriter cfw,                                          Class retType)    {        if (retType.isPrimitive()) {            String typeName = retType.getName();            switch (typeName.charAt(0)) {            case 'b':            case 'c':            case 's':            case 'i':            case 'z':                cfw.add(ByteCode.IRETURN);                break;            case 'l':                cfw.add(ByteCode.LRETURN);                break;            case 'f':                cfw.add(ByteCode.FRETURN);                break;            case 'd':                cfw.add(ByteCode.DRETURN);                break;            }        } else {            cfw.add(ByteCode.ARETURN);        }    }    /**     * Generates a method called "super$methodName()" which can be called     * from JavaScript that is equivalent to calling "super.methodName()"     * from Java. Eventually, this may be supported directly in JavaScript.     */    private static void generateSuper(ClassFileWriter cfw,                                      String genName, String superName,                                      String methodName, String methodSignature,                                      Class[] parms, Class returnType)    {        cfw.startMethod("super$" + methodName, methodSignature,                        ClassFileWriter.ACC_PUBLIC);        // push "this"        cfw.add(ByteCode.ALOAD, 0);        // push the rest of the parameters.        int paramOffset = 1;        for (int i = 0; i < parms.length; i++) {            paramOffset += generatePushParam(cfw, paramOffset, parms[i]);        }        // call the superclass implementation of the method.        cfw.addInvoke(ByteCode.INVOKESPECIAL,                      superName,                      methodName,                      methodSignature);        // now, handle the return type appropriately.        Class retType = returnType;        if (!retType.equals(Void.TYPE)) {            generatePopResult(cfw, retType);        } else {            cfw.add(ByteCode.RETURN);        }        cfw.stopMethod((short)(paramOffset + 1));    }    /**     * Returns a fully qualified method name concatenated with its signature.     */    private static String getMethodSignature(Method method, Class[] argTypes)    {        StringBuffer sb = new StringBuffer();        appendMethodSignature(argTypes, method.getReturnType(), sb);        return sb.toString();    }    static int appendMethodSignature(Class[] argTypes,                                     Class returnType,                                     StringBuffer sb)    {        sb.append('(');        int firstLocal = 1 + argTypes.length; // includes this.        for (int i = 0; i < argTypes.length; i++) {            Class type = argTypes[i];            appendTypeString(sb, type);            if (type == Long.TYPE || type == Double.TYPE) {                // adjust for duble slot                ++firstLocal;            }        }        sb.append(')');        appendTypeString(sb, returnType);        return firstLocal;    }    private static StringBuffer appendTypeString(StringBuffer sb, Class type)    {        while (type.isArray()) {            sb.append('[');            type = type.getComponentType();        }        if (type.isPrimitive()) {            char typeLetter;            if (type == Boolean.TYPE) {                typeLetter = 'Z';            } else if (type == Long.TYPE) {                typeLetter = 'J';            } else {                String typeName = type.getName();                typeLetter = Character.toUpperCase(typeName.charAt(0));            }            sb.append(typeLetter);        } else {            sb.append('L');            sb.append(type.getName().replace('.', '/'));            sb.append(';');        }        return sb;    }    static int[] getArgsToConvert(Class[] argTypes)    {        int count = 0;        for (int i = 0; i != argTypes.length; ++i) {            if (!argTypes[i].isPrimitive())                ++count;        }        if (count == 0)            return null;        int[] array = new int[count];        count = 0;        for (int i = 0; i != argTypes.length; ++i) {            if (!argTypes[i].isPrimitive())                array[count++] = i;        }        return array;    }    private static final Object FTAG = new Object();    private static final int Id_JavaAdapter = 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电视剧免费全集观看| 午夜精品在线视频一区| 国产传媒欧美日韩成人| 欧美精品一区二区三区蜜臀| 九一九一国产精品| 国产亲近乱来精品视频 | 偷拍日韩校园综合在线| 欧美理论电影在线| 蜜臀久久99精品久久久久久9| 日韩免费一区二区三区在线播放| 久久99蜜桃精品| 久久久精品国产免费观看同学| 国产精品1024| 亚洲国产另类精品专区| 日韩精品资源二区在线| 国产a级毛片一区| 亚洲自拍偷拍网站| 日韩精品一区二| 99综合影院在线| 午夜av一区二区三区| 欧美电影免费提供在线观看| 国产91富婆露脸刺激对白| 亚洲免费视频成人| 日韩亚洲欧美一区| 丁香六月综合激情| 亚洲国产中文字幕| 国产亚洲欧美日韩日本| 欧洲一区二区三区在线| 精品一区二区三区的国产在线播放| 久久精品视频一区二区| 91福利在线看| 国产米奇在线777精品观看| 亚洲欧美日韩中文播放| 欧美成人三级电影在线| 91亚洲精华国产精华精华液| 免费久久精品视频| 一区av在线播放| 久久精品欧美一区二区三区不卡| 欧美视频精品在线| 国产98色在线|日韩| 亚洲成人av中文| 国产精品国产a| 日韩美女视频一区二区在线观看| 91麻豆国产精品久久| 国内精品不卡在线| 亚洲高清免费在线| 国产精品毛片大码女人| 日韩美女一区二区三区| 欧美日韩中文字幕精品| 成人黄色a**站在线观看| 九九**精品视频免费播放| 亚洲图片欧美视频| 亚洲三级视频在线观看| 国产欧美一区二区精品久导航| 欧美一二三四在线| 欧美午夜免费电影| 99在线视频精品| 国产成人免费在线观看不卡| 男女男精品视频| 视频一区二区不卡| 夜夜精品视频一区二区| 国产精品国产三级国产普通话蜜臀| 日韩午夜在线观看| 91精品福利在线一区二区三区 | 成人动漫av在线| 国产一区二区福利视频| 久久国产精品色婷婷| 日日噜噜夜夜狠狠视频欧美人| 一区二区三区四区不卡在线| 亚洲丝袜制服诱惑| 亚洲成人av资源| 亚洲欧美视频在线观看| 欧美一级欧美一级在线播放| 色8久久人人97超碰香蕉987| 久久久国产精品午夜一区ai换脸| 日本视频一区二区| 精品国产伦一区二区三区观看方式| 亚洲国产视频一区| 洋洋成人永久网站入口| 成人免费小视频| 亚洲人成在线播放网站岛国| 日韩理论在线观看| 亚洲综合一区二区三区| 亚洲美女区一区| 一级女性全黄久久生活片免费| 亚洲免费av网站| 亚洲一区二区三区影院| 亚洲狼人国产精品| 日韩精品免费视频人成| 老司机一区二区| 国产99精品国产| 国产高清精品在线| 色av综合在线| 欧美肥胖老妇做爰| 精品人在线二区三区| 2023国产一二三区日本精品2022| 精品国产欧美一区二区| 国产三级精品视频| 亚洲综合在线第一页| 蜜桃一区二区三区在线| 国产精品亚洲成人| 91久久精品一区二区三区| 欧美日韩亚洲国产综合| 在线91免费看| 欧美成人精品1314www| 欧美激情一二三区| 亚洲一区二区在线视频| 午夜一区二区三区在线观看| 九一九一国产精品| 91丨九色丨国产丨porny| 欧美日韩国产精品成人| 精品国产一区二区三区忘忧草| 国产欧美一区二区精品性| 亚洲综合图片区| 久久99国产精品麻豆| 91麻豆蜜桃一区二区三区| 911精品产国品一二三产区| 国产精品网曝门| 日韩黄色片在线观看| 国产成人综合亚洲网站| 欧美性高清videossexo| 久久―日本道色综合久久| 亚洲欧美日韩国产另类专区 | 国产精品成人一区二区艾草 | 国产精品 欧美精品| 色八戒一区二区三区| 2020国产精品| 亚洲高清免费在线| 成人福利电影精品一区二区在线观看| 欧美日韩一区二区在线观看视频 | 99久久精品免费看国产免费软件| 欧美日韩免费电影| 国产精品午夜春色av| 蜜臀av性久久久久蜜臀aⅴ流畅| 91在线视频网址| 久久久一区二区| 日韩专区一卡二卡| 色综合中文综合网| 99久久99精品久久久久久 | 国产精品一区二区视频| 欧美精品第一页| 亚洲美女一区二区三区| 国产真实精品久久二三区| 欧美乱妇20p| 伊人婷婷欧美激情| 成人97人人超碰人人99| 久久这里只精品最新地址| 美女视频黄久久| 欧美日韩在线免费视频| 亚洲男人的天堂一区二区| 成人福利视频网站| 国产欧美日产一区| 国产成人午夜精品影院观看视频| 欧美成人猛片aaaaaaa| 日韩av电影免费观看高清完整版 | 91精品午夜视频| 亚洲精品老司机| 99re这里都是精品| 国产精品免费人成网站| 国产成人免费xxxxxxxx| 精品福利一二区| 狂野欧美性猛交blacked| 在线91免费看| 丝袜美腿成人在线| 欧美午夜电影网| 亚洲一区自拍偷拍| 国产河南妇女毛片精品久久久| 久久综合久久久久88| 久久99精品视频| 精品99久久久久久| 国模娜娜一区二区三区| 欧美大肚乱孕交hd孕妇| 精品一区二区国语对白| 日韩欧美视频一区| 六月丁香婷婷久久| 欧美成人a∨高清免费观看| 久久se精品一区精品二区| 欧美成人伊人久久综合网| 国内精品久久久久影院一蜜桃| 久久亚区不卡日本| 福利电影一区二区| 伊人性伊人情综合网| 欧美精品黑人性xxxx| 久久66热re国产| 国产精品美女久久久久久久久| av高清不卡在线| 亚洲第一主播视频| 精品粉嫩aⅴ一区二区三区四区| 国产精品亚洲综合一区在线观看| 亚洲欧洲精品成人久久奇米网| 91啪九色porn原创视频在线观看| 亚洲综合无码一区二区| 欧美一级搡bbbb搡bbbb| 久久电影网站中文字幕| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美本精品男人aⅴ天堂| 国产.精品.日韩.另类.中文.在线.播放| 亚洲国产高清不卡| 欧美日韩亚洲丝袜制服| 日本不卡视频一二三区|