1 /* 2 * Copyright (C) 2008 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.spi; 18 19 import com.google.inject.Binder; 20 import com.google.inject.Binding; 21 import com.google.inject.Inject; 22 23 /** 24 * Visit elements. 25 * 26 * @param <V> any type to be returned by the visit method. Use {@link Void} with {@code return null} 27 * if no return type is needed. 28 * @since 2.0 29 */ 30 public interface ElementVisitor<V> { 31 32 /** 33 * Visit a mapping from a key (type and optional annotation) to the strategy for getting instances 34 * of the type. 35 */ visit(Binding<T> binding)36 <T> V visit(Binding<T> binding); 37 38 /*if[AOP]*/ 39 /** Visit a registration of interceptors for matching methods of matching classes. */ visit(InterceptorBinding binding)40 V visit(InterceptorBinding binding); 41 /*end[AOP]*/ 42 43 /** Visit a registration of a scope annotation with the scope that implements it. */ visit(ScopeBinding binding)44 V visit(ScopeBinding binding); 45 46 /** Visit a registration of type converters for matching target types. */ visit(TypeConverterBinding binding)47 V visit(TypeConverterBinding binding); 48 49 /** Visit a request to inject the instance fields and methods of an instance. */ visit(InjectionRequest<?> request)50 V visit(InjectionRequest<?> request); 51 52 /** Visit a request to inject the static fields and methods of type. */ visit(StaticInjectionRequest request)53 V visit(StaticInjectionRequest request); 54 55 /** Visit a lookup of the provider for a type. */ visit(ProviderLookup<T> lookup)56 <T> V visit(ProviderLookup<T> lookup); 57 58 /** Visit a lookup of the members injector. */ visit(MembersInjectorLookup<T> lookup)59 <T> V visit(MembersInjectorLookup<T> lookup); 60 61 /** Visit an error message and the context in which it occured. */ visit(Message message)62 V visit(Message message); 63 64 /** 65 * Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder 66 * private binder}. 67 */ visit(PrivateElements elements)68 V visit(PrivateElements elements); 69 70 /** Visit an injectable type listener binding. */ visit(TypeListenerBinding binding)71 V visit(TypeListenerBinding binding); 72 73 /** 74 * Visit a provision listener binding. 75 * 76 * @since 4.0 77 */ visit(ProvisionListenerBinding binding)78 V visit(ProvisionListenerBinding binding); 79 80 /** 81 * Visit a require explicit bindings command. 82 * 83 * @since 3.0 84 */ visit(RequireExplicitBindingsOption option)85 V visit(RequireExplicitBindingsOption option); 86 87 /** 88 * Visit a disable circular proxies command. 89 * 90 * @since 3.0 91 */ visit(DisableCircularProxiesOption option)92 V visit(DisableCircularProxiesOption option); 93 94 /** 95 * Visit a require explicit {@literal @}{@link Inject} command. 96 * 97 * @since 4.0 98 */ visit(RequireAtInjectOnConstructorsOption option)99 V visit(RequireAtInjectOnConstructorsOption option); 100 101 /** 102 * Visit a require exact binding annotations command. 103 * 104 * @since 4.0 105 */ visit(RequireExactBindingAnnotationsOption option)106 V visit(RequireExactBindingAnnotationsOption option); 107 108 /** 109 * Visits a {@link Binder#scanModulesForAnnotatedMethods} command. 110 * 111 * @since 4.0 112 */ visit(ModuleAnnotatedMethodScannerBinding binding)113 V visit(ModuleAnnotatedMethodScannerBinding binding); 114 } 115