176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit/*
276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * Copyright (C) 2007 Google Inc.
376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit *
476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * Licensed under the Apache License, Version 2.0 (the "License");
576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * you may not use this file except in compliance with the License.
676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * You may obtain a copy of the License at
776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit *
876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * http://www.apache.org/licenses/LICENSE-2.0
976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit *
1076c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * Unless required by applicable law or agreed to in writing, software
1176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * distributed under the License is distributed on an "AS IS" BASIS,
1276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * See the License for the specific language governing permissions and
1476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * limitations under the License.
1576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit */
1676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
1776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitpackage com.google.inject.internal;
1876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
19b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport com.google.common.base.Objects;
2003b81a6b931a06c7697e422b218e3734a7f262cclimpbizkitimport com.google.inject.Binder;
215ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.Key;
2276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.BindingTargetVisitor;
2376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.Dependency;
2476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.UntargettedBinding;
2576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
265ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitfinal class UntargettedBindingImpl<T> extends BindingImpl<T> implements UntargettedBinding<T> {
2776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
285ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkit  UntargettedBindingImpl(InjectorImpl injector, Key<T> key, Object source) {
2976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit    super(injector, key, source, new InternalFactory<T>() {
30888a264bdee08c82cccd9dcc94a8a4ac98912badsberlin      public T get(Errors errors, InternalContext context, Dependency<?> dependency, boolean linked) {
3176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit        throw new AssertionError();
3276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit      }
3376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit    }, Scoping.UNSCOPED);
3476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
3576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
3676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  public UntargettedBindingImpl(Object source, Key<T> key, Scoping scoping) {
3776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit    super(source, key, scoping);
3876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
3976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
408996e8059681c083744df50c7ad9e007eda1f648limpbizkit  public <V> V acceptTargetVisitor(BindingTargetVisitor<? super T, V> visitor) {
4103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit    return visitor.visit(this);
4276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
4376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
4476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  public BindingImpl<T> withScoping(Scoping scoping) {
4576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit    return new UntargettedBindingImpl<T>(getSource(), getKey(), scoping);
4676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
4776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
4876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  public BindingImpl<T> withKey(Key<T> key) {
4976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit    return new UntargettedBindingImpl<T>(getSource(), key, getScoping());
5076c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
5176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit
5203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit  public void applyTo(Binder binder) {
5303b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit    getScoping().applyTo(binder.withSource(getSource()).bind(getKey()));
5403b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit  }
5503b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit
5676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  @Override public String toString() {
57d9c913acca55023ef5d76a32c3d4a51ee6b420cbsberlin    return Objects.toStringHelper(UntargettedBinding.class)
5876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit        .add("key", getKey())
5976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit        .add("source", getSource())
6076c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit        .toString();
6196e81ba55441fd11c189d903ee2bd1806a23bd70Christian Edward Gruber  }
627bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com
637bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com  @Override
647bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com  public boolean equals(Object obj) {
657bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com    if(obj instanceof UntargettedBindingImpl) {
667bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com      UntargettedBindingImpl<?> o = (UntargettedBindingImpl<?>)obj;
677bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com      return getKey().equals(o.getKey())
687bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com        && getScoping().equals(o.getScoping());
697bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com    } else {
707bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com      return false;
717bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com    }
727bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com  }
7396e81ba55441fd11c189d903ee2bd1806a23bd70Christian Edward Gruber
747bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com  @Override
757bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com  public int hashCode() {
767bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com    return Objects.hashCode(getKey(), getScoping());
7776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit  }
7876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit}
79