From 489b27d2c0284f9248bfb0448950698a3f9dee36 Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Tue, 29 Mar 2022 19:57:53 +0000 Subject: [PATCH] 8282776: Bad NullPointerException message when invoking an interface MethodHandle on a null receiver Reviewed-by: psandoz --- .../java/lang/invoke/DirectMethodHandle.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java b/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java index e2106883e5a59..b8e1b48587b57 100644 --- a/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java +++ b/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java @@ -416,9 +416,14 @@ MethodHandle viewAsType(MethodType newType, boolean strict) { } 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 @@ MethodHandle viewAsType(MethodType newType, boolean strict) { @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; }