Fixes bug libgcj/8170

Fixes bug libgcj/8170
       * java/lang/ClassLoader.java (loadClass): Don't rewrap
       ClassNotFoundException.
       * gnu/java/lang/MainThread.java (run): Chain NoClassDefFoundError.
       * gnu/gcj/runtime/NameFinder.java (remove_interpreter): Removed.
       (remove_internal): New field superceding remove_interpreter.
       (sanitizeStack): Remove all no-package classes starting with "_Jv_".
       Remove no-class methods starting with "_Jv_". And Replace null
       class or method names with the empty string. Stop at either the
       MainThread or a real Thread run() method.
       (newElement): Made static.
       * java/net/URLClassLoader.java (findClass): Throw
       ClassNotFoundExceptions including urls, plus parent using toString().
       (thisString): New field.
       (toString): New method.

From-SVN: r94935
This commit is contained in:
Mark Wielaard 2005-02-12 13:51:11 +00:00 committed by Mark Wielaard
parent 8ad833acc4
commit 0008978072
5 changed files with 110 additions and 43 deletions

View file

@ -1,5 +1,6 @@
/* URLClassLoader.java -- ClassLoader that loads classes from one or more URLs
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -958,7 +959,7 @@ public class URLClassLoader extends SecureClassLoader
resource = loader.getResource(resourceName);
}
if (resource == null)
throw new ClassNotFoundException(className + " not found in " + urls);
throw new ClassNotFoundException(className + " not found in " + this);
// Try to read the class data, create the CodeSource, Package and
// construct the class (and watch out for those nasty IOExceptions)
@ -1039,9 +1040,43 @@ public class URLClassLoader extends SecureClassLoader
}
catch (IOException ioe)
{
throw new ClassNotFoundException(className, ioe);
ClassNotFoundException cnfe;
cnfe = new ClassNotFoundException(className + " not found in " + this);
cnfe.initCause(ioe);
throw cnfe;
}
}
// Cached String representation of this URLClassLoader
private String thisString;
/**
* Returns a String representation of this URLClassLoader giving the
* actual Class name, the URLs that are searched and the parent
* ClassLoader.
*/
public String toString()
{
if (thisString == null)
{
StringBuffer sb = new StringBuffer();
sb.append(this.getClass().getName());
sb.append("{urls=[" );
URL[] thisURLs = getURLs();
for (int i = 0; i < thisURLs.length; i++)
{
sb.append(thisURLs[i]);
if (i < thisURLs.length - 1)
sb.append(',');
}
sb.append(']');
sb.append(", parent=");
sb.append(getParent());
sb.append('}');
thisString = sb.toString();
}
return thisString;
}
/**
* Finds the first occurrence of a resource that can be found. The locations