// remove all atttributes that are not essential
  public void removeAttributes() throws IOException {

    // Class level attributes
    if (attribute_info != null) {
      for (int i = attribute_info.size() - 1; i >= 0; i--) {

        AttributeEntry ae = (AttributeEntry) attribute_info.elementAt(i);
        String name = nameIndexToString(ae.getNameIndex());
        if (name.equals("SourceFile")) attribute_info.removeElementAt(i);
        else if (name.equals("InnerClasses")) ; // leave in
        else System.err.println("WARNING - Unknown Class File attribute " + name);
      }

      if (attribute_info.size() == 0) attribute_info = null;
    }
    attribute_info = null;

    // fields
    for (Enumeration e = getFields(); e.hasMoreElements(); ) {
      ClassMember member = (ClassMember) e.nextElement();

      Attributes attrs = member.attribute_info;

      if (attrs != null) {

        for (int i = attrs.size() - 1; i >= 0; i--) {

          AttributeEntry ae = (AttributeEntry) attrs.elementAt(i);
          String name = nameIndexToString(ae.getNameIndex());
          if (name.equals("ConstantValue")) ; // leave in
          else if (name.equals("Synthetic")) ; // leave in
          else System.err.println("WARNING - Unknown Field attribute " + name);
        }

        if (attrs.size() == 0) member.attribute_info = null;
      }
    }

    // methods
    for (Enumeration e = getMethods(); e.hasMoreElements(); ) {
      ClassMember member = (ClassMember) e.nextElement();

      Attributes attrs = member.attribute_info;

      if (attrs != null) {

        for (int i = attrs.size() - 1; i >= 0; i--) {

          AttributeEntry ae = (AttributeEntry) attrs.elementAt(i);
          String name = nameIndexToString(ae.getNameIndex());
          if (name.equals("Code")) processCodeAttribute(member, ae);
          else if (name.equals("Exceptions")) ; // leave in
          else if (name.equals("Deprecated")) ; // leave in
          else if (name.equals("Synthetic")) ; // leave in
          else System.err.println("WARNING - Unknown method attribute " + name);
        }

        if (attrs.size() == 0) member.attribute_info = null;
      }
    }
  }