Hi, Mandy It looks pretty good to me. Just a couple small things:
* StackTraceElement.java 379 ClassLoader loader = cls.getClassLoader0(); It looks as if 'loader' isn't used...? * Throwable.java 832 // VM to fill in StackTraceElement 833 getStackTraceElements(stackTrace); 834 // ensure the proper StackTraceElement initialization 835 for (StackTraceElement ste : stackTrace) { 836 ste.buildLoaderModuleClassName(); 837 } For my own curiosity, why is this buildLoaderModuleClassName() call needed? Thanks, -Brent On 10/25/16 4:10 PM, Mandy Chung wrote:
Webrev at: http://cr.openjdk.java.net/~mchung/jdk9/webrevs/6479237/webrev.00/ Specdiff: http://cr.openjdk.java.net/~mchung/jdk9/webrevs/6479237/specdiff/overview-summary.html This is a long-standing RFE for adding support for class loader names. It's #ClassLoaderNames on JSR 376 issue list where the proposal [1] has been implemented in jake for some time. This patch brings this change to jdk9. A short summary: - New constructors are added in ClassLoader, SecureClassLoader and URLClassLoader to specify the class loader name. - New ClassLoader::getName and StackTraceElement::getClassLoaderName method - StackTraceElement::toString is updated to include the name of the class loader and module of that frame in this format: <loader>/<module>/<fully-qualified-name>(<src>:<line>) The detail is in StackTraceElement::buildLoaderModuleClassName that compress the output string for cases when the loader has no name or the module is unnamed module. Another thing to mention is that VM sets the Class object when filling in a stack trace of a Throwable object. Then the library will build a String from the Class object for serialization purpose. Mandy [1] http://mail.openjdk.java.net/pipermail/jpms-spec-observers/2016-September/000550.html