RFR(L): 8218628: Add detailed message to NullPointerException describing what is null.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Fri Feb 8 11:51:47 UTC 2019
Hi Christoph,
thanks for looking at this.
> src/java.base/share/classes/java/lang/NullPointerException.java:
> line 56:
> remove a space before the comment
fixed.
> line 62: private transient boolean lazyComputeDefaultMessage;
> I think the name for this variable is not well chosen. I'd prefer
> lazyComputeMessage, because it's not a default message, it's rather "the"
> message of the exception.
OK, removed 'default'
> Then, I think you should initialize the field right away in this line to true, no
> need to do it in the constructor. (Or can't that be done for transient fields?? )
No, it must be initialized to false because there is a second constructor that
uses a custom message (that was also the reason for the 'default' in the field name, it
only applies to the constructor without custom message)
> 122 private native void setDefaultMessage(String extendedMessage);
> Here, I agree with David, that you should do it in Java. Just use a shared secret,
> then you don't even need reflection...
> It also should not be "setDefaultMessage" but rather "setMessage".
Obviously, the problem is that the field is private. I see various ways to
implement this. Please give advice:
* reflection
* shared secret
* Add package visible "void setMessage (String msg)" to throwable.
Best regards,
Goetz.
>
> Best regards
> Christoph
>
>
> > -----Original Message-----
> > From: hotspot-runtime-dev <hotspot-runtime-dev-
> > bounces at openjdk.java.net> On Behalf Of Lindenmaier, Goetz
> > Sent: Donnerstag, 7. Februar 2019 17:43
> > To: hotspot-runtime-dev at openjdk.java.net; Java Core Libs <core-libs-
> > dev at openjdk.java.net>
> > Subject: [CAUTION] RFR(L): 8218628: Add detailed message to
> > NullPointerException describing what is null.
> >
> > Hi,
> >
> > since Java 5, our internal VM reports verbose null pointer exception
> > messages. I would like to contribute this feature to OpenJDK.
> >
> > With this change, messages as
> > "java.lang.NullPointerException: while trying to load from a null int array
> > loaded from local variable 'ia1'"
> > are printed. For more examples see the JBS bug or the test included.
> > https://bugs.openjdk.java.net/browse/JDK-8218628
> >
> > The messages are generated by parsing the bytecodes. For not to have any
> > overhead when the
> > NPE is allocated, the message is only generated when it is accessed by
> > getMessage() or
> > serialization. For this I added a field to NPE to indicate that the message still
> > needs to be
> > computed lazily.
> >
> > Please review:
> > http://cr.openjdk.java.net/~goetz/wr19/8218628-exMsg-NPE/01/
> > I'm happy to incorporate your comments.
> >
> > Best regards,
> > Goetz
> >
More information about the hotspot-runtime-dev
mailing list