[15] RFR: 8248476: No helpful NullPointerException message after calling fillInStackTrace
Remi Forax
forax at univ-mlv.fr
Tue Jun 30 07:53:54 UTC 2020
----- Mail original -----
> De: "Goetz Lindenmaier" <goetz.lindenmaier at sap.com>
> À: "Christoph Dreis" <christoph.dreis at freenet.de>, "hotspot-runtime-dev" <hotspot-runtime-dev at openjdk.java.net>
> Envoyé: Lundi 29 Juin 2020 14:07:08
> Objet: RE: [15] RFR: 8248476: No helpful NullPointerException message after calling fillInStackTrace
[...]
> An alternative fix I could imagine would be to
> override fillInStackTrace in NPE.java. It could
> call getMessage() and then super.fillInStackTrace,
> and return a new exception with the message.
overriding fillInStackTrace() and marking it when it is called twice is the other solution.
> But this would also compute the message in cases where it is not printed.
you don't need that, you can change the field Throwable.stackTrace with a marker object not unlike UNASSIGNED_STACK to detect if NPE.fillInStackTrace is called twice,
but as is said earlier, it's not a small change because Throwable should stay thread safe and serializable.
So i agree with you and Christoph that the "best" solution is to document that null.fillInStackTrace() doesn't get a detailed error message, apart if someone has a better fix.
>
> Best regards,
> Goetz.
Rémi
>
>> -----Original Message-----
>> From: Christoph Dreis <christoph.dreis at freenet.de>
>> Sent: Monday, June 29, 2020 1:28 PM
>> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; hotspot-runtime-
>> dev at openjdk.java.net
>> Subject: Re: [15] RFR: 8248476: No helpful NullPointerException message
>> after calling fillInStackTrace
>>
>> Hi Goetz,
>>
>> > If changing the stack trace by calling fillInStackTrace in user code, the
>> > NPE algorithm lacks the proper information to compute the message.
>> > Thus, we must omit it after that call.
>>
>> > I implement this by checking for a call to fillInStackTrace at the bci
>> > recorded in the exception.
>> > http://cr.openjdk.java.net/~goetz/wr20/8248476-NPE_fillInStackTrace-
>> jdk15/01/
>>
>> I tried this when reporting the issue already. The problem with this is, that it
>> suppresses any valid exception.
>>
>> E.g. the following example would not throw any helpful NPE anymore.
>>
>> public class Main {
>> public static void main(String[] args) {
>> NullPointerException ex = null;
>> ex.fillInStackTrace();
>> }
>> }
>>
>> Cheers,
>> Christoph
>>
More information about the hotspot-runtime-dev
mailing list