Archie Cobbs wrote:
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

Reply via email to