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

#ifndef __java_beans_EventSetDescriptor__
#define __java_beans_EventSetDescriptor__

#pragma interface

#include <java/beans/FeatureDescriptor.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace beans
    {
        class EventSetDescriptor;
        class MethodDescriptor;
    }
  }
}

class java::beans::EventSetDescriptor : public ::java::beans::FeatureDescriptor
{

public:
  EventSetDescriptor(::java::lang::Class *, ::java::lang::String *, ::java::lang::Class *, ::java::lang::String *);
  EventSetDescriptor(::java::lang::Class *, ::java::lang::String *, ::java::lang::Class *, JArray< ::java::lang::String * > *, ::java::lang::String *, ::java::lang::String *);
  EventSetDescriptor(::java::lang::Class *, ::java::lang::String *, ::java::lang::Class *, JArray< ::java::lang::String * > *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  EventSetDescriptor(::java::lang::String *, ::java::lang::Class *, JArray< ::java::lang::reflect::Method * > *, ::java::lang::reflect::Method *, ::java::lang::reflect::Method *, ::java::lang::reflect::Method *);
  EventSetDescriptor(::java::lang::String *, ::java::lang::Class *, JArray< ::java::lang::reflect::Method * > *, ::java::lang::reflect::Method *, ::java::lang::reflect::Method *);
  EventSetDescriptor(::java::lang::String *, ::java::lang::Class *, JArray< ::java::beans::MethodDescriptor * > *, ::java::lang::reflect::Method *, ::java::lang::reflect::Method *);
  virtual ::java::lang::Class * getListenerType();
  virtual JArray< ::java::lang::reflect::Method * > * getListenerMethods();
  virtual JArray< ::java::beans::MethodDescriptor * > * getListenerMethodDescriptors();
  virtual ::java::lang::reflect::Method * getAddListenerMethod();
  virtual ::java::lang::reflect::Method * getRemoveListenerMethod();
  virtual ::java::lang::reflect::Method * getGetListenerMethod();
  virtual void setUnicast(jboolean);
  virtual jboolean isUnicast();
  virtual void setInDefaultEventSet(jboolean);
  virtual jboolean isInDefaultEventSet();
private:
  void checkAddListenerUnicast();
  void checkMethods();
  void findMethods(::java::lang::Class *, ::java::lang::Class *, JArray< ::java::lang::String * > *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  ::java::lang::reflect::Method * __attribute__((aligned(__alignof__( ::java::beans::FeatureDescriptor)))) addListenerMethod;
  ::java::lang::reflect::Method * removeListenerMethod;
  ::java::lang::Class * listenerType;
  JArray< ::java::beans::MethodDescriptor * > * listenerMethodDescriptors;
  JArray< ::java::lang::reflect::Method * > * listenerMethods;
  ::java::lang::reflect::Method * getListenerMethod;
  jboolean unicast;
  jboolean inDefaultEventSet;
public:
  static ::java::lang::Class class$;
};

#endif // __java_beans_EventSetDescriptor__
