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

#ifndef __gnu_java_beans_BeanInfoEmbryo__
#define __gnu_java_beans_BeanInfoEmbryo__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
          class BeanInfoEmbryo;
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Image;
    }
    namespace beans
    {
        class BeanDescriptor;
        class BeanInfo;
        class EventSetDescriptor;
        class IndexedPropertyDescriptor;
        class MethodDescriptor;
        class PropertyDescriptor;
    }
  }
}

class gnu::java::beans::BeanInfoEmbryo : public ::java::lang::Object
{

public:
  BeanInfoEmbryo();
  virtual ::java::beans::BeanInfo * getBeanInfo();
  virtual void setBeanDescriptor(::java::beans::BeanDescriptor *);
  virtual void setAdditionalBeanInfo(JArray< ::java::beans::BeanInfo * > *);
  virtual jboolean hasProperty(::java::beans::PropertyDescriptor *);
  virtual void addProperty(::java::beans::PropertyDescriptor *);
  virtual void addIndexedProperty(::java::beans::IndexedPropertyDescriptor *);
  virtual jboolean hasEvent(::java::beans::EventSetDescriptor *);
  virtual void addEvent(::java::beans::EventSetDescriptor *);
  virtual jboolean hasMethod(::java::beans::MethodDescriptor *);
  virtual void addMethod(::java::beans::MethodDescriptor *);
  virtual void setDefaultPropertyName(::java::lang::String *);
  virtual void setDefaultEventName(::java::lang::String *);
  virtual void setIcons(JArray< ::java::awt::Image * > *);
public: // actually package-private
  ::java::util::TreeMap * __attribute__((aligned(__alignof__( ::java::lang::Object)))) properties;
  ::java::util::Hashtable * events;
  ::java::util::Vector * methods;
  ::java::beans::BeanDescriptor * beanDescriptor;
  JArray< ::java::beans::BeanInfo * > * additionalBeanInfo;
  JArray< ::java::awt::Image * > * im;
  ::java::lang::String * defaultPropertyName;
  ::java::lang::String * defaultEventName;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_BeanInfoEmbryo__
