1afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit/** 2afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Copyright (C) 2008 Google Inc. 3afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * 4afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 5afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * you may not use this file except in compliance with the License. 6afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * You may obtain a copy of the License at 7afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * 8afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * http://www.apache.org/licenses/LICENSE-2.0 9afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * 10afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Unless required by applicable law or agreed to in writing, software 11afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 12afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * See the License for the specific language governing permissions and 14afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * limitations under the License. 15afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 16afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 17afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkitpackage com.google.inject.spi; 18afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 19afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit/** 20afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visits each of the strategies used to find an instance to satisfy an injection. 21afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * 22afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * @param <V> any type to be returned by the visit method. Use {@link Void} with 23afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * {@code return null} if no return type is needed. 24c489adf4671b41765698d167e13960d998190c5elimpbizkit * @since 2.0 25afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 26afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkitpublic interface BindingTargetVisitor<T, V> { 27afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 28afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 29afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a instance binding. The same instance is returned for every injection. This target is 30afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * found in both module and injector bindings. 31afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 3203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(InstanceBinding<? extends T> binding); 33afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 34afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 35afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a provider instance binding. The provider's {@code get} method is invoked to resolve 36afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * injections. This target is found in both module and injector bindings. 37afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 3803b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ProviderInstanceBinding<? extends T> binding); 39afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 40afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 4176c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * Visit a provider key binding. To resolve injections, the provider key is first resolved, then 4276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * that provider's {@code get} method is invoked. This target is found in both module and injector 4376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkit * bindings. 44afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 4503b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ProviderKeyBinding<? extends T> binding); 46afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 47afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 48afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a linked key binding. The other key's binding is used to resolve injections. This 49afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * target is found in both module and injector bindings. 50afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 5103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(LinkedKeyBinding<? extends T> binding); 52afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 53afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 54aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit * Visit a binding to a key exposed from an enclosed private environment. This target is only 55aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit * found in injector bindings. 56b1f42f5df9c4cd8e157a28c24c4e8eb627a7f052limpbizkit */ 5703b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ExposedBinding<? extends T> binding); 58b1f42f5df9c4cd8e157a28c24c4e8eb627a7f052limpbizkit 59b1f42f5df9c4cd8e157a28c24c4e8eb627a7f052limpbizkit /** 60afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit an untargetted binding. This target is found only on module bindings. It indicates 61afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * that the injector should use its implicit binding strategies to resolve injections. 62afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 6303b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(UntargettedBinding<? extends T> binding); 64afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 65afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 66afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a constructor binding. To resolve injections, an instance is instantiated by invoking 67afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * {@code constructor}. This target is found only on injector bindings. 68afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 6903b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ConstructorBinding<? extends T> binding); 70afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 71afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 72afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a binding created from converting a bound instance to a new type. The source binding 73afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * has the same binding annotation but a different type. This target is found only on injector 74afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * bindings. 75afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 7603b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ConvertedConstantBinding<? extends T> binding); 77afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit 78afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit /** 79afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the 80afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit * provided type. This target is found only on injector bindings. 81afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit */ 8203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit V visit(ProviderBinding<? extends T> binding); 83afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit} 84