1 /* 2 * Copyright (C) 2007 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.inject.internal; 18 19 import com.google.common.base.Objects; 20 import com.google.inject.Binder; 21 import com.google.inject.Key; 22 import com.google.inject.spi.BindingTargetVisitor; 23 import com.google.inject.spi.Dependency; 24 import com.google.inject.spi.UntargettedBinding; 25 26 final class UntargettedBindingImpl<T> extends BindingImpl<T> implements UntargettedBinding<T> { 27 28 UntargettedBindingImpl(InjectorImpl injector, Key<T> key, Object source) { 29 super(injector, key, source, new InternalFactory<T>() { 30 public T get(Errors errors, InternalContext context, Dependency<?> dependency, boolean linked) { 31 throw new AssertionError(); 32 } 33 }, Scoping.UNSCOPED); 34 } 35 36 public UntargettedBindingImpl(Object source, Key<T> key, Scoping scoping) { 37 super(source, key, scoping); 38 } 39 40 public <V> V acceptTargetVisitor(BindingTargetVisitor<? super T, V> visitor) { 41 return visitor.visit(this); 42 } 43 44 public BindingImpl<T> withScoping(Scoping scoping) { 45 return new UntargettedBindingImpl<T>(getSource(), getKey(), scoping); 46 } 47 48 public BindingImpl<T> withKey(Key<T> key) { 49 return new UntargettedBindingImpl<T>(getSource(), key, getScoping()); 50 } 51 52 public void applyTo(Binder binder) { 53 getScoping().applyTo(binder.withSource(getSource()).bind(getKey())); 54 } 55 56 @Override public String toString() { 57 return Objects.toStringHelper(UntargettedBinding.class) 58 .add("key", getKey()) 59 .add("source", getSource()) 60 .toString(); 61 } 62 63 @Override 64 public boolean equals(Object obj) { 65 if(obj instanceof UntargettedBindingImpl) { 66 UntargettedBindingImpl<?> o = (UntargettedBindingImpl<?>)obj; 67 return getKey().equals(o.getKey()) 68 && getScoping().equals(o.getScoping()); 69 } else { 70 return false; 71 } 72 } 73 74 @Override 75 public int hashCode() { 76 return Objects.hashCode(getKey(), getScoping()); 77 } 78 } 79