From 9f9d678591e02ecaeae7b81eeefb0ba41c7b4dae Mon Sep 17 00:00:00 2001 From: Ravali Yatham Date: Tue, 7 Mar 2023 22:31:50 +0000 Subject: [PATCH] 8302791: Add specific ClassLoader object to Proxy IllegalArgumentException message Reviewed-by: alanb, mchung --- src/java.base/share/classes/java/lang/ClassLoader.java | 5 +++++ src/java.base/share/classes/java/lang/System.java | 4 ++++ src/java.base/share/classes/java/lang/reflect/Proxy.java | 2 +- .../share/classes/jdk/internal/access/JavaLangAccess.java | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/lang/ClassLoader.java b/src/java.base/share/classes/java/lang/ClassLoader.java index 2bc9a22700a..2e3d9e550e7 100644 --- a/src/java.base/share/classes/java/lang/ClassLoader.java +++ b/src/java.base/share/classes/java/lang/ClassLoader.java @@ -407,6 +407,11 @@ public abstract class ClassLoader { return nid; } + // Returns nameAndId string for exception message printing + String nameAndId() { + return nameAndId; + } + /** * Creates a new class loader of the specified name and using the * specified parent class loader for delegation. diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java index e8659f65c86..090ed6260cc 100644 --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -2663,6 +2663,10 @@ public final class System { Continuation continuation) { return StackWalker.newInstance(options, null, contScope, continuation); } + + public String getLoaderNameID(ClassLoader loader) { + return loader.nameAndId(); + } }); } } diff --git a/src/java.base/share/classes/java/lang/reflect/Proxy.java b/src/java.base/share/classes/java/lang/reflect/Proxy.java index 6064dcf5b6b..a2a9a03e6c4 100644 --- a/src/java.base/share/classes/java/lang/reflect/Proxy.java +++ b/src/java.base/share/classes/java/lang/reflect/Proxy.java @@ -878,7 +878,7 @@ public class Proxy implements java.io.Serializable { } if (type != c) { throw new IllegalArgumentException(c.getName() + - " referenced from a method is not visible from class loader"); + " referenced from a method is not visible from class loader: " + JLA.getLoaderNameID(ld)); } } diff --git a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java index 39adfb2130a..e1f7a4c2350 100644 --- a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java +++ b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java @@ -564,4 +564,9 @@ public interface JavaLangAccess { StackWalker newStackWalkerInstance(Set options, ContinuationScope contScope, Continuation continuation); + /** + * Returns '' @ if classloader has a name + * explicitly set otherwise @ + */ + String getLoaderNameID(ClassLoader loader); }