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

#ifndef __java_beans_beancontext_BeanContextServicesSupport$BCSSProxyServiceProvider__
#define __java_beans_beancontext_BeanContextServicesSupport$BCSSProxyServiceProvider__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace beans
    {
      namespace beancontext
      {
          class BeanContextServiceProvider;
          class BeanContextServiceRevokedEvent;
          class BeanContextServices;
          class BeanContextServicesSupport;
          class BeanContextServicesSupport$BCSSProxyServiceProvider;
      }
    }
  }
}

class java::beans::beancontext::BeanContextServicesSupport$BCSSProxyServiceProvider : public ::java::lang::Object
{

public: // actually package-private
  BeanContextServicesSupport$BCSSProxyServiceProvider(::java::beans::beancontext::BeanContextServicesSupport *, ::java::beans::beancontext::BeanContextServiceProvider *);
public:
  virtual ::java::util::Iterator * getCurrentServiceSelectors(::java::beans::beancontext::BeanContextServices *, ::java::lang::Class *);
  virtual ::java::lang::Object * getService(::java::beans::beancontext::BeanContextServices *, ::java::lang::Object *, ::java::lang::Class *, ::java::lang::Object *);
  virtual void releaseService(::java::beans::beancontext::BeanContextServices *, ::java::lang::Object *, ::java::lang::Object *);
  virtual void serviceRevoked(::java::beans::beancontext::BeanContextServiceRevokedEvent *);
private:
  static const jlong serialVersionUID = 7078212910685744490LL;
  ::java::beans::beancontext::BeanContextServiceProvider * __attribute__((aligned(__alignof__( ::java::lang::Object)))) provider;
public: // actually package-private
  ::java::beans::beancontext::BeanContextServicesSupport * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __java_beans_beancontext_BeanContextServicesSupport$BCSSProxyServiceProvider__
