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.AutoCloseableInternal 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<?>>constructionContextsprivate Dependency<?>dependencyKeeps track of the type that is currently being requested for injection.private java.lang.Object[]dependencyStackKeeps track of the hierarchy of types needed during injection.private intdependencyStackSizeprivate intenterCountThe number of timesenter()has been called + 1 for initial construction.private InjectorImpl.InjectorOptionsoptionsprivate java.lang.Object[]toClearA single element array to clear when theenterCounthits0.
-
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 voidclose()Should be called any any method that received an instance via InjectorImpl.enterContext().private voiddoPushState(java.lang.Object dependencyOrKey, java.lang.Object source)(package private) voidenter()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.InjectorOptionsgetInjectorOptions()(package private) voidpopState()Pops from the state without setting a dependency.(package private) voidpopStateAndSetDependency(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) voidpushState(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 theenterCounthits0.This is the value stored in the
InjectorImpl.localContextthread 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:
closein 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).
-
-