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

#ifndef __java_beans_SimpleBeanInfo__
#define __java_beans_SimpleBeanInfo__

#pragma interface

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

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

class java::beans::SimpleBeanInfo : public ::java::lang::Object
{

public:
  SimpleBeanInfo();
  virtual ::java::beans::BeanDescriptor * getBeanDescriptor();
  virtual JArray< ::java::beans::EventSetDescriptor * > * getEventSetDescriptors();
  virtual jint getDefaultEventIndex();
  virtual JArray< ::java::beans::PropertyDescriptor * > * getPropertyDescriptors();
  virtual jint getDefaultPropertyIndex();
  virtual JArray< ::java::beans::MethodDescriptor * > * getMethodDescriptors();
  virtual JArray< ::java::beans::BeanInfo * > * getAdditionalBeanInfo();
  virtual ::java::awt::Image * getIcon(jint);
  virtual ::java::awt::Image * loadImage(::java::lang::String *);
  static ::java::lang::Class class$;
};

#endif // __java_beans_SimpleBeanInfo__
