8282776: Bad NullPointerException message when invoking an interface MethodHandle on a null receiver

Reviewed-by: psandoz
This commit is contained in:
Mandy Chung 2022-03-29 19:57:53 +00:00
parent 072f2c461e
commit 489b27d2c0

@ -416,9 +416,14 @@ sealed class DirectMethodHandle extends MethodHandle {
}
Object checkReceiver(Object recv) {
if (!caller.isInstance(recv)) {
String msg = String.format("Receiver class %s is not a subclass of caller class %s",
recv.getClass().getName(), caller.getName());
throw new IncompatibleClassChangeError(msg);
if (recv != null) {
String msg = String.format("Receiver class %s is not a subclass of caller class %s",
recv.getClass().getName(), caller.getName());
throw new IncompatibleClassChangeError(msg);
} else {
String msg = String.format("Cannot invoke %s with null receiver", member);
throw new NullPointerException(msg);
}
}
return recv;
}
@ -444,9 +449,14 @@ sealed class DirectMethodHandle extends MethodHandle {
@Override
Object checkReceiver(Object recv) {
if (!refc.isInstance(recv)) {
String msg = String.format("Receiver class %s does not implement the requested interface %s",
recv.getClass().getName(), refc.getName());
throw new IncompatibleClassChangeError(msg);
if (recv != null) {
String msg = String.format("Receiver class %s does not implement the requested interface %s",
recv.getClass().getName(), refc.getName());
throw new IncompatibleClassChangeError(msg);
} else {
String msg = String.format("Cannot invoke %s with null receiver", member);
throw new NullPointerException(msg);
}
}
return recv;
}