Class 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 Detail

      • 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 times enter() 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 the enterCount hits 0.

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

    • 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 interface java.lang.AutoCloseable
      • getConstructionContext

        <T> ConstructionContext<T> getConstructionContext​(java.lang.Object key)
      • 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).