Package com.google.inject.internal
Class InternalContext
- java.lang.Object
-
- com.google.inject.internal.InternalContext
-
- All Implemented Interfaces:
java.lang.AutoCloseable
final class InternalContext extends java.lang.Object implements java.lang.AutoCloseable
Internal context. Used to coordinate injections and support circular dependencies.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.Object,ConstructionContext<?>>
constructionContexts
private Dependency<?>
dependency
Keeps track of the type that is currently being requested for injection.private java.lang.Object[]
dependencyStack
Keeps track of the hierarchy of types needed during injection.private int
dependencyStackSize
private int
enterCount
The number of timesenter()
has been called + 1 for initial construction.private InjectorImpl.InjectorOptions
options
private java.lang.Object[]
toClear
A single element array to clear when theenterCount
hits0
.
-
Constructor Summary
Constructors Constructor Description InternalContext(InjectorImpl.InjectorOptions options, java.lang.Object[] toClear)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Should be called any any method that received an instance via InjectorImpl.enterContext().private void
doPushState(java.lang.Object dependencyOrKey, java.lang.Object source)
(package private) void
enter()
Should only be called by InjectorImpl.enterContext().(package private) <T> ConstructionContext<T>
getConstructionContext(java.lang.Object key)
(package private) Dependency<?>
getDependency()
(package private) java.util.List<DependencyAndSource>
getDependencyChain()
Returns the current dependency chain (all the state stored in the dependencyStack).(package private) InjectorImpl.InjectorOptions
getInjectorOptions()
(package private) void
popState()
Pops from the state without setting a dependency.(package private) void
popStateAndSetDependency(Dependency<?> newDependency)
Pops the current state & sets the new dependency.(package private) Dependency<?>
pushDependency(Dependency<?> dependency, java.lang.Object source)
Sets the new current dependency & adds it to the state.(package private) void
pushState(Key<?> key, java.lang.Object source)
Adds to the state without setting the dependency.
-
-
-
Field Detail
-
options
private final InjectorImpl.InjectorOptions options
-
constructionContexts
private final java.util.Map<java.lang.Object,ConstructionContext<?>> constructionContexts
-
dependency
private Dependency<?> dependency
Keeps track of the type that is currently being requested for injection.
-
dependencyStack
private java.lang.Object[] dependencyStack
Keeps track of the hierarchy of types needed during injection.This is a pairwise combination of dependencies and sources, with dependencies or keys on even indices, and sources on odd indices. This structure is to avoid the memory overhead of DependencyAndSource objects, which can add to several tens of megabytes in large applications.
-
dependencyStackSize
private int dependencyStackSize
-
enterCount
private int enterCount
The number of timesenter()
has been called + 1 for initial construction. This value is decremented when#exit()
is called.
-
toClear
private final java.lang.Object[] toClear
A single element array to clear when theenterCount
hits0
.This is the value stored in the
InjectorImpl.localContext
thread local.
-
-
Constructor Detail
-
InternalContext
InternalContext(InjectorImpl.InjectorOptions options, java.lang.Object[] toClear)
-
-
Method Detail
-
enter
void enter()
Should only be called by InjectorImpl.enterContext().
-
close
public void close()
Should be called any any method that received an instance via InjectorImpl.enterContext().- Specified by:
close
in interfacejava.lang.AutoCloseable
-
getInjectorOptions
InjectorImpl.InjectorOptions getInjectorOptions()
-
getConstructionContext
<T> ConstructionContext<T> getConstructionContext(java.lang.Object key)
-
getDependency
Dependency<?> getDependency()
-
pushDependency
Dependency<?> pushDependency(Dependency<?> dependency, java.lang.Object source)
Sets the new current dependency & adds it to the state.
-
popStateAndSetDependency
void popStateAndSetDependency(Dependency<?> newDependency)
Pops the current state & sets the new dependency.
-
pushState
void pushState(Key<?> key, java.lang.Object source)
Adds to the state without setting the dependency.
-
doPushState
private void doPushState(java.lang.Object dependencyOrKey, java.lang.Object source)
-
popState
void popState()
Pops from the state without setting a dependency.
-
getDependencyChain
java.util.List<DependencyAndSource> getDependencyChain()
Returns the current dependency chain (all the state stored in the dependencyStack).
-
-