| /* Copyright (C) 2005 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 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 |
| { |
| 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); |
| } |
| } |