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

#ifndef __java_security_UnresolvedPermission__
#define __java_security_UnresolvedPermission__

#pragma interface

#include <java/security/Permission.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Permission;
        class PermissionCollection;
        class UnresolvedPermission;
      namespace cert
      {
          class Certificate;
      }
    }
  }
}

class java::security::UnresolvedPermission : public ::java::security::Permission
{

public:
  UnresolvedPermission(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, JArray< ::java::security::cert::Certificate * > *);
  jboolean implies(::java::security::Permission *);
  jboolean equals(::java::lang::Object *);
  jint hashCode();
  ::java::lang::String * getActions();
  ::java::lang::String * toString();
  ::java::security::PermissionCollection * newPermissionCollection();
  ::java::lang::String * getUnresolvedType();
  ::java::lang::String * getUnresolvedName();
  ::java::lang::String * getUnresolvedActions();
  JArray< ::java::security::cert::Certificate * > * getUnresolvedCerts();
private:
  static const jlong serialVersionUID = -4821973115467008846LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::security::Permission)))) actions;
  JArray< ::java::security::cert::Certificate * > * certs;
public: // actually package-private
  ::java::lang::String * type;
private:
  ::java::lang::String * name;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_UnresolvedPermission__
