Fix classloading in ConstructorCache #6233
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Use the SDK standard ClassLoaderHelper#getClass to try and load the given class from a ClassLoader.
Previously, we were only looking at the ClassLoader returned by ClassLoaderHelper#contextClassLoader which either returns the Thread's context ClassLoader, or the system ClassLoader if that isn't present. This is an issue because it's possible that neither of these ClassLoaders are correct; we should also be looking at the ClassLoader that loaded the calling class.
As part of this change, the internal Map used in ConstructorCache has been changed. Rather than doing a two-level mapping from String -> (Map of ClassLoader to Class), we have a single level mapping from String -> Class. Class is still referenced via a WeakReference so it is still free to be GC'd at any point.
Motivation and Context
Modifications
Testing
Screenshots (if appropriate)
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License