Lookup the given key from the given configuration, and provide bindings for the ScalaTrait to a class by that key.
Lookup the given key from the given configuration, and provide bindings for the ScalaTrait to a class by that key.
The end goal is to provide a binding for ScalaTrait
. The logic for finding the implementation goes like this:
- If the value of the configured key is provided
, this indicates the user will provide their own binding, so
return nothing.
- If the value of the configured key is a class that exists, then use that
- If the value of the configured key is not a class that exists, fail
- Otherwise if no configuration value is found for key, then if there is a class found with name defaultClassName
, use that
- Otherwise, use the class Default
If a class has been located, convert that to a binding, by the following rules:
- If it's a subclass of ScalaTrait
bind it directly
- Otherwise, if it's a subclass of JavaInterface
, bind that to JavaInterface
, and then also return a binding
of JavaAdapter
to ScalaTrait
- Otherwise, fail
The trait to bind
The Java interface for Java versions of the implementation
An adapter class that depends on JavaInterface
and provides ScalaTrait
An implementation of JavaInterface
that delegates to ScalaTrait
, for when the configured
class is not an instance of JavaInterface
.
The default implementation of ScalaTrait
if no user implementation has been provided
The environment to load classes from
The configuration
The key to look up the classname from the configuration
Zero or more bindings to provide ScalaTrait
Lookup the given key from the given configuration, and load it either as an instance of ScalaTrait, or JavaInterface.
Lookup the given key from the given configuration, and load it either as an instance of ScalaTrait, or JavaInterface.
If no user provided class can be found, then return Default.
- If the value of the configured key is provided
, this indicates the user will provide their own binding, so
return None.
- If the value of the configured key is a class that exists, then use that
- If the value of the configured key is not a class that exists, fail
- Otherwise if no configuration value is found for key, then if there is a class found with name defaultClassName
, use that
- Otherwise, use the class Default
If a class has been located, then return Some, according to the following rules:
- If it's a subclass of ScalaTrait
return that as Left
- Otherwise, if it's a subclass of JavaInterface
, return that as Right
- Otherwise, fail
The Scala trait to return
The Java interface for Java versions of the implementation
The default implementation of ScalaTrait
if no user implementation has been provided
The environment to load classes from
The configuration
The key to look up the classname from the configuration