gcc/libjava/gnu/gcj/runtime/BootClassLoader.java
Gary Benson a5c0f6fe87 URLClassLoader.java: Removed.
2007-01-15  Gary Benson  <gbenson@redhat.com>

	* java/net/URLClassLoader.java: Removed.
	* gnu/java/net/loader/Load_gcjlib.java: New file.
	* gnu/gcj/runtime/BootClassLoader.java: Ensure core
	URL handler is present in static executables.
	* sources.am, Makefile.in: Rebuilt.

From-SVN: r120791
2007-01-15 10:25:38 +00:00

81 lines
2.1 KiB
Java

/* Copyright (C) 2005, 2007 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package gnu.gcj.runtime;
import gnu.java.net.protocol.core.Handler;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
/**
* This is a helper for the bootstrap class loader. It is a
* URLClassLoader so that we can read a class path and re-use all the
* existing code for finding classes, extracting them from jars, etc.
* However, it is never called the way that an ordinary ClassLoader is
* called. For instance, loadClass() is never used.
*/
public final class BootClassLoader extends HelperClassLoader
{
// This forces the core URL handler to be included in statically
// linked executables. The line that adds core:/ to the search
// path fails otherwise.
static Class coreHandler = gnu.java.net.protocol.core.Handler.class;
BootClassLoader(String libdir)
{
// The BootClassLoader is the top of the delegation chain. It does not
// have a parent.
super((ClassLoader) null);
addDirectoriesFromProperty("java.endorsed.dirs");
addDirectoriesFromProperty("gnu.gcj.runtime.endorsed.dirs");
try
{
// Add core:/ to the end so any resources compiled into this
// executable may be found.
addURL(new URL("core", "", -1, "/"));
}
catch (java.net.MalformedURLException x)
{
// This should never happen.
throw new RuntimeException(x);
}
}
public Class bootLoadClass(String name)
throws ClassNotFoundException
{
Class c = findLoadedClass(name);
if (c == null)
{
try
{
// We could hack URLClassLoader to make this more
// efficient, if it mattered.
c = findClass(name);
}
catch (ClassNotFoundException _)
{
c = null;
}
}
return c;
}
public URL bootGetResource(String name)
{
return findResource(name);
}
public Enumeration bootGetResources(String name) throws IOException
{
return findResources(name);
}
}