private static String instantiation(Binding<?> binding) { if (binding instanceof InstanceBinding<?>) { return instanceLiteral((InstanceBinding<?>) binding); } else if (binding instanceof ProviderKeyBinding<?>) { return providerCall(((ProviderKeyBinding<?>) binding).getProviderKey()) + ".get()"; } else if (binding instanceof LinkedKeyBinding<?>) { return providerCall(((LinkedKeyBinding<?>) binding).getLinkedKey()); } else if (binding instanceof ConstructorBinding<?>) { return constructorCall((ConstructorBinding<?>) binding); } else if (binding instanceof ProviderBinding<?>) { return provider((ProviderBinding<?>) binding); } else if (binding instanceof ProviderInstanceBinding<?>) { return instantiation((ProviderInstanceBinding<?>) binding); } else { throw new DeguicifierException(); } }
public Void visit(ProviderKeyBinding<? extends T> providerKeyBinding) { Context context = Context.forElement(providerKeyBinding); bindingsCollection.addBinding( targetKey, bindingFactory.getBindProviderBinding( providerKeyBinding.getProviderKey(), providerKeyBinding.getKey(), context)); return null; }
@Test public void binds_provider_key() { given(module = new AbstractModule() { @Override protected void configure() { bind(Interface.class).toProvider(InterfaceProvider.class); } }); given(injector = Guice.createInjector(module)); when(injector.getBinding(Interface.class)); thenReturned(instanceOf(ProviderKeyBinding.class)); }
/** * Same as {@link #visit(LinkedKeyBinding)}, but the binding edge is {@link * BindingEdge.Type#PROVIDER}. */ @Override public Collection<Edge> visit(ProviderKeyBinding<?> binding) { return ImmutableList.<Edge>of( new BindingEdge( NodeId.newTypeId(binding.getKey()), NodeId.newTypeId(binding.getProviderKey()), BindingEdge.Type.PROVIDER)); }
public void testVisitProviderKey() { Binding<?> binding = getBinding(Key.get(ConstructedClass.class), new ProviderKeyModule()); Collection<Key<?>> dependencies = visitor.visit((ProviderKeyBinding<?>) binding); // Dependency should be to the class that provides this one. assertDependencies(dependencies, Key.get(ConstructedClassProvider.class)); }
@Override public String toString() { return MoreObjects.toStringHelper(ProviderKeyBinding.class) .add("key", getKey()) .add("source", getSource()) .add("scope", getScoping()) .add("provider", providerKey) .toString(); }
private static boolean matches(Binding<?> item, BindResult<?> result) { switch (result.type) { case INSTANCE: if (item instanceof InstanceBinding && ((InstanceBinding) item).getInstance().equals(result.instance)) { return true; } break; case LINKED: if (item instanceof LinkedKeyBinding && ((LinkedKeyBinding) item).getLinkedKey().equals(result.key)) { return true; } break; case PROVIDER_INSTANCE: if (item instanceof ProviderInstanceBinding && Objects.equal( ((ProviderInstanceBinding) item).getUserSuppliedProvider().get(), result.instance)) { return true; } break; case PROVIDER_KEY: if (item instanceof ProviderKeyBinding && ((ProviderKeyBinding) item).getProviderKey().equals(result.key)) { return true; } break; } return false; }
private static boolean matches(Binding<?> item, BindResult<?> result) { switch (result.type) { case INSTANCE: if (item instanceof InstanceBinding && ((InstanceBinding) item).getInstance().equals(result.instance)) { return true; } break; case LINKED: if (item instanceof LinkedKeyBinding && ((LinkedKeyBinding) item).getLinkedKey().equals(result.key)) { return true; } break; case PROVIDER_INSTANCE: if (item instanceof ProviderInstanceBinding && Objects.equal(((ProviderInstanceBinding) item).getUserSuppliedProvider().get(), result.instance)) { return true; } break; case PROVIDER_KEY: if (item instanceof ProviderKeyBinding && ((ProviderKeyBinding) item).getProviderKey().equals(result.key)) { return true; } break; } return false; }
@Override public String toString() { return Objects.toStringHelper(ProviderKeyBinding.class) .add("key", getKey()) .add("source", getSource()) .add("scope", getScoping()) .add("provider", providerKey) .toString(); }
@Override public Optional<TypeLiteral<?>> visit(ProviderKeyBinding<?> binding) { // We don't know what the provider will return return empty(); }
@Override public Object visit(ProviderKeyBinding<? extends T> providerKeyBinding) { requireKey(providerKeyBinding.getProviderKey()); return super.visit(providerKeyBinding); }
@Override public Void visit(ProviderKeyBinding<? extends T> binding) { scope(binding, rebind(binding).toProvider(binding.getProviderKey())); return null; }
@Override public Collection<Key<?>> visit(ProviderKeyBinding<?> binding) { return ImmutableSet.<Key<?>>of(binding.getProviderKey()); }
@Override public Indexer.IndexedBinding visit(ProviderKeyBinding<? extends Object> binding) { return new Indexer.IndexedBinding( binding, BindingType.PROVIDER_KEY, scope(binding), binding.getProviderKey()); }
@Override public ResolvedBinding<T> visit(ProviderKeyBinding<? extends T> providerKeyBinding) { //noinspection unchecked return injector.getBinding(((Key<? extends T>)providerKeyBinding.getProviderKey())).acceptTargetVisitor(this); }
/** * Same as {@link #visit(LinkedKeyBinding)}, but the binding edge is * {@link BindingEdge.Type#PROVIDER}. */ @Override public Collection<Edge> visit(ProviderKeyBinding<?> binding) { return ImmutableList.<Edge>of(new BindingEdge(NodeId.newTypeId(binding.getKey()), NodeId.newTypeId(binding.getProviderKey()), BindingEdge.Type.PROVIDER)); }