Class BindingSourceRestriction

java.lang.Object
com.google.inject.spi.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
  • Field Details

    • logger

      private static final Logger logger
  • Constructor Details

    • BindingSourceRestriction

      private BindingSourceRestriction()
  • Method Details

    • getMissingImplementationSuggestion

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

      public static com.google.common.collect.ImmutableList<Message> check(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.
    • check

      private static com.google.common.collect.ImmutableList<Message> check(List<Element> elements)
    • check

      private static com.google.common.collect.ImmutableList<Message> check(Element element)
    • check

      private static Optional<Message> check(Binding<?> binding)
    • getViolationMessage

      private static String getViolationMessage(Key<?> key, String explanation, com.google.common.collect.ImmutableSet<Class<? extends Annotation>> acceptablePermits, boolean annotationRestricted)
    • getAllPermits

      private static com.google.common.collect.ImmutableSet<Class<? extends Annotation>> getAllPermits(ElementSource elementSource)
      Get all permits on the element source chain.
    • isExempt

      private static boolean isExempt(ElementSource elementSource, String exemptModulesRegex)
    • getAllModules

      private static Iterable<String> getAllModules(ElementSource elementSource)
    • clear

      private static void clear(Element element)
    • clear

      private static void clear(ElementSource elementSource)
    • getRestriction

      private static RestrictedBindingSource getRestriction(Key<?> key)
    • getPermits

      private static Stream<Class<? extends Annotation>> getPermits(Class<?> clazz)