Steven Augart wrote:
I think our implementation of java.lang.Class's newinstance() is incorrect. Specifically, Class.newinstance() uses reflection to invoke a class's zero-argument constructor and then, if it catches an InvocationTargetException, unwraps that exception, throwing whatever exception was originally thrown by the constructor.
The exact code we currently have is:
catch (InvocationTargetException e) { VMClass.throwException(e.getTargetException()); throw (InternalError) new InternalError ("VMClass.throwException returned").initCause(e); }
This has the effect that Class.newinstance() can throw any exception
at all, without any warning to the caller.
This is a well-known bug in the spec.. see
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4233093
Sun has yet to do anything about it.
IMHO in this case compatibility is best, however repulsive.
I have read the text of this, Archie, and I have to agree that we need to maintain compatibility (however repulsive) with the JDK. I'll prepare a separate doc fix patch to java.lang.Class so that this issue doesn't confuse others.
It is now the documented behaviour as of JDK 1.5.0rc1. (And it is *really annoying* to implement in a VM written in Java, like Jikes RVM).
Thanks for the quick reply, Archie.
--Steve Augart -- Steven Augart
Jikes RVM, a free, open source, Virtual Machine: http://oss.software.ibm.com/jikesrvm
_______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://lists.gnu.org/mailman/listinfo/classpath