Add MethodHandle support to the ProviderToInternalFactoryAdapter
#1887
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.
Add MethodHandle support to the
ProviderToInternalFactoryAdapter
This follows the pattern of how
InjectorImpl.getProvider
works and calls into the same method for generating a provider subtype. There are 2 critical differenceslinked
flag totrue
for these 'Scoped' providers.dependency
is inferred from theInternalContext.getDependency
methodThe latter point adds some non-trivial complexity since
getHandle
acceptsDependency
as a parameter and generally specializes behavior on it (checks if it is nullable, used in error messages, raw types are used for proxies and error messages). So we use the 'callsite' trick to bind the implementation to a patchable callsite that we can update whenever we see a new dependency.The callsite will be implemented as a
tableSwitch
when possible and a hashmap holding method handles otherwise (<jdk17).