RFR(L): 8218628: Add detailed message to NullPointerException describing what is null.

David Holmes david.holmes at oracle.com
Fri Feb 8 00:14:30 UTC 2019


In 8/02/2019 10:05 am, David Holmes wrote:
> Hi Volker,

Aaarggh!! Sorry Volker and Goetz. No idea where that came from.

David
-----

> You know I'm not going to be a big fan of this :), but as long as we 
> don't pay for it if we don't want it, then that's okay. (I'm still 
> trying to gauge that)
> 
> I have a little test for this that I ran through your patch:
> 
> public class NPE {
>    static class B {
>      C b() { return null; }
>    }
>    static class C {
>      int c(Object o, String s) {  return 0; }
>    }
> 
>    public static void main(String[] args) {
>      int x  = a().b().c(d(), e().toString());
>    }
> 
>    static B a() { return null; }
>    static Object d() { return null; }
>    static Object e() { return null; }
> 
> }
> 
> and the result was a bit confusing for me:
> 
> java.lang.NullPointerException: while trying to invoke the method 
> NPE$B.b(()LNPE$C;) of a null object returned from NPE.a(()LNPE$B;)
> 
> The placement and format of the return type descriptors obfuscates 
> things to me - especially the Lxxx; format. Can we make that more Java 
> programmer friendly eg:
> 
> "while trying to invoke the method 'NPE$C NPE$B.b()' ..."
> 
> though I think trying to produce signatures within the message is going 
> to be very awkward in the general case. The key part is the "method 
> NPE.b() ... returned from NPE.a()"
> 
> Also "of a null object" would read better as "on a null reference".
> 
> 
> A couple of initial comments
> 
> First you will need to file a CSR request for the new product flags.
> 
> Second, I don't understand why you need to call into the VM with 
> JVM_SetDefaultMessage, to set a field in the Java object? Why isn't that 
> done in Java?
> 
> Thanks,
> David
> 
> On 8/02/2019 2:43 am, Lindenmaier, Goetz wrote:
>> 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 core-libs-dev mailing list