summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2003-03-16 13:57:49 +0000
committerMark Wielaard <mark@klomp.org>2003-03-16 13:57:49 +0000
commit160b3aeca1741fdf348ad3687fba23526bfe7ae1 (patch)
treefeeac203e18269ce17fc688b15f3eed0845d1b7b
parent735fe38ea9ca217596a03787538b9d41507be788 (diff)
downloadclasspath-160b3aeca1741fdf348ad3687fba23526bfe7ae1.tar.gz
2003-03-15 Jeroen Frijters <jeroen@sumatra.nl>
* vm/reference/java/lang/VMClassLoader.java (loadClass): Changed documentation to make clear null can be returned to signal that the class wasn't found. * java/lang/ClassLoader.java (loadClass(String,boolean)): Added check for null return value from VMClassLoader.loadClass. * vm/reference/java/lang/Class.java (forName(String,boolean,ClassLoader)): Likewise. * NEWS: Add note about VM interface changes.
-rw-r--r--ChangeLog12
-rw-r--r--NEWS7
-rw-r--r--java/lang/ClassLoader.java27
-rwxr-xr-xvm/reference/java/lang/Class.java5
-rw-r--r--vm/reference/java/lang/VMClassLoader.java6
5 files changed, 43 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 0afc0033d..21c4b8805 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2003-03-15 Jeroen Frijters <jeroen@sumatra.nl>
+
+ * vm/reference/java/lang/VMClassLoader.java (loadClass): Changed
+ documentation to make clear null can be returned to signal that the
+ class wasn't found.
+ * java/lang/ClassLoader.java (loadClass(String,boolean)): Added check
+ for null return value from VMClassLoader.loadClass.
+ * vm/reference/java/lang/Class.java
+ (forName(String,boolean,ClassLoader)): Likewise.
+ * NEWS: Add note about VM interface changes.
+
2003-03-15 Aaron M. Renn <arenn@urbanophile.com>
* java/io/FileOutputStream - Fix 1.4 compatibility issue
@@ -37,7 +48,6 @@
(nativeReadBuf): offset, len to int, return int
(nativeAvailable): return int
-
2003-03-14 Michael Koch <konqueror@gmx.de>
* java/beans/beancontext/BeanContextServicesSupport.java
diff --git a/NEWS b/NEWS
index 1b5e4243f..5c9bfacf3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+New in release 0.06 (not-yet-released)
+* VMClassLoader.loadClass(), the bootstrap classloader called by
+ Class.forName() and ClassLoader.loadClass(), may now return null when
+ a class is not found instead of throwing a new ClassNotFoundException.
+ This is a performance optimization in some cases. This also changes
+ the Class.forName() reference code.
+
New in release 0.05 (2003/02/15)
* Supports free Java VMs Jikes RVM and Kissme out of the box, perhaps others.
* Supports GNU Crypto 1.1 as the official provider of cryptographic primitives
diff --git a/java/lang/ClassLoader.java b/java/lang/ClassLoader.java
index 15e007d2a..f30a15f17 100644
--- a/java/lang/ClassLoader.java
+++ b/java/lang/ClassLoader.java
@@ -288,21 +288,28 @@ public abstract class ClassLoader
if (c != null)
return c;
- // Can the class been loaded by a parent?
+ // Can the class be loaded by a parent?
try
+ {
+ if (parent == null)
{
- if (parent == null)
- return VMClassLoader.loadClass(name, resolve);
- return parent.loadClass(name, resolve);
+ c = VMClassLoader.loadClass(name, resolve);
+ if (c != null)
+ return c;
}
- catch (ClassNotFoundException e)
+ else
{
- // Still not found, we have to do it ourself.
- c = findClass(name);
- if (resolve)
- resolveClass(c);
- return c;
+ return parent.loadClass(name, resolve);
}
+ }
+ catch (ClassNotFoundException e)
+ {
+ }
+ // Still not found, we have to do it ourself.
+ c = findClass(name);
+ if (resolve)
+ resolveClass(c);
+ return c;
}
/**
diff --git a/vm/reference/java/lang/Class.java b/vm/reference/java/lang/Class.java
index 1ed01eb01..de2b5b240 100755
--- a/vm/reference/java/lang/Class.java
+++ b/vm/reference/java/lang/Class.java
@@ -187,7 +187,10 @@ public final class Class implements Serializable
if (cl != null)
sm.checkPermission(new RuntimePermission("getClassLoader"));
}
- return VMClassLoader.loadClass(name, initialize);
+ Class c = VMClassLoader.loadClass(name, initialize);
+ if (c != null)
+ return c;
+ throw new ClassNotFoundException(name);
}
return classloader.loadClass(name, initialize);
}
diff --git a/vm/reference/java/lang/VMClassLoader.java b/vm/reference/java/lang/VMClassLoader.java
index 77e2810c5..107f1745e 100644
--- a/vm/reference/java/lang/VMClassLoader.java
+++ b/vm/reference/java/lang/VMClassLoader.java
@@ -117,12 +117,14 @@ final class VMClassLoader
*
* @param name the class name to load
* @param resolve whether to resolve it
- * @return the class, loaded by the bootstrap classloader
+ * @return the class, loaded by the bootstrap classloader or null
+ * if the class wasn't found. Returning null is equivalent to throwing
+ * a ClassNotFoundException (but a possible performance optimization).
*/
static final Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
- throw new ClassNotFoundException(name);
+ return null;
}
/**