Home | History | Annotate | Download | only in internal
      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