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

#ifndef __java_lang_Package__
#define __java_lang_Package__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class URL;
    }
  }
}

class java::lang::Package : public ::java::lang::Object
{

public: // actually package-private
  Package(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::net::URL *);
  Package(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::net::URL *, ::java::lang::ClassLoader *);
public:
  virtual ::java::lang::String * getName();
  virtual ::java::lang::String * getSpecificationTitle();
  virtual ::java::lang::String * getSpecificationVersion();
  virtual ::java::lang::String * getSpecificationVendor();
  virtual ::java::lang::String * getImplementationTitle();
  virtual ::java::lang::String * getImplementationVersion();
  virtual ::java::lang::String * getImplementationVendor();
  virtual jboolean isSealed();
  virtual jboolean isSealed(::java::net::URL *);
  virtual jboolean isCompatibleWith(::java::lang::String *);
  static ::java::lang::Package * getPackage(::java::lang::String *);
  static JArray< ::java::lang::Package * > * getPackages();
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
  virtual ::java::lang::annotation::Annotation * getAnnotation(::java::lang::Class *);
  virtual JArray< ::java::lang::annotation::Annotation * > * getAnnotations();
  virtual JArray< ::java::lang::annotation::Annotation * > * getDeclaredAnnotations();
  virtual jboolean isAnnotationPresent(::java::lang::Class *);
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
  ::java::lang::String * implTitle;
  ::java::lang::String * implVendor;
  ::java::lang::String * implVersion;
  ::java::lang::String * specTitle;
  ::java::lang::String * specVendor;
  ::java::lang::String * specVersion;
  ::java::net::URL * sealed;
  ::java::lang::ClassLoader * loader;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_Package__
