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

#ifndef __gnu_java_rmi_server_RMIClassLoaderImpl__
#define __gnu_java_rmi_server_RMIClassLoaderImpl__

#pragma interface

#include <java/rmi/server/RMIClassLoaderSpi.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace server
        {
            class RMIClassLoaderImpl;
            class RMIClassLoaderImpl$MyClassLoader;
        }
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class URL;
    }
    namespace rmi
    {
      namespace server
      {
          class RMIClassLoaderSpi;
      }
    }
  }
}

class gnu::java::rmi::server::RMIClassLoaderImpl : public ::java::rmi::server::RMIClassLoaderSpi
{

  RMIClassLoaderImpl();
public:
  static ::java::rmi::server::RMIClassLoaderSpi * getInstance();
  virtual ::java::lang::Class * loadClass(::java::lang::String *, ::java::lang::String *, ::java::lang::ClassLoader *);
  virtual ::java::lang::Class * loadProxyClass(::java::lang::String *, JArray< ::java::lang::String * > *, ::java::lang::ClassLoader *);
  virtual ::java::lang::ClassLoader * getClassLoader(::java::lang::String *);
  virtual ::java::lang::String * getClassAnnotation(::java::lang::Class *);
private:
  static ::gnu::java::rmi::server::RMIClassLoaderImpl * instance;
  static ::java::util::Map * cacheLoaders;
  static ::java::util::Map * cacheAnnotations;
  static ::gnu::java::rmi::server::RMIClassLoaderImpl$MyClassLoader * defaultClassLoader;
  static ::java::lang::String * defaultAnnotation;
  static ::java::net::URL * defaultCodebase;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_server_RMIClassLoaderImpl__
