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

#ifndef __java_lang_Throwable__
#define __java_lang_Throwable__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
          class CPStringBuilder;
      }
    }
  }
}

class java::lang::Throwable : public ::java::lang::Object
{

public:
  Throwable();
  Throwable(::java::lang::String *);
  Throwable(::java::lang::String *, ::java::lang::Throwable *);
  Throwable(::java::lang::Throwable *);
  virtual ::java::lang::String * getMessage();
  virtual ::java::lang::String * getLocalizedMessage();
  virtual ::java::lang::Throwable * getCause();
  virtual ::java::lang::Throwable * initCause(::java::lang::Throwable *);
  virtual ::java::lang::String * toString();
  virtual void printStackTrace();
  virtual void printStackTrace(::java::io::PrintStream *);
  virtual void printStackTrace(::java::io::PrintWriter *);
private:
  ::java::lang::String * stackTraceString();
  static void stackTraceStringBuffer(::gnu::java::lang::CPStringBuilder *, ::java::lang::String *, JArray< ::java::lang::StackTraceElement * > *, jint);
public:
  virtual ::java::lang::Throwable * fillInStackTrace();
  virtual JArray< ::java::lang::StackTraceElement * > * getStackTrace();
  virtual void setStackTrace(JArray< ::java::lang::StackTraceElement * > *);
private:
  static const jlong serialVersionUID = -3042686055658047285LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) detailMessage;
  ::java::lang::Throwable * cause;
  JArray< ::java::lang::StackTraceElement * > * stackTrace;
  ::java::lang::VMThrowable * vmState;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_Throwable__
