Class BindingSourceRestriction


  • public final class BindingSourceRestriction
    extends Object
    Contains abstractions for enforcing RestrictedBindingSource.

    Enforcement happens in two phases:

    1. Data structures for enforcement are built during Binder configuration. BindingSourceRestriction.PermitMapConstruction encapsulates this process, and the BindingSourceRestriction.PermitMap is the end result.
    2. Restrictions are enforced by checking each binding for violations with check(com.google.inject.internal.GuiceInternal, java.util.List<com.google.inject.spi.Element>), which uses the BindingSourceRestriction.PermitMap(s) built during Binder configuration.

    Note: None of this is thread-safe because it's only used while the Injector is being built, which happens on a single thread.

    Since:
    5.0
    • Method Detail

      • getMissingImplementationSuggestion

        public static Optional<String> getMissingImplementationSuggestion​(com.google.inject.internal.GuiceInternal guiceInternal,
                                                                          Key<?> key)
        Returns a suggestion for how a restricted binding should be created in case it's missing.
      • check

        public static ImmutableList<Message> check​(com.google.inject.internal.GuiceInternal guiceInternal,
                                                   List<Element> elements)
        Returns all the restriction violations found on the given Module Elements, as error messages.

        Note: Intended to be used on Module Elements, not Injector Elements, ie. the result of Elements.getElements(com.google.inject.Module...) not Injector.getElements. The Module Elements this check cares about are:

        • Module Bindings, which are always explicit and always have an ElementSource (with a Module Stack), unlike Injector Bindings, which may be implicit and bereft of an ElementSource.
        • PrivateElements, which represent the recursive case of this check. They contain a list of elements that this check is recursively called on.