RFR 8187222 : ClassLoader.getSystemClassLoader not clear if recursive initialization leads to ISE or unspecified error

Brent Christian brent.christian at oracle.com
Thu Nov 30 21:35:39 UTC 2017


Please review the following change:

Bug: https://bugs.openjdk.java.net/browse/JDK-8187222
Webrev: http://cr.openjdk.java.net/~bchristi/8187222/webrev.00/

The method description of ClassLoader.getSystemClassLoader() states (in 
regards to setting a custom system classloader):

"If circular initialization of the system class loader is detected then 
an unspecified error or exception is thrown."

This ambiguity in the method description can and should be removed.

The method also has a @throws tag:

* @throws  IllegalStateException
*          If invoked recursively during the construction of the class
*          loader specified by the "{@code java.system.class.loader}"
*          property.

JDK 8 threw an IllegalStateException.  This changed to an  InternalError 
in 9b111[1].

Throwing an IllegalStateException conforms to the @throws tag, and 
returns to the previous behavior of JDK 8 and (earlier on in) 9.  Also, 
as Alan points out in the bug, an InternalError looks like a bug in the 
JDK itself, whereas IllegalStateException better reflects that the issue 
likely lies in the custom classloader.

Automated build & test job passes cleanly.


1. https://bugs.openjdk.java.net/browse/JDK-8142968

More information about the core-libs-dev mailing list