The caller class returned by Reflection::getCallerClass was used to gain access 
to it's module in most cases and class loader in one case. I added a method to 
translate the caller class to caller module so that the decision of what module 
represents the caller with no stack frame is made in a single place. Calls made 
to caller.getModule() were replaced with getCallerModule(caller) which returns 
the system class loader unnamed module if the caller is null.

The one place a class loader was produced from the caller in getBundleImpl it 
was rewritten to route through the getCallerModule method:

        final ClassLoader loader = (caller != null) ?
                caller.getClassLoader() : getLoader(getCallerModule(caller));

A JNI test was added which calls getBundle to fetch a test bundle from a 
location added to the classpath, fetches a string out of the bundle and 
verifies it, and calls clearCache.

The javadoc was updated for the caller sensitive methods changed.

-------------

Commit messages:
 - Use the unnamed module defined to the system class loader instead of the
 - JDK-8280902 ResourceBundle::getBundle may throw NPE when invoked by JNI code 
with no caller frame

Changes: https://git.openjdk.java.net/jdk/pull/7663/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7663&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8280902
  Stats: 265 lines in 4 files changed: 254 ins; 3 del; 8 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7663.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7663/head:pull/7663

PR: https://git.openjdk.java.net/jdk/pull/7663

Reply via email to