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

#ifndef __gnu_java_beans_decoder_StaticMethodContext__
#define __gnu_java_beans_decoder_StaticMethodContext__

#pragma interface

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

class gnu::java::beans::decoder::StaticMethodContext : public ::gnu::java::beans::decoder::AbstractCreatableObjectContext
{

public: // actually package-private
  StaticMethodContext(::java::lang::String *, ::java::lang::Class *, ::java::lang::String *);
public:
  virtual void addParameterObjectImpl(::java::lang::Object *);
public: // actually protected
  virtual ::java::lang::Object * createObject(::gnu::java::beans::decoder::Context *);
private:
  ::java::util::ArrayList * __attribute__((aligned(__alignof__( ::gnu::java::beans::decoder::AbstractCreatableObjectContext)))) arguments;
  ::java::lang::Class * klass;
  ::java::lang::String * methodName;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_decoder_StaticMethodContext__
