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

📄 objectcreator.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  /**   * Converts the given IDL name to class name.   *    * @param IDL the idl name.   *    */  protected static String toClassName(String prefix, String IDL)  {    String s = IDL;    int a = s.indexOf(':') + 1;    int b = s.lastIndexOf(':');    s = IDL.substring(a, b);    if (s.startsWith(OMG_PREFIX))      s = prefix + s.substring(OMG_PREFIX.length());    return s.replace('/', '.');  }  /**   * Converts the given IDL name to class name and tries to load the matching   * class. The OMG prefix (omg.org) is replaced by the java prefix org.omg. No   * other prefixes are added.   *    * @param IDL the idl name.   *    * @return the matching class or null if no such is available.   */  public static Class Idl2class(String IDL)  {    synchronized (m_classes)      {        Class c = (Class) m_classes.get(IDL);        if (c != null)          return c;        else          {            String s = IDL;            int a = s.indexOf(':') + 1;            int b = s.lastIndexOf(':');            s = IDL.substring(a, b);            if (s.startsWith(OMG_PREFIX))              s = JAVA_PREFIX + s.substring(OMG_PREFIX.length());            String cn = s.replace('/', '.');            try              {                c = forName(cn);                m_classes.put(IDL, c);                return c;              }            catch (ClassNotFoundException ex)              {                return null;              }          }      }  }  /**   * Converts the given IDL name to class name, tries to load the matching class   * and create an object instance with parameterless constructor. The OMG   * prefix (omg.org) is replaced by the java prefix org.omg. No other prefixes   * are added.   *    * @param IDL the idl name.   *    * @return instantiated object instance or null if such attempt was not   * successful.   */  public static java.lang.Object Idl2Object(String IDL)  {    Class cx = Idl2class(IDL);    try      {        if (cx != null)          return cx.newInstance();        else          return null;      }    catch (Exception ex)      {        return null;      }  }  /**   * Convert the class name to IDL or RMI name (repository id). If the class   * inherits from IDLEntity, ValueBase or SystemException, returns repository   * Id in the IDL:(..) form. If it does not, returns repository Id in the   * RMI:(..) form.   *    * @param cx the class for that the name must be computed.   *    * @return the idl or rmi name.   */  public static synchronized String getRepositoryId(Class cx)  {    String name = (String) m_names.get(cx);    if (name != null)      return name;    String cn = cx.getName();    if (!(IDLEntity.class.isAssignableFrom(cx)      || ValueBase.class.isAssignableFrom(cx) || SystemException.class.isAssignableFrom(cx)))      {        // Not an IDL entity.        name = Util.createValueHandler().getRMIRepositoryID(cx);      }    else      {        if (cn.startsWith(JAVA_PREFIX))          cn = OMG_PREFIX            + cn.substring(JAVA_PREFIX.length()).replace('.', '/');        else if (cn.startsWith(CLASSPATH_PREFIX))          cn = OMG_PREFIX            + cn.substring(CLASSPATH_PREFIX.length()).replace('.', '/');        name = "IDL:" + cn + ":1.0";      }    m_names.put(cx, name);    return name;  }  /**   * Insert the passed parameter into the given Any, assuming that the helper   * class is available. The helper class must have the "Helper" suffix and be   * in the same package as the class of the object being inserted.   *    * @param into the target to insert.   *    * @param object the object to insert. It can be any object as far as the   * corresponding helper is provided.   *    * @return true on success, false otherwise.   */  public static boolean insertWithHelper(Any into, Object object)  {    try      {        String helperClassName = object.getClass().getName() + "Helper";        Class helperClass = forName(helperClassName);        Method insert = helperClass.getMethod("insert", new Class[] {          Any.class, object.getClass() });        insert.invoke(null, new Object[] { into, object });        return true;      }    catch (Exception exc)      {        // Failed due some reason.        return false;      }  }  /**   * Insert the system exception into the given Any.   */  public static boolean insertSysException(Any into, SystemException exception)  {    try      {        BufferedCdrOutput output = new BufferedCdrOutput();        String m_exception_id = getRepositoryId(exception.getClass());        output.write_string(m_exception_id);        output.write_ulong(exception.minor);        CompletionStatusHelper.write(output, exception.completed);        String name = getDefaultName(m_exception_id);        GeneralHolder h = new GeneralHolder(output);        into.insert_Streamable(h);        RecordTypeCode r = new RecordTypeCode(TCKind.tk_except);        r.setId(m_exception_id);        r.setName(name);        into.type(r);        return true;      }    catch (Exception ex)      {        ex.printStackTrace();        return false;      }  }  /**   * Get the type name from the IDL string.   */  public static String getDefaultName(String idl)  {    int f1 = idl.lastIndexOf("/");    int p1 = (f1 < 0) ? 0 : f1;    int p2 = idl.indexOf(":", p1);    if (p2 < 0)      p2 = idl.length();    String name = idl.substring(f1 + 1, p2);    return name;  }  /**   * Insert this exception into the given Any. On failure, insert the UNKNOWN   * exception.   */  public static void insertException(Any into, Throwable exception)  {    boolean ok = false;    if (exception instanceof SystemException)      ok = insertSysException(into, (SystemException) exception);    else if (exception instanceof UserException)      ok = insertWithHelper(into, exception);    if (!ok)      ok = insertSysException(into, new UNKNOWN());    if (!ok)      throw new InternalError("Exception wrapping broken");  }  /**   * Find helper for the class with the given name.   */  public static Class findHelper(String idl)  {    synchronized (m_helpers)      {        Class c = (Class) m_helpers.get(idl);        if (c != null)          return c;        try          {            String helper = toHelperName(idl);            c = forName(helper);            m_helpers.put(idl, c);            return c;          }        catch (Exception ex)          {            return null;          }      }  }    /**   * Load the class with the given name. This method tries to use the context   * class loader first. If this fails, it searches for the suitable class   * loader in the caller stack trace. This method is a central point where all   * requests to find a class by name are delegated.   */  public static Class forName(String className) throws ClassNotFoundException  {    try      {        return Class.forName(className, true,                             Thread.currentThread().getContextClassLoader());      }    catch (ClassNotFoundException nex)      {        /**         * Returns the first user defined class loader on the call stack, or         * null when no non-null class loader was found.         */        Class[] ctx = VMStackWalker.getClassContext();        for (int i = 0; i < ctx.length; i++)          {            // Since we live in a class loaded by the bootstrap            // class loader, getClassLoader is safe to call without            // needing to be wrapped in a privileged action.            ClassLoader cl = ctx[i].getClassLoader();            try              {                if (cl != null)                  return Class.forName(className, true, cl);              }            catch (ClassNotFoundException nex2)              {                // Try next.              }          }      }    throw new ClassNotFoundException(className);  }}

⌨️ 快捷键说明

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