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

#ifndef __gnu_java_beans_decoder_AbstractContext__
#define __gnu_java_beans_decoder_AbstractContext__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace decoder
        {
            class AbstractContext;
            class Context;
        }
      }
    }
  }
}

class gnu::java::beans::decoder::AbstractContext : public ::java::lang::Object
{

public: // actually package-private
  AbstractContext();
public:
  virtual ::java::lang::String * getId();
  virtual void setId(::java::lang::String *);
  virtual jboolean isStatement();
  virtual void setStatement(jboolean);
  virtual void addParameterObject(::java::lang::Object *) = 0;
  virtual void notifyStatement(::gnu::java::beans::decoder::Context *) = 0;
  virtual ::java::lang::Object * endContext(::gnu::java::beans::decoder::Context *) = 0;
  virtual jboolean subContextFailed() = 0;
  virtual void set(jint, ::java::lang::Object *) = 0;
  virtual ::java::lang::Object * get(jint) = 0;
  virtual ::java::lang::Object * getResult() = 0;
private:
  jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) isStatement__;
  ::java::lang::String * id;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_decoder_AbstractContext__
