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