mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
8218628: Add detailed message to NullPointerException describing what is null
This is the implementation of JEP 358: Helpful NullPointerExceptions. Reviewed-by: coleenp, clanger, rschmelter, rriggs, forax, mr
This commit is contained in:
parent
6147018a0f
commit
d8c6516c92
15 changed files with 3643 additions and 7 deletions
|
@ -70,4 +70,35 @@ class NullPointerException extends RuntimeException {
|
|||
public NullPointerException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the detail message string of this throwable.
|
||||
*
|
||||
* <p> If a non-null message was supplied in a constructor it is
|
||||
* returned. Otherwise, an implementation specific message or
|
||||
* {@code null} is returned.
|
||||
*
|
||||
* @implNote
|
||||
* If no explicit message was passed to the constructor, and as
|
||||
* long as certain internal information is available, a verbose
|
||||
* description of the null reference is returned.
|
||||
* The internal information is not available in deserialized
|
||||
* NullPointerExceptions.
|
||||
*
|
||||
* @return the detail message string, which may be {@code null}.
|
||||
*/
|
||||
public String getMessage() {
|
||||
String message = super.getMessage();
|
||||
if (message == null) {
|
||||
return getExtendedNPEMessage();
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an extended exception message. This returns a string describing
|
||||
* the location and cause of the exception. It returns null for
|
||||
* exceptions where this is not applicable.
|
||||
*/
|
||||
private native String getExtendedNPEMessage();
|
||||
}
|
||||
|
|
36
src/java.base/share/native/libjava/NullPointerException.c
Normal file
36
src/java.base/share/native/libjava/NullPointerException.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
#include "jni.h"
|
||||
#include "jvm.h"
|
||||
|
||||
#include "java_lang_NullPointerException.h"
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_java_lang_NullPointerException_getExtendedNPEMessage(JNIEnv *env, jobject throwable)
|
||||
{
|
||||
return JVM_GetExtendedNPEMessage(env, throwable);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue