Class InternalContext

java.lang.Object
com.google.inject.internal.InternalContext
All Implemented Interfaces:
AutoCloseable

final class InternalContext extends Object implements AutoCloseable
Internal context. Used to coordinate injections and support circular dependencies.
  • Field Details

    • options

      private final InjectorImpl.InjectorOptions options
    • constructionContexts

      private final Map<Object,ConstructionContext<?>> constructionContexts
    • dependency

      private Dependency<?> dependency
      Keeps track of the type that is currently being requested for injection.
    • dependencyStack

      private 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 times enter() has been called + 1 for initial construction. This value is decremented when #exit() is called.
    • toClear

      private final Object[] toClear
      A single element array to clear when the enterCount hits 0.

      This is the value stored in the InjectorImpl.localContext thread local.

  • Constructor Details

  • Method Details

    • 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 interface AutoCloseable
    • getInjectorOptions

      InjectorImpl.InjectorOptions getInjectorOptions()
    • getConstructionContext

      <T> ConstructionContext<T> getConstructionContext(Object key)
    • getDependency

      Dependency<?> getDependency()
    • pushDependency

      Dependency<?> pushDependency(Dependency<?> dependency, 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, Object source)
      Adds to the state without setting the dependency.
    • doPushState

      private void doPushState(Object dependencyOrKey, Object source)
    • popState

      void popState()
      Pops from the state without setting a dependency.
    • getDependencyChain

      List<DependencyAndSource> getDependencyChain()
      Returns the current dependency chain (all the state stored in the dependencyStack).