mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8248476: No helpful NullPointerException message after calling fillInStackTrace
Reported by christoph.dreis@freenet.de Reviewed-by: coleenp, dholmes, mchung
This commit is contained in:
parent
a640835c62
commit
8906904591
2 changed files with 109 additions and 9 deletions
|
@ -70,6 +70,27 @@ public class NullPointerException extends RuntimeException {
|
|||
super(s);
|
||||
}
|
||||
|
||||
// 0: no backtrace filled in, no message computed.
|
||||
// 1: backtrace filled in, no message computed.
|
||||
// 2: message computed
|
||||
private transient int extendedMessageState;
|
||||
private transient String extendedMessage;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public synchronized Throwable fillInStackTrace() {
|
||||
// If the stack trace is changed the extended NPE algorithm
|
||||
// will compute a wrong message. So compute it beforehand.
|
||||
if (extendedMessageState == 0) {
|
||||
extendedMessageState = 1;
|
||||
} else if (extendedMessageState == 1) {
|
||||
extendedMessage = getExtendedNPEMessage();
|
||||
extendedMessageState = 2;
|
||||
}
|
||||
return super.fillInStackTrace();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the detail message string of this throwable.
|
||||
*
|
||||
|
@ -89,7 +110,15 @@ public class NullPointerException extends RuntimeException {
|
|||
public String getMessage() {
|
||||
String message = super.getMessage();
|
||||
if (message == null) {
|
||||
return getExtendedNPEMessage();
|
||||
synchronized(this) {
|
||||
if (extendedMessageState == 1) {
|
||||
// Only the original stack trace was filled in. Message will
|
||||
// compute correctly.
|
||||
extendedMessage = getExtendedNPEMessage();
|
||||
extendedMessageState = 2;
|
||||
}
|
||||
return extendedMessage;
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue