// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_io_ObjectStreamClass__
#define __java_io_ObjectStreamClass__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace io
      {
        class NullOutputStream;
      }
    }
  }
}

class java::io::ObjectStreamClass : public ::java::lang::Object
{
public:
  static ::java::io::ObjectStreamClass *lookup (::java::lang::Class *);
public: // actually package-private
  static ::java::io::ObjectStreamClass *lookupForClassObject (::java::lang::Class *);
public:
  virtual ::java::lang::String *getName () { return name; }
  virtual ::java::lang::Class *forClass () { return clazz; }
  virtual jlong getSerialVersionUID () { return uid; }
  virtual JArray< ::java::io::ObjectStreamField *> *getFields ();
  virtual ::java::io::ObjectStreamField *getField (::java::lang::String *);
  virtual ::java::lang::String *toString ();
public: // actually package-private
  virtual jboolean hasWriteMethod ();
  virtual jboolean isSerializable ();
  virtual jboolean isExternalizable ();
  virtual jboolean isEnum ();
  virtual ::java::io::ObjectStreamClass *getSuper () { return superClass; }
  static JArray< ::java::io::ObjectStreamClass *> *getObjectStreamClasses (::java::lang::Class *);
  virtual jint getFlags () { return flags; }
  ObjectStreamClass (::java::lang::String *, jlong, jbyte, JArray< ::java::io::ObjectStreamField *> *);
  virtual void setClass (::java::lang::Class *, ::java::io::ObjectStreamClass *);
  virtual void setSuperclass (::java::io::ObjectStreamClass *);
  virtual void calculateOffsets ();
private:
  ::java::lang::reflect::Method *findMethod (JArray< ::java::lang::reflect::Method *> *, ::java::lang::String *, JArray< ::java::lang::Class *> *, ::java::lang::Class *, jboolean);
  static jboolean inSamePackage (::java::lang::Class *, ::java::lang::Class *);
  static ::java::lang::reflect::Method *findAccessibleMethod (::java::lang::String *, ::java::lang::Class *);
  void cacheMethods ();
  ObjectStreamClass (::java::lang::Class *);
  void setFlags (::java::lang::Class *);
  void setFields (::java::lang::Class *);
  jlong getClassUID (::java::lang::Class *);
  JArray< ::java::io::ObjectStreamField *> *getSerialPersistentFields (::java::lang::Class *);
public: // actually package-private
  virtual ::java::io::Externalizable *newInstance ();
  static JArray< ::java::io::ObjectStreamField *> *INVALID_FIELDS;
  static JArray< ::java::lang::Class *> *noArgs;
public:
  static JArray< ::java::io::ObjectStreamField *> *NO_FIELDS;
private:
  static ::java::util::Hashtable *classLookupTable;
  static ::gnu::java::io::NullOutputStream *nullOutputStream;
  static ::java::util::Comparator *interfaceComparator;
  static ::java::util::Comparator *memberComparator;
  static JArray< ::java::lang::Class *> *writeMethodArgTypes;
  ::java::io::ObjectStreamClass * __attribute__((aligned(__alignof__( ::java::lang::Object )))) superClass;
  ::java::lang::Class *clazz;
  ::java::lang::String *name;
  jlong uid;
  jbyte flags;
public: // actually package-private
  JArray< ::java::io::ObjectStreamField *> *fields;
  jint primFieldSize;
  jint objectFieldCount;
  ::java::lang::reflect::Method *readObjectMethod;
  ::java::lang::reflect::Method *readResolveMethod;
  ::java::lang::reflect::Method *writeReplaceMethod;
  ::java::lang::reflect::Method *writeObjectMethod;
  jboolean realClassIsSerializable;
  jboolean realClassIsExternalizable;
  JArray< ::java::io::ObjectStreamField *> *fieldMapping;
  ::java::lang::reflect::Constructor *firstNonSerializableParentConstructor;
private:
  ::java::lang::reflect::Constructor *constructor;
public: // actually package-private
  jboolean isProxyClass;
private:
  static const jlong serialVersionUID = -6120832682080437368LL;

  friend class java_io_ObjectStreamClass$MemberComparator;
  friend class java_io_ObjectStreamClass$InterfaceComparator;
  friend class java_io_ObjectStreamClass$2;
  friend class java_io_ObjectStreamClass$1;
public:

  static ::java::lang::Class class$;
};

#endif /* __java_io_ObjectStreamClass__ */
