176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit/** 276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * Copyright (C) 2008 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; 20b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport com.google.common.collect.ImmutableSet; 2103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkitimport com.google.inject.Binder; 2276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.Injector; 2376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.Key; 2476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.BindingTargetVisitor; 2576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.Dependency; 2676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.spi.ExposedBinding; 27c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport com.google.inject.spi.PrivateElements; 28b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 2976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport java.util.Set; 3076c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 315ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitpublic final class ExposedBindingImpl<T> extends BindingImpl<T> implements ExposedBinding<T> { 3276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 33c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit private final PrivateElements privateElements; 3476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 355ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkit public ExposedBindingImpl(InjectorImpl injector, Object source, Key<T> key, 36c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit InternalFactory<T> factory, PrivateElements privateElements) { 3776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit super(injector, key, source, factory, Scoping.UNSCOPED); 38c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit this.privateElements = privateElements; 3976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit } 4076c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 418996e8059681c083744df50c7ad9e007eda1f648limpbizkit public <V> V acceptTargetVisitor(BindingTargetVisitor<? super T, V> visitor) { 4203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit return visitor.visit(this); 4376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit } 4476c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 4576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit public Set<Dependency<?>> getDependencies() { 4676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit return ImmutableSet.<Dependency<?>>of(Dependency.get(Key.get(Injector.class))); 4776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit } 4876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 49c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit public PrivateElements getPrivateElements() { 50c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit return privateElements; 5176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit } 5276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit 5376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit @Override public String toString() { 54d9c913acca55023ef5d76a32c3d4a51ee6b420cbsberlin return Objects.toStringHelper(ExposedBinding.class) 5576c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit .add("key", getKey()) 5676c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit .add("source", getSource()) 57c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit .add("privateElements", privateElements) 5876c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit .toString(); 5976c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit } 6003b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit 6103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public void applyTo(Binder binder) { 6203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit throw new UnsupportedOperationException("This element represents a synthetic binding."); 6303b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit } 647bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com 657bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com // Purposely does not override equals/hashcode, because exposed bindings are only equal to 667bcec8815e3cb9c4f910c4a9024af7a7e664c7a0sberlin@gmail.com // themselves right now -- that is, there cannot be "duplicate" exposed bindings. 6776c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit} 68