Exemplo n.º 1
0
  /* returns a string consisting of formatted member names and values */
  public Object lookupMembers(Object o) throws NoSuchVariableException {
    Variable var = null;
    Value val = null;
    Variable[] mems = null;
    try {
      var = resolveToVariable(o);
      if (var != null) val = var.getValue();
      else val = resolveToValue(o);
      mems = val.getMembers(getSession());
    } catch (NullPointerException npe) {
      throw new NoSuchVariableException(o);
    } catch (PlayerDebugException pde) {
      throw new NoSuchVariableException(o); // not quite right...
    }

    StringBuilder sb = new StringBuilder();

    if (var != null) m_cache.appendVariable(sb, var, m_isolateId);
    else m_cache.appendVariableValue(sb, val, m_isolateId);

    boolean attrs = m_cache.propertyEnabled(DebugCLI.DISPLAY_ATTRIBUTES);
    if (attrs && var != null) ExpressionCache.appendVariableAttributes(sb, var);

    // [mmorearty] experimenting with hierarchical display of members
    String[] classHierarchy = val.getClassHierarchy(false);
    if (classHierarchy != null
        && getSession().getPreference(SessionManager.PREF_HIERARCHICAL_VARIABLES) != 0) {
      for (int c = 0; c < classHierarchy.length; ++c) {
        String classname = classHierarchy[c];
        sb.append(m_newline + "(Members of " + classname + ")"); // $NON-NLS-1$ //$NON-NLS-2$
        for (int i = 0; i < mems.length; ++i) {
          if (classname.equals(mems[i].getDefiningClass())) {
            sb.append(m_newline + " "); // $NON-NLS-1$
            m_cache.appendVariable(sb, mems[i], m_isolateId);
            if (attrs) ExpressionCache.appendVariableAttributes(sb, mems[i]);
          }
        }
      }
    } else {
      for (int i = 0; i < mems.length; i++) {
        sb.append(m_newline + " "); // $NON-NLS-1$
        m_cache.appendVariable(sb, mems[i], m_isolateId);
        if (attrs) ExpressionCache.appendVariableAttributes(sb, mems[i]);
      }
    }

    return sb.toString();
  }