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

📄 wrapper.java

📁 RESIN 3.2 最新源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        namedProperties.put(prop.getName(), named);    hasDispatch.put(prop.getName(), i);    println("case " + i + ":");    pushDepth();    println("if (name" + n + " == null) {");    println("  name" + n + " = new " + name + "();");    println("  name" + n + ".value = value;");    if (isPublic)      println("  name" + n + "._value = _value;");    println("  name" + n + ".hasDispatch = has" + n + ";");    println("  name" + n + ".setDispatch = set" + n + ";");    println("  name" + n + ".delId = " + n + ";");    println("}");    println("return name" + n + ";");    popDepth();    i += 1;    ESMethodDescriptor md = prop.getNamedReadMethod();    if (md == null)      return i;    println("case " + i + ":");    pushDepth();    named.get = i;    Method method = md.getMethod();    if (Modifier.isStatic(method.getModifiers()) && ! md.isStaticVirtual())      staticHasDispatch.put(prop.getName(), i - 1);        Class resultClass = method.getReturnType();    print("return ");    startJavaToES(resultClass);    int p = startProp(md);    if (p > 0)      print(", ");    print("name.toJavaString())");    endJavaToES(resultClass);    println(";");    popDepth();     return i + 1;  }  private int doHasProperty(int i, ESPropertyDescriptor prop)    throws IOException  {    Field field = prop.getESField();    ESMethodDescriptor md = prop.getESReadMethod();    if (field != null && ! Modifier.isPublic(field.getModifiers()))      field = null;    if (md == null && field == null)      return i;        hasDispatch.put(prop.getName(), i);        println("case " + i + ":");    pushDepth();    if (field != null) {      Class resultClass = field.getType();      print("return ");      startJavaToES(resultClass);      if (isPublic && field.getDeclaringClass().getName().equals(cl.getName()))        print("_value.");      else if (Modifier.isStatic(field.getModifiers()))        print(toJavaClassName(field.getDeclaringClass().getName()) + ".");      else        print("((" + toJavaClassName(field.getDeclaringClass().getName()) + ") value).");      print(field.getName());      endJavaToES(resultClass);      println(";");      popDepth();            if (Modifier.isStatic(field.getModifiers()))        staticHasDispatch.put(prop.getName(), i);            return i + 1;    }        Method method = md.getMethod();        if (Modifier.isStatic(method.getModifiers()) && ! md.isStaticVirtual())      staticHasDispatch.put(prop.getName(), i);          print("return ");    Class resultClass = method.getReturnType();        startJavaToES(resultClass);    int p = startProp(md);    print(")");    endJavaToES(resultClass);    println(";");    popDepth();    return i + 1;  }    private void printSetProperty() throws IOException  {    println();    println("public void setProperty(ESString name, ESBase newValue)");    println("  throws Throwable");    println("{");    pushDepth();    println("ESBase temp;");    println("switch (setDispatch.get(name)) {");        PropertyDescriptor []props = beanInfo.getPropertyDescriptors();    int index = 0;    for (int i = 0; i < props.length; i++) {      if (props[i] instanceof NamedPropertyDescriptor) {        index = doSetNamedProperty(index,                                   (NamedPropertyDescriptor) props[i]);      }      else if (props[i] instanceof ESIndexedPropertyDescriptor) {        index = doSetIndexProperty(index,                                   (ESIndexedPropertyDescriptor) props[i]);      }      else if (props[i] instanceof ESPropertyDescriptor)        index = doSetProperty(index, (ESPropertyDescriptor) props[i]);      else        throw new RuntimeException();    }    println("default:");    println("  return;");    println("}");    popDepth();    println("}");  }  private int doSetNamedProperty(int i, NamedPropertyDescriptor prop)    throws IOException  {    Named named = (Named) namedProperties.get(prop.getName());    if (named == null)      return i;        int n = named.n;    ESMethodDescriptor md = prop.getNamedWriteMethod();    if (md == null)      return i;    println("case " + i + ":");    pushDepth();    named.set = i;        int p = startProp(md);    Class []param = md.getParameterTypes();        if (p != 0)      print(", ");    print("name.toJavaString(), ");    printValueToJava(param[1], "newValue");    println(");");    println("return;");    popDepth();    return i + 1;  }  private int doSetIndexProperty(int i, ESIndexedPropertyDescriptor prop)    throws IOException  {    Named named = (Named) namedProperties.get(prop.getName());    if (named == null)      return i;        int n = named.n;    ESMethodDescriptor md = prop.getESWriteMethod();    if (md == null)      return i;    println("case " + i + ":");    pushDepth();    named.set = i;        int p = startProp(md);    Class []param = md.getParameterTypes();        if (p != 0)      print(", ");    print("name.toInt32(), ");    printValueToJava(param[1], "newValue");    println(");");    println("return;");    popDepth();    return i + 1;  }  private int doSetProperty(int i, ESPropertyDescriptor prop)    throws IOException  {    ESMethodDescriptor md = prop.getESWriteMethod();    Field field = prop.getESField();    if (field != null && Modifier.isFinal(field.getModifiers()))      field = null;    if (md == null && field == null)      return i;    println("case " + i + ":");    pushDepth();        setDispatch.put(prop.getName(), i);    if (field != null) {      Class resultClass = field.getType();      if (isPublic)        print("_value.");      else        print("((" + field.getDeclaringClass().getName() + ") value).");      print(field.getName());      print(" = ");      printValueToJava(resultClass, "newValue");      println(";");      println("return;");      popDepth();      return i + 1;    }        Method method = md.getMethod();        if (Modifier.isStatic(method.getModifiers()) && ! md.isStaticVirtual())      staticSetDispatch.put(prop.getName(), i);        Class []param = md.getParameterTypes();        int p = startProp(md);    if (p != 0)      print(", ");    printValueToJava(param[0], "newValue");    println(");");    println("return;");        popDepth();    return i + 1;  }    private void printKeys() throws IOException  {    println();    println("public java.util.Iterator keys()");    println("  throws Throwable");    println("{");    pushDepth();    println("switch (delId) {");    ESMethodDescriptor md = beanInfo.iterator;    if (md != null) {      println("case -1:");      print("  return Call.toESIterator(");      startProp(md);      println("));");    }    PropertyDescriptor []props = beanInfo.getPropertyDescriptors();    for (int i = 0; i < props.length; i++) {      if (props[i] instanceof NamedPropertyDescriptor)        printNamedKey((NamedPropertyDescriptor) props[i]);    }        println("default:");    println("  return super.keys();");    println("}");    popDepth();    println("}");  }  private void printNamedKey(NamedPropertyDescriptor prop)    throws IOException  {    ESMethodDescriptor md = prop.getNamedIteratorMethod();    if (md == null)      return;    Named named = (Named) namedProperties.get(prop.getName());    println("case " + named.n + ":");    pushDepth();    print("return Call.toESIterator(");    int p = startProp(md);    println("));");    popDepth();  }    private void printDeletes() throws IOException  {    println();    println("public ESBase delete(ESString key)");    println("  throws Throwable");    println("{");    pushDepth();    println("switch (delId) {");    PropertyDescriptor []props = beanInfo.getPropertyDescriptors();    for (int i = 0; i < props.length; i++) {      if (props[i] instanceof NamedPropertyDescriptor)        printNamedDelete((NamedPropertyDescriptor) props[i]);    }        println("default:");    println("  return ESBoolean.FALSE;");    println("}");    popDepth();    println("}");  }  private void printNamedDelete(NamedPropertyDescriptor prop)    throws IOException  {    ESMethodDescriptor md = prop.getNamedRemoveMethod();    if (md == null)      return;    Named named = (Named) namedProperties.get(prop.getName());    println("case " + named.n + ":");    pushDepth();    int p = startProp(md);    if (p > 0)      print(", ");    println("key.toJavaString());");    println("return ESBoolean.TRUE;");    popDepth();  }  /**   * Prints all the accessible methods in this object.   */  private void printMethods() throws IOException  {    println();    println("public ESBase call(Call call, int length, int n)");    println("  throws Throwable");    println("{");    pushDepth();    println("ESBase temp;");    println("switch (n) {");        ArrayList overload = (ArrayList) beanInfo._methodMap.get("call");    if (overload != null)      printMethod(-1, "call", overload, null);    // Print the constructor (code -2)    ArrayList create = (ArrayList) beanInfo._staticMethodMap.get("create");    ArrayList call = (ArrayList) beanInfo._staticMethodMap.get("call");    if (create != null)      printMethod(-2, "create", create, null);    else if (call != null)      printMethod(-2, "call", create, null);    else {      println("case -2:");      println("  return construct(call, length);");    }        Iterator iter = beanInfo._methodMap.entrySet().iterator();    int i = 0;    while (iter.hasNext()) {      Map.Entry entry = (Map.Entry) iter.next();      overload = (ArrayList) entry.getValue();      String name = (String) entry.getKey();      i = printMethod(i, name, overload, methodDispatch);    }        iter = beanInfo._staticMethodMap.entrySet().iterator();    while (iter.hasNext()) {      Map.Entry entry = (Map.Entry) iter.next();      overload = (ArrayList) entry.getValue();      String name = (String) entry.getKey();      i = printMethod(i, name, overload, staticMethodDispatch);    }    println("}");    println("return ESBase.esUndefined;");    popDepth();    println("}");  }  /**   * Prints a method in a method dispatch.   */  private int printMethod(int i, String name, ArrayList overload,                          IntMap dispatch)    throws IOException  {    ESMethodDescriptor []last = null;    if (overload == null)      return i;        for (int j = 0; j < overload.size(); j++) {      last = (ESMethodDescriptor []) overload.get(j);    }    if (last == null) {      return i;    }    if (i > -100) {      println("case " + i + ":");      pushDepth();      if (dispatch != null)        dispatch.put(name, i++);    }    if (overload.size() > 2) {      ESMethodDescriptor []mds = (ESMethodDescriptor []) overload.get(2);      for (int j = 0; mds != null && j < mds.length; j++) {        Class []cl = mds[j].getParameterTypes();        int p = cl.length - 2;        if (cl[0].getName().equals("com.caucho.es.Call") &&            cl[1].getName().equals("int")) {          printMethod(mds[j], dispatch == null);          popDepth();          return i;        }      }    }    for (int j = 0; j < overload.size(); j++) {      Object o = overload.get(j);      if (o == null)        continue;      ESMethodDescriptor []mds = (ESMethodDescriptor []) o;      if (mds != last) {        println("if (length <= " + j + ") {");        pushDepth();      }      if (mds.length == 1)        printMethod(mds[0], dispatch == null);      else {        String var = "dispatch" + overloadDispatch.size();                overloadDispatch.add(mds);        println("switch (" + var + ".select(call, length)) {");        for (int k = 0; k < mds.length; k++) {          println("case " + k + ":");          pushDepth();          printMethod(mds[k], dispatch == null);          popDepth();        }        println("default:");        println("  throw new ESException(\"no matching method " + mds[0].getName() + "\");");        println("}");      }            if (mds != last) {        popDepth();        println("}");      }    }    if (i > -100) {      popDepth();    }        return i;  }  /**   * Print a single method based on a method descriptor.  The arguments   * are assumed to come from a Call object.   *   * @param md the method descriptor.   */  private void printMethod(ESMethodDescriptor md, boolean isProp)    throws IOException  {    boolean hasThrowable = hasException(md.getMethod().getExceptionTypes(),                                        Throwable.class);    /*    if (hasThrowable) {      println("try {");      pushDepth();    }    */        Class returnCl = md.getReturnType();    if (! returnCl.getName().equals("void")) {      print("return ");      startJavaToES(returnCl);    }    Class []param = md.getParameterTypes();        int p;    if (isProp)      p = startProp(md);    else      p = startCall(md);    if (param.length == 2 &&        param[0].getName().equals("com.caucho.es.Call") &&        param[1].getName().equals("int")) {      if (p > 0)        print(", ");      print("call, length");    }    else {      for (int j = 0; j < param.length; j++) {        if (j + p > 0)          print(", ");              printArgToJava(param[j], j);      }    }    if (returnCl.getName().equals("void")) {      println(");");      println("return ESBase.esUndefined;");    }    else {      print(")");      endJavaToES(returnCl);      println(";");    }    /*    if (hasThrowable) {      popDepth();      println("} catch (Exception e) {");      println("  throw e;");      println("} catch (RuntimeException e) {");      println("  throw e;");      println("} catch (Error e) {");

⌨️ 快捷键说明

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