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

#ifndef __gnu_java_beans_decoder_IndexContext__
#define __gnu_java_beans_decoder_IndexContext__

#pragma interface

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

class gnu::java::beans::decoder::IndexContext : public ::gnu::java::beans::decoder::AbstractContext
{

public: // actually package-private
  IndexContext(::java::lang::String *, jint);
public:
  virtual void addParameterObject(::java::lang::Object *);
  virtual void notifyStatement(::gnu::java::beans::decoder::Context *);
  virtual ::java::lang::Object * endContext(::gnu::java::beans::decoder::Context *);
  virtual jboolean subContextFailed();
  virtual void set(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * get(jint);
  virtual ::java::lang::Object * getResult();
private:
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::gnu::java::beans::decoder::AbstractContext)))) result;
  ::java::lang::Object * argument;
  jint index;
  jboolean isSetter;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_decoder_IndexContext__
