On Thu, 2 Mar 2023 20:00:24 GMT, Mandy Chung <mch...@openjdk.org> wrote:
>>> Thanks @AlanBateman. Regarding the separator, Have seen this being used in >>> ClassLoader.java for nameAndId method. Hence used the same for consistency. >>> I've reformatted L886 now, Please kindly check. >> >> Thanks for checking, the updated version looks good. > > I suggest to add a `JavaLangAccess::getLoaderNameID(ClassLoader loader)` so > that Proxy (and other classes) can use the same representation. > > The patch will look like this: > > > diff --git a/src/java.base/share/classes/java/lang/ClassLoader.java > b/src/java.base/share/classes/java/lang/ClassLoader.java > index 2bc9a22700a..f412ecfa3ae 100644 > --- a/src/java.base/share/classes/java/lang/ClassLoader.java > +++ b/src/java.base/share/classes/java/lang/ClassLoader.java > @@ -407,6 +407,10 @@ public abstract class ClassLoader { > return nid; > } > > + 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 501ed47fcad..c138ea9fef5 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..4720e589efb 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,6 @@ public interface JavaLangAccess { > StackWalker newStackWalkerInstance(Set<StackWalker.Option> options, > ContinuationScope contScope, > Continuation continuation); > + > + String getLoaderNameID(ClassLoader loader); > } @mlchung - Thanks for suggesting this so as to reuse the existing `nameAndId` functionality in Proxy class. I've pushed new commit, Please kindly review. ------------- PR: https://git.openjdk.org/jdk/pull/12641