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

#ifndef __java_rmi_activation_ActivationGroupDesc$CommandEnvironment__
#define __java_rmi_activation_ActivationGroupDesc$CommandEnvironment__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace rmi
    {
      namespace activation
      {
          class ActivationGroupDesc$CommandEnvironment;
      }
    }
  }
}

class java::rmi::activation::ActivationGroupDesc$CommandEnvironment : public ::java::lang::Object
{

public:
  ActivationGroupDesc$CommandEnvironment(::java::lang::String *, JArray< ::java::lang::String * > *);
  virtual ::java::lang::String * getCommandPath();
  virtual JArray< ::java::lang::String * > * getCommandOptions();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
public: // actually package-private
  static const jlong serialVersionUID = 6165754737887770191LL;
private:
  static JArray< ::java::lang::String * > * NO_ARGS;
public: // actually package-private
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) command;
  JArray< ::java::lang::String * > * options;
public:
  static ::java::lang::Class class$;
};

#endif // __java_rmi_activation_ActivationGroupDesc$CommandEnvironment__
