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

Reply via email to