Package com.google.inject.internal
Class Indexer
- java.lang.Object
-
- com.google.inject.spi.DefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
- com.google.inject.internal.Indexer
-
- All Implemented Interfaces:
BindingScopingVisitor<java.lang.Object>,BindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
class Indexer extends DefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding> implements BindingScopingVisitor<java.lang.Object>
Visits bindings to return aIndexedBindingthat can be used to emulate the binding deduplication that Guice internally performs.Note: simply using equals/hashCode on the BindingImpls doesn't work because they all have unique annotations. This works around that by reimplementing equality semantics that ignores
Element.uniqueId(). A better solution might be to introduce the idea of an 'anonymous' binding to guice, that might support this usecase directly.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classIndexer.BindingType(package private) static classIndexer.IndexedBinding
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.ObjectEAGER_SINGLETON(package private) Injectorinjector
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) booleanisIndexable(Binding<?> binding)private java.lang.Objectscope(Binding<?> binding)Indexer.IndexedBindingvisit(ConstructorBinding<? extends java.lang.Object> binding)Visit a constructor binding.Indexer.IndexedBindingvisit(ConvertedConstantBinding<? extends java.lang.Object> binding)Visit a binding created from converting a bound instance to a new type.Indexer.IndexedBindingvisit(ExposedBinding<? extends java.lang.Object> binding)Visit a binding to a key exposed from an enclosed private environment.Indexer.IndexedBindingvisit(InstanceBinding<? extends java.lang.Object> binding)Visit a instance binding.Indexer.IndexedBindingvisit(LinkedKeyBinding<? extends java.lang.Object> binding)Visit a linked key binding.Indexer.IndexedBindingvisit(ProviderBinding<? extends java.lang.Object> binding)Visit a binding to aProviderthat delegates to the binding for the provided type.Indexer.IndexedBindingvisit(ProviderInstanceBinding<? extends java.lang.Object> binding)Visit a provider instance binding.Indexer.IndexedBindingvisit(ProviderKeyBinding<? extends java.lang.Object> binding)Visit a provider key binding.Indexer.IndexedBindingvisit(UntargettedBinding<? extends java.lang.Object> binding)Visit an untargetted binding.java.lang.ObjectvisitEagerSingleton()Visit an eager singleton or single instance.java.lang.ObjectvisitNoScoping()Visit an unspecified or unscoped strategy.java.lang.ObjectvisitScope(Scope scope)Visit a scope instance.java.lang.ObjectvisitScopeAnnotation(java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation)Visit a scope annotation.-
Methods inherited from class com.google.inject.spi.DefaultBindingTargetVisitor
visitOther
-
-
-
-
Field Detail
-
injector
final Injector injector
-
EAGER_SINGLETON
private static final java.lang.Object EAGER_SINGLETON
-
-
Constructor Detail
-
Indexer
Indexer(Injector injector)
-
-
Method Detail
-
isIndexable
boolean isIndexable(Binding<?> binding)
-
scope
private java.lang.Object scope(Binding<?> binding)
-
visit
public Indexer.IndexedBinding visit(ConstructorBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a constructor binding. To resolve injections, an instance is instantiated by invokingconstructor. This target is found only on injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(ConvertedConstantBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a binding created from converting a bound instance to a new type. The source binding has the same binding annotation but a different type. This target is found only on injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(ExposedBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a binding to a key exposed from an enclosed private environment. This target is only found in injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(InstanceBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a instance binding. The same instance is returned for every injection. This target is found in both module and injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(LinkedKeyBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a linked key binding. The other key's binding is used to resolve injections. This target is found in both module and injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(ProviderBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a binding to aProviderthat delegates to the binding for the provided type. This target is found only on injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(ProviderInstanceBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a provider instance binding. The provider'sgetmethod is invoked to resolve injections. This target is found in both module and injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(ProviderKeyBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit a provider key binding. To resolve injections, the provider key is first resolved, then that provider'sgetmethod is invoked. This target is found in both module and injector bindings.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visit
public Indexer.IndexedBinding visit(UntargettedBinding<? extends java.lang.Object> binding)
Description copied from interface:BindingTargetVisitorVisit an untargetted binding. This target is found only on module bindings. It indicates that the injector should use its implicit binding strategies to resolve injections.- Specified by:
visitin interfaceBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>- Overrides:
visitin classDefaultBindingTargetVisitor<java.lang.Object,Indexer.IndexedBinding>
-
visitEagerSingleton
public java.lang.Object visitEagerSingleton()
Description copied from interface:BindingScopingVisitorVisit an eager singleton or single instance. This scope strategy is found on both module and injector bindings.- Specified by:
visitEagerSingletonin interfaceBindingScopingVisitor<java.lang.Object>
-
visitNoScoping
public java.lang.Object visitNoScoping()
Description copied from interface:BindingScopingVisitorVisit an unspecified or unscoped strategy. On a module, this strategy indicates that the injector should use scoping annotations to find a scope. On an injector, it indicates that no scope is applied to the binding. An unscoped binding will behave like a scoped one when it is linked to a scoped binding.- Specified by:
visitNoScopingin interfaceBindingScopingVisitor<java.lang.Object>
-
visitScope
public java.lang.Object visitScope(Scope scope)
Description copied from interface:BindingScopingVisitorVisit a scope instance. This scope strategy is found on both module and injector bindings.- Specified by:
visitScopein interfaceBindingScopingVisitor<java.lang.Object>
-
visitScopeAnnotation
public java.lang.Object visitScopeAnnotation(java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation)
Description copied from interface:BindingScopingVisitorVisit a scope annotation. This scope strategy is found only on module bindings. The instance that implements this scope is registered byBinder.bindScope().- Specified by:
visitScopeAnnotationin interfaceBindingScopingVisitor<java.lang.Object>
-
-