/** Create a new Namespace context. */
 Context2(Context2 parent) {
   if (parent == null) {
     prefixTable = new Hashtable();
     uriTable = new Hashtable();
     elementNameTable = null;
     attributeNameTable = null;
   } else setParent(parent);
 }
  /**
   * Start a new Namespace context.
   *
   * <p>Normally, you should push a new context at the beginning of each XML element: the new
   * context will automatically inherit the declarations of its parent context, but it will also
   * keep track of which declarations were made within this context.
   *
   * <p>The Namespace support object always starts with a base context already in force: in this
   * context, only the "xml" prefix is declared.
   *
   * @see #popContext
   */
  public void pushContext() {
    // JJK: Context has a parent pointer.
    // That means we don't need a stack to pop.
    // We may want to retain for reuse, but that can be done via
    // a child pointer.

    Context2 parentContext = currentContext;
    currentContext = parentContext.getChild();
    if (currentContext == null) {
      currentContext = new Context2(parentContext);
    } else {
      // JJK: This will wipe out any leftover data
      // if we're reusing a previously allocated Context.
      currentContext.setParent(parentContext);
    }
  }