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

#ifndef __gnu_java_rmi_server_ActivatableRef__
#define __gnu_java_rmi_server_ActivatableRef__

#pragma interface

#include <gnu/java/rmi/server/UnicastRef.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace server
        {
            class ActivatableRef;
        }
      }
    }
  }
  namespace java
  {
    namespace rmi
    {
        class Remote;
      namespace activation
      {
          class ActivationID;
      }
      namespace server
      {
          class ObjID;
          class RMIClientSocketFactory;
      }
    }
  }
}

class gnu::java::rmi::server::ActivatableRef : public ::gnu::java::rmi::server::UnicastRef
{

public:
  ActivatableRef();
  ActivatableRef(::java::rmi::server::ObjID *, ::java::lang::String *, jint, ::java::rmi::server::RMIClientSocketFactory *);
  ActivatableRef(::java::rmi::server::ObjID *);
  virtual ::java::lang::String * getRefClass(::java::io::ObjectOutput *);
  virtual void readExternal(::java::io::ObjectInput *);
  virtual void writeExternal(::java::io::ObjectOutput *);
public: // actually protected
  virtual ::java::lang::Object * invokeCommon(::java::rmi::Remote *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *, jint, jlong);
private:
  static const jlong serialVersionUID = 1LL;
public: // actually package-private
  ::java::rmi::activation::ActivationID * __attribute__((aligned(__alignof__( ::gnu::java::rmi::server::UnicastRef)))) actId;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_server_ActivatableRef__
