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

#ifndef __java_util_concurrent_Executors$PrivilegedCallableUsingCurrentClassLoader__
#define __java_util_concurrent_Executors$PrivilegedCallableUsingCurrentClassLoader__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class AccessControlContext;
    }
  }
}

class java::util::concurrent::Executors$PrivilegedCallableUsingCurrentClassLoader : public ::java::lang::Object
{

public: // actually package-private
  Executors$PrivilegedCallableUsingCurrentClassLoader(::java::util::concurrent::Callable *);
public:
  ::java::lang::Object * call();
public: // actually package-private
  static ::java::lang::ClassLoader * access$0(::java::util::concurrent::Executors$PrivilegedCallableUsingCurrentClassLoader *);
  static ::java::util::concurrent::Callable * access$1(::java::util::concurrent::Executors$PrivilegedCallableUsingCurrentClassLoader *);
  static void access$2(::java::util::concurrent::Executors$PrivilegedCallableUsingCurrentClassLoader *, ::java::lang::Object *);
  static void access$3(::java::util::concurrent::Executors$PrivilegedCallableUsingCurrentClassLoader *, ::java::lang::Exception *);
private:
  ::java::lang::ClassLoader * __attribute__((aligned(__alignof__( ::java::lang::Object)))) ccl;
  ::java::security::AccessControlContext * acc;
  ::java::util::concurrent::Callable * task;
  ::java::lang::Object * result;
  ::java::lang::Exception * exception;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_Executors$PrivilegedCallableUsingCurrentClassLoader__
