xref: /aosp_15_r20/external/guice/latest-api-diffs/3.0.xml (revision dc5640d1ceac12a29404866b9a53df952a7a6c47)
1*dc5640d1SHerbert Xue<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
2*dc5640d1SHerbert Xue<!-- Generated by the JDiff Javadoc doclet -->
3*dc5640d1SHerbert Xue<!-- (http://www.jdiff.org) -->
4*dc5640d1SHerbert Xue<!-- on Thu Mar 24 21:41:19 EDT 2011 -->
5*dc5640d1SHerbert Xue
6*dc5640d1SHerbert Xue<api
7*dc5640d1SHerbert Xue  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
8*dc5640d1SHerbert Xue  xsi:noNamespaceSchemaLocation='api.xsd'
9*dc5640d1SHerbert Xue  name="3.0"
10*dc5640d1SHerbert Xue  jdversion="1.1.1">
11*dc5640d1SHerbert Xue
12*dc5640d1SHerbert Xue<!--  Command line arguments =  -doclet jdiff.JDiff -docletpath C:\Documents and Settings\Sam Berlin\workspace\guice\lib\build\jdiff\jdiff.jar;C:\Documents and Settings\Sam Berlin\workspace\guice\lib\build\jdiff\xerces.jar -classpath C:\Documents and Settings\Sam Berlin\workspace\guice\lib\javax.inject.jar;C:\Documents and Settings\Sam Berlin\workspace\guice\lib\aopalliance.jar -apidir build/docs/latest-api-diffs -apiname 3.0 -->
13*dc5640d1SHerbert Xue<package name="com.google.inject">
14*dc5640d1SHerbert Xue  <!-- start class com.google.inject.AbstractModule -->
15*dc5640d1SHerbert Xue  <class name="AbstractModule" extends="java.lang.Object"
16*dc5640d1SHerbert Xue    abstract="true"
17*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
18*dc5640d1SHerbert Xue    deprecated="not deprecated">
19*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
20*dc5640d1SHerbert Xue    <constructor name="AbstractModule"
21*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
22*dc5640d1SHerbert Xue      deprecated="not deprecated">
23*dc5640d1SHerbert Xue    </constructor>
24*dc5640d1SHerbert Xue    <method name="configure"
25*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="true"
26*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
27*dc5640d1SHerbert Xue      deprecated="not deprecated">
28*dc5640d1SHerbert Xue      <param name="builder" type="com.google.inject.Binder"/>
29*dc5640d1SHerbert Xue    </method>
30*dc5640d1SHerbert Xue    <method name="configure"
31*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
32*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
33*dc5640d1SHerbert Xue      deprecated="not deprecated">
34*dc5640d1SHerbert Xue      <doc>
35*dc5640d1SHerbert Xue      <![CDATA[Configures a {@link Binder} via the exposed methods.]]>
36*dc5640d1SHerbert Xue      </doc>
37*dc5640d1SHerbert Xue    </method>
38*dc5640d1SHerbert Xue    <method name="binder" return="com.google.inject.Binder"
39*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
40*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
41*dc5640d1SHerbert Xue      deprecated="not deprecated">
42*dc5640d1SHerbert Xue      <doc>
43*dc5640d1SHerbert Xue      <![CDATA[Gets direct access to the underlying {@code Binder}.]]>
44*dc5640d1SHerbert Xue      </doc>
45*dc5640d1SHerbert Xue    </method>
46*dc5640d1SHerbert Xue    <method name="bindScope"
47*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
48*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
49*dc5640d1SHerbert Xue      deprecated="not deprecated">
50*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
51*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
52*dc5640d1SHerbert Xue      <doc>
53*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
54*dc5640d1SHerbert Xue      </doc>
55*dc5640d1SHerbert Xue    </method>
56*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
57*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
58*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
59*dc5640d1SHerbert Xue      deprecated="not deprecated">
60*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
61*dc5640d1SHerbert Xue      <doc>
62*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Key)]]>
63*dc5640d1SHerbert Xue      </doc>
64*dc5640d1SHerbert Xue    </method>
65*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
66*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
67*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
68*dc5640d1SHerbert Xue      deprecated="not deprecated">
69*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
70*dc5640d1SHerbert Xue      <doc>
71*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(TypeLiteral)]]>
72*dc5640d1SHerbert Xue      </doc>
73*dc5640d1SHerbert Xue    </method>
74*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
75*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
76*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
77*dc5640d1SHerbert Xue      deprecated="not deprecated">
78*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
79*dc5640d1SHerbert Xue      <doc>
80*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Class)]]>
81*dc5640d1SHerbert Xue      </doc>
82*dc5640d1SHerbert Xue    </method>
83*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
84*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
85*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
86*dc5640d1SHerbert Xue      deprecated="not deprecated">
87*dc5640d1SHerbert Xue      <doc>
88*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindConstant()]]>
89*dc5640d1SHerbert Xue      </doc>
90*dc5640d1SHerbert Xue    </method>
91*dc5640d1SHerbert Xue    <method name="install"
92*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
93*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
94*dc5640d1SHerbert Xue      deprecated="not deprecated">
95*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
96*dc5640d1SHerbert Xue      <doc>
97*dc5640d1SHerbert Xue      <![CDATA[@see Binder#install(Module)]]>
98*dc5640d1SHerbert Xue      </doc>
99*dc5640d1SHerbert Xue    </method>
100*dc5640d1SHerbert Xue    <method name="addError"
101*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
102*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
103*dc5640d1SHerbert Xue      deprecated="not deprecated">
104*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
105*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
106*dc5640d1SHerbert Xue      <doc>
107*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(String, Object[])]]>
108*dc5640d1SHerbert Xue      </doc>
109*dc5640d1SHerbert Xue    </method>
110*dc5640d1SHerbert Xue    <method name="addError"
111*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
112*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
113*dc5640d1SHerbert Xue      deprecated="not deprecated">
114*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
115*dc5640d1SHerbert Xue      <doc>
116*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Throwable)]]>
117*dc5640d1SHerbert Xue      </doc>
118*dc5640d1SHerbert Xue    </method>
119*dc5640d1SHerbert Xue    <method name="addError"
120*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
121*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
122*dc5640d1SHerbert Xue      deprecated="not deprecated">
123*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
124*dc5640d1SHerbert Xue      <doc>
125*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Message)
126*dc5640d1SHerbert Xue @since 2.0]]>
127*dc5640d1SHerbert Xue      </doc>
128*dc5640d1SHerbert Xue    </method>
129*dc5640d1SHerbert Xue    <method name="requestInjection"
130*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
131*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
132*dc5640d1SHerbert Xue      deprecated="not deprecated">
133*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
134*dc5640d1SHerbert Xue      <doc>
135*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestInjection(Object)
136*dc5640d1SHerbert Xue @since 2.0]]>
137*dc5640d1SHerbert Xue      </doc>
138*dc5640d1SHerbert Xue    </method>
139*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
140*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
141*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
142*dc5640d1SHerbert Xue      deprecated="not deprecated">
143*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
144*dc5640d1SHerbert Xue      <doc>
145*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
146*dc5640d1SHerbert Xue      </doc>
147*dc5640d1SHerbert Xue    </method>
148*dc5640d1SHerbert Xue    <method name="bindInterceptor"
149*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
150*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
151*dc5640d1SHerbert Xue      deprecated="not deprecated">
152*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
153*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
154*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
155*dc5640d1SHerbert Xue      <doc>
156*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher,
157*dc5640d1SHerbert Xue  com.google.inject.matcher.Matcher,
158*dc5640d1SHerbert Xue  org.aopalliance.intercept.MethodInterceptor[])]]>
159*dc5640d1SHerbert Xue      </doc>
160*dc5640d1SHerbert Xue    </method>
161*dc5640d1SHerbert Xue    <method name="requireBinding"
162*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
163*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
164*dc5640d1SHerbert Xue      deprecated="not deprecated">
165*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
166*dc5640d1SHerbert Xue      <doc>
167*dc5640d1SHerbert Xue      <![CDATA[Adds a dependency from this module to {@code key}. When the injector is
168*dc5640d1SHerbert Xue created, Guice will report an error if {@code key} cannot be injected.
169*dc5640d1SHerbert Xue Note that this requirement may be satisfied by implicit binding, such as
170*dc5640d1SHerbert Xue a public no-arguments constructor.
171*dc5640d1SHerbert Xue
172*dc5640d1SHerbert Xue @since 2.0]]>
173*dc5640d1SHerbert Xue      </doc>
174*dc5640d1SHerbert Xue    </method>
175*dc5640d1SHerbert Xue    <method name="requireBinding"
176*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
177*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
178*dc5640d1SHerbert Xue      deprecated="not deprecated">
179*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
180*dc5640d1SHerbert Xue      <doc>
181*dc5640d1SHerbert Xue      <![CDATA[Adds a dependency from this module to {@code type}. When the injector is
182*dc5640d1SHerbert Xue created, Guice will report an error if {@code type} cannot be injected.
183*dc5640d1SHerbert Xue Note that this requirement may be satisfied by implicit binding, such as
184*dc5640d1SHerbert Xue a public no-arguments constructor.
185*dc5640d1SHerbert Xue
186*dc5640d1SHerbert Xue @since 2.0]]>
187*dc5640d1SHerbert Xue      </doc>
188*dc5640d1SHerbert Xue    </method>
189*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
190*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
191*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
192*dc5640d1SHerbert Xue      deprecated="not deprecated">
193*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
194*dc5640d1SHerbert Xue      <doc>
195*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Key)
196*dc5640d1SHerbert Xue @since 2.0]]>
197*dc5640d1SHerbert Xue      </doc>
198*dc5640d1SHerbert Xue    </method>
199*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
200*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
201*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
202*dc5640d1SHerbert Xue      deprecated="not deprecated">
203*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
204*dc5640d1SHerbert Xue      <doc>
205*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Class)
206*dc5640d1SHerbert Xue @since 2.0]]>
207*dc5640d1SHerbert Xue      </doc>
208*dc5640d1SHerbert Xue    </method>
209*dc5640d1SHerbert Xue    <method name="convertToTypes"
210*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
211*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
212*dc5640d1SHerbert Xue      deprecated="not deprecated">
213*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
214*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
215*dc5640d1SHerbert Xue      <doc>
216*dc5640d1SHerbert Xue      <![CDATA[@see Binder#convertToTypes
217*dc5640d1SHerbert Xue @since 2.0]]>
218*dc5640d1SHerbert Xue      </doc>
219*dc5640d1SHerbert Xue    </method>
220*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
221*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
222*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
223*dc5640d1SHerbert Xue      deprecated="not deprecated">
224*dc5640d1SHerbert Xue      <doc>
225*dc5640d1SHerbert Xue      <![CDATA[@see Binder#currentStage()
226*dc5640d1SHerbert Xue @since 2.0]]>
227*dc5640d1SHerbert Xue      </doc>
228*dc5640d1SHerbert Xue    </method>
229*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
230*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
231*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
232*dc5640d1SHerbert Xue      deprecated="not deprecated">
233*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
234*dc5640d1SHerbert Xue      <doc>
235*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(Class)
236*dc5640d1SHerbert Xue @since 2.0]]>
237*dc5640d1SHerbert Xue      </doc>
238*dc5640d1SHerbert Xue    </method>
239*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
240*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
241*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
242*dc5640d1SHerbert Xue      deprecated="not deprecated">
243*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
244*dc5640d1SHerbert Xue      <doc>
245*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)
246*dc5640d1SHerbert Xue @since 2.0]]>
247*dc5640d1SHerbert Xue      </doc>
248*dc5640d1SHerbert Xue    </method>
249*dc5640d1SHerbert Xue    <method name="bindListener"
250*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
251*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
252*dc5640d1SHerbert Xue      deprecated="not deprecated">
253*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
254*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
255*dc5640d1SHerbert Xue      <doc>
256*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher,
257*dc5640d1SHerbert Xue  com.google.inject.spi.TypeListener)
258*dc5640d1SHerbert Xue @since 2.0]]>
259*dc5640d1SHerbert Xue      </doc>
260*dc5640d1SHerbert Xue    </method>
261*dc5640d1SHerbert Xue    <doc>
262*dc5640d1SHerbert Xue    <![CDATA[A support class for {@link Module}s which reduces repetition and results in
263*dc5640d1SHerbert Xue a more readable configuration. Simply extend this class, implement {@link
264*dc5640d1SHerbert Xue #configure()}, and call the inherited methods which mirror those found in
265*dc5640d1SHerbert Xue {@link Binder}. For example:
266*dc5640d1SHerbert Xue
267*dc5640d1SHerbert Xue <pre>
268*dc5640d1SHerbert Xue public class MyModule extends AbstractModule {
269*dc5640d1SHerbert Xue   protected void configure() {
270*dc5640d1SHerbert Xue     bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
271*dc5640d1SHerbert Xue     bind(CreditCardPaymentService.class);
272*dc5640d1SHerbert Xue     bind(PaymentService.class).to(CreditCardPaymentService.class);
273*dc5640d1SHerbert Xue     bindConstant().annotatedWith(Names.named("port")).to(8080);
274*dc5640d1SHerbert Xue   }
275*dc5640d1SHerbert Xue }
276*dc5640d1SHerbert Xue </pre>
277*dc5640d1SHerbert Xue
278*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
279*dc5640d1SHerbert Xue    </doc>
280*dc5640d1SHerbert Xue  </class>
281*dc5640d1SHerbert Xue  <!-- end class com.google.inject.AbstractModule -->
282*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Binder -->
283*dc5640d1SHerbert Xue  <interface name="Binder"    abstract="true"
284*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
285*dc5640d1SHerbert Xue    deprecated="not deprecated">
286*dc5640d1SHerbert Xue    <method name="bindInterceptor"
287*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
288*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
289*dc5640d1SHerbert Xue      deprecated="not deprecated">
290*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
291*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
292*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
293*dc5640d1SHerbert Xue      <doc>
294*dc5640d1SHerbert Xue      <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
295*dc5640d1SHerbert Xue eligible for interception if:
296*dc5640d1SHerbert Xue
297*dc5640d1SHerbert Xue <ul>
298*dc5640d1SHerbert Xue  <li>Guice created the instance the method is on</li>
299*dc5640d1SHerbert Xue  <li>Neither the enclosing type nor the method is final</li>
300*dc5640d1SHerbert Xue  <li>And the method is package-private, protected, or public</li>
301*dc5640d1SHerbert Xue </ul>
302*dc5640d1SHerbert Xue
303*dc5640d1SHerbert Xue @param classMatcher matches classes the interceptor should apply to. For
304*dc5640d1SHerbert Xue     example: {@code only(Runnable.class)}.
305*dc5640d1SHerbert Xue @param methodMatcher matches methods the interceptor should apply to. For
306*dc5640d1SHerbert Xue     example: {@code annotatedWith(Transactional.class)}.
307*dc5640d1SHerbert Xue @param interceptors to bind]]>
308*dc5640d1SHerbert Xue      </doc>
309*dc5640d1SHerbert Xue    </method>
310*dc5640d1SHerbert Xue    <method name="bindScope"
311*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
312*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
313*dc5640d1SHerbert Xue      deprecated="not deprecated">
314*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
315*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
316*dc5640d1SHerbert Xue      <doc>
317*dc5640d1SHerbert Xue      <![CDATA[Binds a scope to an annotation.]]>
318*dc5640d1SHerbert Xue      </doc>
319*dc5640d1SHerbert Xue    </method>
320*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
321*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
322*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
323*dc5640d1SHerbert Xue      deprecated="not deprecated">
324*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
325*dc5640d1SHerbert Xue      <doc>
326*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
327*dc5640d1SHerbert Xue      </doc>
328*dc5640d1SHerbert Xue    </method>
329*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
330*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
331*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
332*dc5640d1SHerbert Xue      deprecated="not deprecated">
333*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
334*dc5640d1SHerbert Xue      <doc>
335*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
336*dc5640d1SHerbert Xue      </doc>
337*dc5640d1SHerbert Xue    </method>
338*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
339*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
340*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
341*dc5640d1SHerbert Xue      deprecated="not deprecated">
342*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
343*dc5640d1SHerbert Xue      <doc>
344*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
345*dc5640d1SHerbert Xue      </doc>
346*dc5640d1SHerbert Xue    </method>
347*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
348*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
349*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
350*dc5640d1SHerbert Xue      deprecated="not deprecated">
351*dc5640d1SHerbert Xue      <doc>
352*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
353*dc5640d1SHerbert Xue      </doc>
354*dc5640d1SHerbert Xue    </method>
355*dc5640d1SHerbert Xue    <method name="requestInjection"
356*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
357*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
358*dc5640d1SHerbert Xue      deprecated="not deprecated">
359*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
360*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
361*dc5640d1SHerbert Xue      <doc>
362*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
363*dc5640d1SHerbert Xue and methods of the given object.
364*dc5640d1SHerbert Xue
365*dc5640d1SHerbert Xue @param type of instance
366*dc5640d1SHerbert Xue @param instance for which members will be injected
367*dc5640d1SHerbert Xue @since 2.0]]>
368*dc5640d1SHerbert Xue      </doc>
369*dc5640d1SHerbert Xue    </method>
370*dc5640d1SHerbert Xue    <method name="requestInjection"
371*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
373*dc5640d1SHerbert Xue      deprecated="not deprecated">
374*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
375*dc5640d1SHerbert Xue      <doc>
376*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
377*dc5640d1SHerbert Xue and methods of the given object.
378*dc5640d1SHerbert Xue
379*dc5640d1SHerbert Xue @param instance for which members will be injected
380*dc5640d1SHerbert Xue @since 2.0]]>
381*dc5640d1SHerbert Xue      </doc>
382*dc5640d1SHerbert Xue    </method>
383*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
384*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
385*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
386*dc5640d1SHerbert Xue      deprecated="not deprecated">
387*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
388*dc5640d1SHerbert Xue      <doc>
389*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
390*dc5640d1SHerbert Xue and methods in the given classes.
391*dc5640d1SHerbert Xue
392*dc5640d1SHerbert Xue @param types for which static members will be injected]]>
393*dc5640d1SHerbert Xue      </doc>
394*dc5640d1SHerbert Xue    </method>
395*dc5640d1SHerbert Xue    <method name="install"
396*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
397*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
398*dc5640d1SHerbert Xue      deprecated="not deprecated">
399*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
400*dc5640d1SHerbert Xue      <doc>
401*dc5640d1SHerbert Xue      <![CDATA[Uses the given module to configure more bindings.]]>
402*dc5640d1SHerbert Xue      </doc>
403*dc5640d1SHerbert Xue    </method>
404*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
405*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
406*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
407*dc5640d1SHerbert Xue      deprecated="not deprecated">
408*dc5640d1SHerbert Xue      <doc>
409*dc5640d1SHerbert Xue      <![CDATA[Gets the current stage.]]>
410*dc5640d1SHerbert Xue      </doc>
411*dc5640d1SHerbert Xue    </method>
412*dc5640d1SHerbert Xue    <method name="addError"
413*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
414*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
415*dc5640d1SHerbert Xue      deprecated="not deprecated">
416*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
417*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
418*dc5640d1SHerbert Xue      <doc>
419*dc5640d1SHerbert Xue      <![CDATA[Records an error message which will be presented to the user at a later
420*dc5640d1SHerbert Xue time. Unlike throwing an exception, this enable us to continue
421*dc5640d1SHerbert Xue configuring the Injector and discover more errors. Uses {@link
422*dc5640d1SHerbert Xue String#format(String, Object[])} to insert the arguments into the
423*dc5640d1SHerbert Xue message.]]>
424*dc5640d1SHerbert Xue      </doc>
425*dc5640d1SHerbert Xue    </method>
426*dc5640d1SHerbert Xue    <method name="addError"
427*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
428*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
429*dc5640d1SHerbert Xue      deprecated="not deprecated">
430*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
431*dc5640d1SHerbert Xue      <doc>
432*dc5640d1SHerbert Xue      <![CDATA[Records an exception, the full details of which will be logged, and the
433*dc5640d1SHerbert Xue message of which will be presented to the user at a later
434*dc5640d1SHerbert Xue time. If your Module calls something that you worry may fail, you should
435*dc5640d1SHerbert Xue catch the exception and pass it into this.]]>
436*dc5640d1SHerbert Xue      </doc>
437*dc5640d1SHerbert Xue    </method>
438*dc5640d1SHerbert Xue    <method name="addError"
439*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
440*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
441*dc5640d1SHerbert Xue      deprecated="not deprecated">
442*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
443*dc5640d1SHerbert Xue      <doc>
444*dc5640d1SHerbert Xue      <![CDATA[Records an error message to be presented to the user at a later time.
445*dc5640d1SHerbert Xue
446*dc5640d1SHerbert Xue @since 2.0]]>
447*dc5640d1SHerbert Xue      </doc>
448*dc5640d1SHerbert Xue    </method>
449*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
450*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
451*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
452*dc5640d1SHerbert Xue      deprecated="not deprecated">
453*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
454*dc5640d1SHerbert Xue      <doc>
455*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key.
456*dc5640d1SHerbert Xue The returned provider will not be valid until the {@link Injector} has been
457*dc5640d1SHerbert Xue created. The provider will throw an {@code IllegalStateException} if you
458*dc5640d1SHerbert Xue try to use it beforehand.
459*dc5640d1SHerbert Xue
460*dc5640d1SHerbert Xue @since 2.0]]>
461*dc5640d1SHerbert Xue      </doc>
462*dc5640d1SHerbert Xue    </method>
463*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
464*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
465*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
466*dc5640d1SHerbert Xue      deprecated="not deprecated">
467*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
468*dc5640d1SHerbert Xue      <doc>
469*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection type.
470*dc5640d1SHerbert Xue The returned provider will not be valid until the {@link Injector} has been
471*dc5640d1SHerbert Xue created. The provider will throw an {@code IllegalStateException} if you
472*dc5640d1SHerbert Xue try to use it beforehand.
473*dc5640d1SHerbert Xue
474*dc5640d1SHerbert Xue @since 2.0]]>
475*dc5640d1SHerbert Xue      </doc>
476*dc5640d1SHerbert Xue    </method>
477*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
478*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
479*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
480*dc5640d1SHerbert Xue      deprecated="not deprecated">
481*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
482*dc5640d1SHerbert Xue      <doc>
483*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
484*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
485*dc5640d1SHerbert Xue {@link Injector} has been created. The members injector will throw an {@code
486*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.
487*dc5640d1SHerbert Xue
488*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for
489*dc5640d1SHerbert Xue @since 2.0]]>
490*dc5640d1SHerbert Xue      </doc>
491*dc5640d1SHerbert Xue    </method>
492*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
493*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
494*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
495*dc5640d1SHerbert Xue      deprecated="not deprecated">
496*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
497*dc5640d1SHerbert Xue      <doc>
498*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
499*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
500*dc5640d1SHerbert Xue {@link Injector} has been created. The members injector will throw an {@code
501*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.
502*dc5640d1SHerbert Xue
503*dc5640d1SHerbert Xue @param type type to get members injector for
504*dc5640d1SHerbert Xue @since 2.0]]>
505*dc5640d1SHerbert Xue      </doc>
506*dc5640d1SHerbert Xue    </method>
507*dc5640d1SHerbert Xue    <method name="convertToTypes"
508*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
509*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
510*dc5640d1SHerbert Xue      deprecated="not deprecated">
511*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
512*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
513*dc5640d1SHerbert Xue      <doc>
514*dc5640d1SHerbert Xue      <![CDATA[Binds a type converter. The injector will use the given converter to
515*dc5640d1SHerbert Xue convert string constants to matching types as needed.
516*dc5640d1SHerbert Xue
517*dc5640d1SHerbert Xue @param typeMatcher matches types the converter can handle
518*dc5640d1SHerbert Xue @param converter converts values
519*dc5640d1SHerbert Xue @since 2.0]]>
520*dc5640d1SHerbert Xue      </doc>
521*dc5640d1SHerbert Xue    </method>
522*dc5640d1SHerbert Xue    <method name="bindListener"
523*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
524*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
525*dc5640d1SHerbert Xue      deprecated="not deprecated">
526*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
527*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
528*dc5640d1SHerbert Xue      <doc>
529*dc5640d1SHerbert Xue      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
530*dc5640d1SHerbert Xue injectable types matched by the given type matcher.
531*dc5640d1SHerbert Xue
532*dc5640d1SHerbert Xue @param typeMatcher that matches injectable types the listener should be notified of
533*dc5640d1SHerbert Xue @param listener for injectable types matched by typeMatcher
534*dc5640d1SHerbert Xue @since 2.0]]>
535*dc5640d1SHerbert Xue      </doc>
536*dc5640d1SHerbert Xue    </method>
537*dc5640d1SHerbert Xue    <method name="withSource" return="com.google.inject.Binder"
538*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
539*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
540*dc5640d1SHerbert Xue      deprecated="not deprecated">
541*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
542*dc5640d1SHerbert Xue      <doc>
543*dc5640d1SHerbert Xue      <![CDATA[Returns a binder that uses {@code source} as the reference location for
544*dc5640d1SHerbert Xue configuration errors. This is typically a {@link StackTraceElement}
545*dc5640d1SHerbert Xue for {@code .java} source but it could any binding source, such as the
546*dc5640d1SHerbert Xue path to a {@code .properties} file.
547*dc5640d1SHerbert Xue
548*dc5640d1SHerbert Xue @param source any object representing the source location and has a
549*dc5640d1SHerbert Xue     concise {@link Object#toString() toString()} value
550*dc5640d1SHerbert Xue @return a binder that shares its configuration with this binder
551*dc5640d1SHerbert Xue @since 2.0]]>
552*dc5640d1SHerbert Xue      </doc>
553*dc5640d1SHerbert Xue    </method>
554*dc5640d1SHerbert Xue    <method name="skipSources" return="com.google.inject.Binder"
555*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
556*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
557*dc5640d1SHerbert Xue      deprecated="not deprecated">
558*dc5640d1SHerbert Xue      <param name="classesToSkip" type="java.lang.Class[]"/>
559*dc5640d1SHerbert Xue      <doc>
560*dc5640d1SHerbert Xue      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
561*dc5640d1SHerbert Xue calling code. The caller's {@link StackTraceElement} is used to locate
562*dc5640d1SHerbert Xue the source of configuration errors.
563*dc5640d1SHerbert Xue
564*dc5640d1SHerbert Xue @param classesToSkip library classes that create bindings on behalf of
565*dc5640d1SHerbert Xue      their clients.
566*dc5640d1SHerbert Xue @return a binder that shares its configuration with this binder.
567*dc5640d1SHerbert Xue @since 2.0]]>
568*dc5640d1SHerbert Xue      </doc>
569*dc5640d1SHerbert Xue    </method>
570*dc5640d1SHerbert Xue    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
571*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
572*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
573*dc5640d1SHerbert Xue      deprecated="not deprecated">
574*dc5640d1SHerbert Xue      <doc>
575*dc5640d1SHerbert Xue      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
576*dc5640d1SHerbert Xue binder can be used to add and configuration information in this environment. See {@link
577*dc5640d1SHerbert Xue PrivateModule} for details.
578*dc5640d1SHerbert Xue
579*dc5640d1SHerbert Xue @return a binder that inherits configuration from this binder. Only exposed configuration on
580*dc5640d1SHerbert Xue      the returned binder will be visible to this binder.
581*dc5640d1SHerbert Xue @since 2.0]]>
582*dc5640d1SHerbert Xue      </doc>
583*dc5640d1SHerbert Xue    </method>
584*dc5640d1SHerbert Xue    <method name="requireExplicitBindings"
585*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
586*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
587*dc5640d1SHerbert Xue      deprecated="not deprecated">
588*dc5640d1SHerbert Xue      <doc>
589*dc5640d1SHerbert Xue      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
590*dc5640d1SHerbert Xue be injected. Classes that are not explicitly bound in a module cannot be
591*dc5640d1SHerbert Xue injected. Bindings created through a linked binding (
592*dc5640d1SHerbert Xue <code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
593*dc5640d1SHerbert Xue implicit binding (<code>FooImpl</code>) cannot be directly injected unless
594*dc5640d1SHerbert Xue it is also explicitly bound (<code>bind(FooImpl.class)</code>).
595*dc5640d1SHerbert Xue <p>
596*dc5640d1SHerbert Xue Tools can still retrieve bindings for implicit bindings (bindings created
597*dc5640d1SHerbert Xue through a linked binding) if explicit bindings are required, however
598*dc5640d1SHerbert Xue {@link Binding#getProvider} will fail.
599*dc5640d1SHerbert Xue <p>
600*dc5640d1SHerbert Xue By default, explicit bindings are not required.
601*dc5640d1SHerbert Xue <p>
602*dc5640d1SHerbert Xue If a parent injector requires explicit bindings, then all child injectors
603*dc5640d1SHerbert Xue (and private modules within that injector) also require explicit bindings.
604*dc5640d1SHerbert Xue If a parent does not require explicit bindings, a child injector or private
605*dc5640d1SHerbert Xue module may optionally declare itself as requiring explicit bindings. If it
606*dc5640d1SHerbert Xue does, the behavior is limited only to that child or any grandchildren. No
607*dc5640d1SHerbert Xue siblings of the child will require explicit bindings.
608*dc5640d1SHerbert Xue <p>
609*dc5640d1SHerbert Xue If the parent did not require explicit bindings but the child does, it is
610*dc5640d1SHerbert Xue possible that a linked binding in the child may add a JIT binding to the
611*dc5640d1SHerbert Xue parent. The child will not be allowed to reference the target binding
612*dc5640d1SHerbert Xue directly, but the parent and other children of the parent may be able to.
613*dc5640d1SHerbert Xue
614*dc5640d1SHerbert Xue @since 3.0]]>
615*dc5640d1SHerbert Xue      </doc>
616*dc5640d1SHerbert Xue    </method>
617*dc5640d1SHerbert Xue    <method name="disableCircularProxies"
618*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
619*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
620*dc5640d1SHerbert Xue      deprecated="not deprecated">
621*dc5640d1SHerbert Xue      <doc>
622*dc5640d1SHerbert Xue      <![CDATA[Prevents Guice from constructing a {@link Proxy} when a circular dependency
623*dc5640d1SHerbert Xue is found.  By default, circular proxies are not disabled.
624*dc5640d1SHerbert Xue <p>
625*dc5640d1SHerbert Xue If a parent injector disables circular proxies, then all child injectors
626*dc5640d1SHerbert Xue (and private modules within that injector) also disable circular proxies.
627*dc5640d1SHerbert Xue If a parent does not disable circular proxies, a child injector or private
628*dc5640d1SHerbert Xue module may optionally declare itself as disabling circular proxies. If it
629*dc5640d1SHerbert Xue does, the behavior is limited only to that child or any grandchildren. No
630*dc5640d1SHerbert Xue siblings of the child will disable circular proxies.
631*dc5640d1SHerbert Xue
632*dc5640d1SHerbert Xue @since 3.0]]>
633*dc5640d1SHerbert Xue      </doc>
634*dc5640d1SHerbert Xue    </method>
635*dc5640d1SHerbert Xue    <doc>
636*dc5640d1SHerbert Xue    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
637*dc5640d1SHerbert Xue used to create an {@link Injector}. Guice provides this object to your
638*dc5640d1SHerbert Xue application's {@link Module} implementors so they may each contribute
639*dc5640d1SHerbert Xue their own bindings and other registrations.
640*dc5640d1SHerbert Xue
641*dc5640d1SHerbert Xue <h3>The Guice Binding EDSL</h3>
642*dc5640d1SHerbert Xue
643*dc5640d1SHerbert Xue Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
644*dc5640d1SHerbert Xue create bindings simply and readably.  This approach is great for overall
645*dc5640d1SHerbert Xue usability, but it does come with a small cost: <b>it is difficult to
646*dc5640d1SHerbert Xue learn how to use the Binding EDSL by reading
647*dc5640d1SHerbert Xue method-level javadocs</b>.  Instead, you should consult the series of
648*dc5640d1SHerbert Xue examples below.  To save space, these examples omit the opening
649*dc5640d1SHerbert Xue {@code binder}, just as you will if your module extends
650*dc5640d1SHerbert Xue {@link AbstractModule}.
651*dc5640d1SHerbert Xue
652*dc5640d1SHerbert Xue <pre>
653*dc5640d1SHerbert Xue     bind(ServiceImpl.class);</pre>
654*dc5640d1SHerbert Xue
655*dc5640d1SHerbert Xue This statement does essentially nothing; it "binds the {@code ServiceImpl}
656*dc5640d1SHerbert Xue class to itself" and does not change Guice's default behavior.  You may still
657*dc5640d1SHerbert Xue want to use this if you prefer your {@link Module} class to serve as an
658*dc5640d1SHerbert Xue explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
659*dc5640d1SHerbert Xue Guice may be unable to validate a binding at injector creation time unless it
660*dc5640d1SHerbert Xue is given explicitly.
661*dc5640d1SHerbert Xue
662*dc5640d1SHerbert Xue <pre>
663*dc5640d1SHerbert Xue     bind(Service.class).to(ServiceImpl.class);</pre>
664*dc5640d1SHerbert Xue
665*dc5640d1SHerbert Xue Specifies that a request for a {@code Service} instance with no binding
666*dc5640d1SHerbert Xue annotations should be treated as if it were a request for a
667*dc5640d1SHerbert Xue {@code ServiceImpl} instance. This <i>overrides</i> the function of any
668*dc5640d1SHerbert Xue {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
669*dc5640d1SHerbert Xue annotations found on {@code Service}, since Guice will have already
670*dc5640d1SHerbert Xue "moved on" to {@code ServiceImpl} before it reaches the point when it starts
671*dc5640d1SHerbert Xue looking for these annotations.
672*dc5640d1SHerbert Xue
673*dc5640d1SHerbert Xue <pre>
674*dc5640d1SHerbert Xue     bind(Service.class).toProvider(ServiceProvider.class);</pre>
675*dc5640d1SHerbert Xue
676*dc5640d1SHerbert Xue In this example, {@code ServiceProvider} must extend or implement
677*dc5640d1SHerbert Xue {@code Provider<Service>}. This binding specifies that Guice should resolve
678*dc5640d1SHerbert Xue an unannotated injection request for {@code Service} by first resolving an
679*dc5640d1SHerbert Xue instance of {@code ServiceProvider} in the regular way, then calling
680*dc5640d1SHerbert Xue {@link Provider#get get()} on the resulting Provider instance to obtain the
681*dc5640d1SHerbert Xue {@code Service} instance.
682*dc5640d1SHerbert Xue
683*dc5640d1SHerbert Xue <p>The {@link Provider} you use here does not have to be a "factory"; that
684*dc5640d1SHerbert Xue is, a provider which always <i>creates</i> each instance it provides.
685*dc5640d1SHerbert Xue However, this is generally a good practice to follow.  You can then use
686*dc5640d1SHerbert Xue Guice's concept of {@link Scope scopes} to guide when creation should happen
687*dc5640d1SHerbert Xue -- "letting Guice work for you".
688*dc5640d1SHerbert Xue
689*dc5640d1SHerbert Xue <pre>
690*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
691*dc5640d1SHerbert Xue
692*dc5640d1SHerbert Xue Like the previous example, but only applies to injection requests that use
693*dc5640d1SHerbert Xue the binding annotation {@code @Red}.  If your module also includes bindings
694*dc5640d1SHerbert Xue for particular <i>values</i> of the {@code @Red} annotation (see below),
695*dc5640d1SHerbert Xue then this binding will serve as a "catch-all" for any values of {@code @Red}
696*dc5640d1SHerbert Xue that have no exact match in the bindings.
697*dc5640d1SHerbert Xue
698*dc5640d1SHerbert Xue <pre>
699*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Singleton.class);
700*dc5640d1SHerbert Xue     // or, alternatively
701*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
702*dc5640d1SHerbert Xue
703*dc5640d1SHerbert Xue Either of these statements places the {@code ServiceImpl} class into
704*dc5640d1SHerbert Xue singleton scope.  Guice will create only one instance of {@code ServiceImpl}
705*dc5640d1SHerbert Xue and will reuse it for all injection requests of this type.  Note that it is
706*dc5640d1SHerbert Xue still possible to bind another instance of {@code ServiceImpl} if the second
707*dc5640d1SHerbert Xue binding is qualified by an annotation as in the previous example.  Guice is
708*dc5640d1SHerbert Xue not overly concerned with <i>preventing</i> you from creating multiple
709*dc5640d1SHerbert Xue instances of your "singletons", only with <i>enabling</i> your application to
710*dc5640d1SHerbert Xue share only one instance if that's all you tell Guice you need.
711*dc5640d1SHerbert Xue
712*dc5640d1SHerbert Xue <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
713*dc5640d1SHerbert Xue was specified with an annotation on the {@code ServiceImpl} class.
714*dc5640d1SHerbert Xue
715*dc5640d1SHerbert Xue <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
716*dc5640d1SHerbert Xue servlet-specific scopes available in
717*dc5640d1SHerbert Xue {@code com.google.inject.servlet.ServletScopes}, and your Modules can
718*dc5640d1SHerbert Xue contribute their own custom scopes for use here as well.
719*dc5640d1SHerbert Xue
720*dc5640d1SHerbert Xue <pre>
721*dc5640d1SHerbert Xue     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
722*dc5640d1SHerbert Xue         .to(CreditCardPaymentService.class);</pre>
723*dc5640d1SHerbert Xue
724*dc5640d1SHerbert Xue This admittedly odd construct is the way to bind a parameterized type. It
725*dc5640d1SHerbert Xue tells Guice how to honor an injection request for an element of type
726*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>}. The class
727*dc5640d1SHerbert Xue {@code CreditCardPaymentService} must implement the
728*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
729*dc5640d1SHerbert Xue inject a generic type, such as {@code Set<E>}; all type parameters must be
730*dc5640d1SHerbert Xue fully specified.
731*dc5640d1SHerbert Xue
732*dc5640d1SHerbert Xue <pre>
733*dc5640d1SHerbert Xue     bind(Service.class).toInstance(new ServiceImpl());
734*dc5640d1SHerbert Xue     // or, alternatively
735*dc5640d1SHerbert Xue     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
736*dc5640d1SHerbert Xue
737*dc5640d1SHerbert Xue In this example, your module itself, <i>not Guice</i>, takes responsibility
738*dc5640d1SHerbert Xue for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
739*dc5640d1SHerbert Xue this single instance to fulfill all {@code Service} injection requests.  When
740*dc5640d1SHerbert Xue the {@link Injector} is created, it will automatically perform field
741*dc5640d1SHerbert Xue and method injection for this instance, but any injectable constructor on
742*dc5640d1SHerbert Xue {@code ServiceImpl} is simply ignored.  Note that using this approach results
743*dc5640d1SHerbert Xue in "eager loading" behavior that you can't control.
744*dc5640d1SHerbert Xue
745*dc5640d1SHerbert Xue <pre>
746*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
747*dc5640d1SHerbert Xue
748*dc5640d1SHerbert Xue Sets up a constant binding. Constant injections must always be annotated.
749*dc5640d1SHerbert Xue When a constant binding's value is a string, it is eligile for conversion to
750*dc5640d1SHerbert Xue all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
751*dc5640d1SHerbert Xue {@link Class#forName class literals}. Conversions for other types can be
752*dc5640d1SHerbert Xue configured using {@link #convertToTypes(Matcher, TypeConverter)
753*dc5640d1SHerbert Xue convertToTypes()}.
754*dc5640d1SHerbert Xue
755*dc5640d1SHerbert Xue <pre>
756*dc5640d1SHerbert Xue   {@literal @}Color("red") Color red; // A member variable (field)
757*dc5640d1SHerbert Xue    . . .
758*dc5640d1SHerbert Xue     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
759*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
760*dc5640d1SHerbert Xue
761*dc5640d1SHerbert Xue If your binding annotation has parameters you can apply different bindings to
762*dc5640d1SHerbert Xue different specific values of your annotation.  Getting your hands on the
763*dc5640d1SHerbert Xue right instance of the annotation is a bit of a pain -- one approach, shown
764*dc5640d1SHerbert Xue above, is to apply a prototype annotation to a field in your module class, so
765*dc5640d1SHerbert Xue that you can read this annotation instance and give it to Guice.
766*dc5640d1SHerbert Xue
767*dc5640d1SHerbert Xue <pre>
768*dc5640d1SHerbert Xue     bind(Service.class)
769*dc5640d1SHerbert Xue         .annotatedWith(Names.named("blue"))
770*dc5640d1SHerbert Xue         .to(BlueService.class);</pre>
771*dc5640d1SHerbert Xue
772*dc5640d1SHerbert Xue Differentiating by names is a common enough use case that we provided a
773*dc5640d1SHerbert Xue standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
774*dc5640d1SHerbert Xue Guice's library support, binding by name is quite easier than in the
775*dc5640d1SHerbert Xue arbitrary binding annotation case we just saw.  However, remember that these
776*dc5640d1SHerbert Xue names will live in a single flat namespace with all the other names used in
777*dc5640d1SHerbert Xue your application.
778*dc5640d1SHerbert Xue
779*dc5640d1SHerbert Xue <pre>
780*dc5640d1SHerbert Xue     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
781*dc5640d1SHerbert Xue     bind(ServiceImpl.class)
782*dc5640d1SHerbert Xue         .toConstructor(loneCtor);</pre>
783*dc5640d1SHerbert Xue
784*dc5640d1SHerbert Xue In this example, we directly tell Guice which constructor to use in a concrete
785*dc5640d1SHerbert Xue class implementation. It means that we do not need to place {@literal @}Inject
786*dc5640d1SHerbert Xue on any of the constructors and that Guice treats the provided constructor as though
787*dc5640d1SHerbert Xue it were annotated so. It is useful for cases where you cannot modify existing
788*dc5640d1SHerbert Xue classes and is a bit simpler than using a {@link Provider}.
789*dc5640d1SHerbert Xue
790*dc5640d1SHerbert Xue <p>The above list of examples is far from exhaustive.  If you can think of
791*dc5640d1SHerbert Xue how the concepts of one example might coexist with the concepts from another,
792*dc5640d1SHerbert Xue you can most likely weave the two together.  If the two concepts make no
793*dc5640d1SHerbert Xue sense with each other, you most likely won't be able to do it.  In a few
794*dc5640d1SHerbert Xue cases Guice will let something bogus slip by, and will then inform you of
795*dc5640d1SHerbert Xue the problems at runtime, as soon as you try to create your Injector.
796*dc5640d1SHerbert Xue
797*dc5640d1SHerbert Xue <p>The other methods of Binder such as {@link #bindScope},
798*dc5640d1SHerbert Xue {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
799*dc5640d1SHerbert Xue {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
800*dc5640d1SHerbert Xue you can learn how to use these in the usual way, from the method
801*dc5640d1SHerbert Xue documentation.
802*dc5640d1SHerbert Xue
803*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
804*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
805*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)]]>
806*dc5640d1SHerbert Xue    </doc>
807*dc5640d1SHerbert Xue  </interface>
808*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binder -->
809*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Binding -->
810*dc5640d1SHerbert Xue  <interface name="Binding"    abstract="true"
811*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
812*dc5640d1SHerbert Xue    deprecated="not deprecated">
813*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
814*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
815*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
816*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
817*dc5640d1SHerbert Xue      deprecated="not deprecated">
818*dc5640d1SHerbert Xue      <doc>
819*dc5640d1SHerbert Xue      <![CDATA[Returns the key for this binding.]]>
820*dc5640d1SHerbert Xue      </doc>
821*dc5640d1SHerbert Xue    </method>
822*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
823*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
824*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
825*dc5640d1SHerbert Xue      deprecated="not deprecated">
826*dc5640d1SHerbert Xue      <doc>
827*dc5640d1SHerbert Xue      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
828*dc5640d1SHerbert Xue binding.
829*dc5640d1SHerbert Xue
830*dc5640d1SHerbert Xue @throws UnsupportedOperationException when invoked on a {@link Binding}
831*dc5640d1SHerbert Xue      created via {@link com.google.inject.spi.Elements#getElements}. This
832*dc5640d1SHerbert Xue      method is only supported on {@link Binding}s returned from an injector.]]>
833*dc5640d1SHerbert Xue      </doc>
834*dc5640d1SHerbert Xue    </method>
835*dc5640d1SHerbert Xue    <method name="acceptTargetVisitor" return="V"
836*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
837*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
838*dc5640d1SHerbert Xue      deprecated="not deprecated">
839*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
840*dc5640d1SHerbert Xue      <doc>
841*dc5640d1SHerbert Xue      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
842*dc5640d1SHerbert Xue
843*dc5640d1SHerbert Xue @param visitor to call back on
844*dc5640d1SHerbert Xue @since 2.0]]>
845*dc5640d1SHerbert Xue      </doc>
846*dc5640d1SHerbert Xue    </method>
847*dc5640d1SHerbert Xue    <method name="acceptScopingVisitor" return="V"
848*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
849*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
850*dc5640d1SHerbert Xue      deprecated="not deprecated">
851*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
852*dc5640d1SHerbert Xue      <doc>
853*dc5640d1SHerbert Xue      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
854*dc5640d1SHerbert Xue
855*dc5640d1SHerbert Xue @param visitor to call back on
856*dc5640d1SHerbert Xue @since 2.0]]>
857*dc5640d1SHerbert Xue      </doc>
858*dc5640d1SHerbert Xue    </method>
859*dc5640d1SHerbert Xue    <doc>
860*dc5640d1SHerbert Xue    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
861*dc5640d1SHerbert Xue type. This interface is part of the introspection API and is intended primarily for use by
862*dc5640d1SHerbert Xue tools.
863*dc5640d1SHerbert Xue
864*dc5640d1SHerbert Xue <p>Bindings are created in several ways:
865*dc5640d1SHerbert Xue <ul>
866*dc5640d1SHerbert Xue     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
867*dc5640d1SHerbert Xue         statements:
868*dc5640d1SHerbert Xue <pre>
869*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
870*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
871*dc5640d1SHerbert Xue     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
872*dc5640d1SHerbert Xue         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
873*dc5640d1SHerbert Xue         default constructor.</li>
874*dc5640d1SHerbert Xue     <li>By converting a bound instance to a different type.</li>
875*dc5640d1SHerbert Xue     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
876*dc5640d1SHerbert Xue </ul>
877*dc5640d1SHerbert Xue
878*dc5640d1SHerbert Xue
879*dc5640d1SHerbert Xue <p>They exist on both modules and on injectors, and their behaviour is different for each:
880*dc5640d1SHerbert Xue <ul>
881*dc5640d1SHerbert Xue     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
882*dc5640d1SHerbert Xue         This is because the applicable scopes and interceptors may not be known until an injector
883*dc5640d1SHerbert Xue         is created. From a tool's perspective, module bindings are like the injector's source
884*dc5640d1SHerbert Xue         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
885*dc5640d1SHerbert Xue     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
886*dc5640d1SHerbert Xue         instances. From a tools' perspective, injector bindings are like reflection for an
887*dc5640d1SHerbert Xue         injector. They have full runtime information, including the complete graph of injections
888*dc5640d1SHerbert Xue         necessary to satisfy a binding.</li>
889*dc5640d1SHerbert Xue </ul>
890*dc5640d1SHerbert Xue
891*dc5640d1SHerbert Xue @param <T> the bound type. The injected is always assignable to this type.
892*dc5640d1SHerbert Xue
893*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
894*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
895*dc5640d1SHerbert Xue    </doc>
896*dc5640d1SHerbert Xue  </interface>
897*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binding -->
898*dc5640d1SHerbert Xue  <!-- start class com.google.inject.BindingAnnotation -->
899*dc5640d1SHerbert Xue  <class name="BindingAnnotation"    abstract="true"
900*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
901*dc5640d1SHerbert Xue    deprecated="not deprecated">
902*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
903*dc5640d1SHerbert Xue    <doc>
904*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
905*dc5640d1SHerbert Xue may apply to a single injection point. You must also annotate binder
906*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
907*dc5640d1SHerbert Xue
908*dc5640d1SHerbert Xue <pre>
909*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
910*dc5640d1SHerbert Xue   {@code @}Target({ FIELD, PARAMETER, METHOD })
911*dc5640d1SHerbert Xue   {@code @}BindingAnnotation
912*dc5640d1SHerbert Xue   public {@code @}interface Transactional {}
913*dc5640d1SHerbert Xue </pre>
914*dc5640d1SHerbert Xue
915*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
916*dc5640d1SHerbert Xue    </doc>
917*dc5640d1SHerbert Xue  </class>
918*dc5640d1SHerbert Xue  <!-- end class com.google.inject.BindingAnnotation -->
919*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ConfigurationException -->
920*dc5640d1SHerbert Xue  <class name="ConfigurationException" extends="java.lang.RuntimeException"
921*dc5640d1SHerbert Xue    abstract="false"
922*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
923*dc5640d1SHerbert Xue    deprecated="not deprecated">
924*dc5640d1SHerbert Xue    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
925*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
926*dc5640d1SHerbert Xue      deprecated="not deprecated">
927*dc5640d1SHerbert Xue      <doc>
928*dc5640d1SHerbert Xue      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
929*dc5640d1SHerbert Xue      </doc>
930*dc5640d1SHerbert Xue    </constructor>
931*dc5640d1SHerbert Xue    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
932*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
933*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
934*dc5640d1SHerbert Xue      deprecated="not deprecated">
935*dc5640d1SHerbert Xue      <param name="partialValue" type="java.lang.Object"/>
936*dc5640d1SHerbert Xue      <doc>
937*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
938*dc5640d1SHerbert Xue      </doc>
939*dc5640d1SHerbert Xue    </method>
940*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
941*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
942*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
943*dc5640d1SHerbert Xue      deprecated="not deprecated">
944*dc5640d1SHerbert Xue      <doc>
945*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
946*dc5640d1SHerbert Xue      </doc>
947*dc5640d1SHerbert Xue    </method>
948*dc5640d1SHerbert Xue    <method name="getPartialValue" return="E"
949*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
950*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
951*dc5640d1SHerbert Xue      deprecated="not deprecated">
952*dc5640d1SHerbert Xue      <doc>
953*dc5640d1SHerbert Xue      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
954*dc5640d1SHerbert Xue this while collecting additional configuration problems.
955*dc5640d1SHerbert Xue
956*dc5640d1SHerbert Xue @return the partial value, or {@code null} if none was set. The type of the partial value is
957*dc5640d1SHerbert Xue      specified by the throwing method.]]>
958*dc5640d1SHerbert Xue      </doc>
959*dc5640d1SHerbert Xue    </method>
960*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
961*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
962*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
963*dc5640d1SHerbert Xue      deprecated="not deprecated">
964*dc5640d1SHerbert Xue    </method>
965*dc5640d1SHerbert Xue    <doc>
966*dc5640d1SHerbert Xue    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
967*dc5640d1SHerbert Xue scope is found. Clients should catch this exception, log it, and stop execution.
968*dc5640d1SHerbert Xue
969*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
970*dc5640d1SHerbert Xue @since 2.0]]>
971*dc5640d1SHerbert Xue    </doc>
972*dc5640d1SHerbert Xue  </class>
973*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ConfigurationException -->
974*dc5640d1SHerbert Xue  <!-- start class com.google.inject.CreationException -->
975*dc5640d1SHerbert Xue  <class name="CreationException" extends="java.lang.RuntimeException"
976*dc5640d1SHerbert Xue    abstract="false"
977*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
978*dc5640d1SHerbert Xue    deprecated="not deprecated">
979*dc5640d1SHerbert Xue    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
980*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
981*dc5640d1SHerbert Xue      deprecated="not deprecated">
982*dc5640d1SHerbert Xue      <doc>
983*dc5640d1SHerbert Xue      <![CDATA[Creates a CreationException containing {@code messages}.]]>
984*dc5640d1SHerbert Xue      </doc>
985*dc5640d1SHerbert Xue    </constructor>
986*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
987*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
988*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
989*dc5640d1SHerbert Xue      deprecated="not deprecated">
990*dc5640d1SHerbert Xue      <doc>
991*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
992*dc5640d1SHerbert Xue      </doc>
993*dc5640d1SHerbert Xue    </method>
994*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
995*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
996*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
997*dc5640d1SHerbert Xue      deprecated="not deprecated">
998*dc5640d1SHerbert Xue    </method>
999*dc5640d1SHerbert Xue    <doc>
1000*dc5640d1SHerbert Xue    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1001*dc5640d1SHerbert Xue errors. Clients should catch this exception, log it, and stop execution.
1002*dc5640d1SHerbert Xue
1003*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1004*dc5640d1SHerbert Xue    </doc>
1005*dc5640d1SHerbert Xue  </class>
1006*dc5640d1SHerbert Xue  <!-- end class com.google.inject.CreationException -->
1007*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Exposed -->
1008*dc5640d1SHerbert Xue  <class name="Exposed"    abstract="true"
1009*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1010*dc5640d1SHerbert Xue    deprecated="not deprecated">
1011*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1012*dc5640d1SHerbert Xue    <doc>
1013*dc5640d1SHerbert Xue    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1014*dc5640d1SHerbert Xue private module to indicate that the provided binding is exposed.
1015*dc5640d1SHerbert Xue
1016*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1017*dc5640d1SHerbert Xue @since 2.0]]>
1018*dc5640d1SHerbert Xue    </doc>
1019*dc5640d1SHerbert Xue  </class>
1020*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Exposed -->
1021*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Guice -->
1022*dc5640d1SHerbert Xue  <class name="Guice" extends="java.lang.Object"
1023*dc5640d1SHerbert Xue    abstract="false"
1024*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1025*dc5640d1SHerbert Xue    deprecated="not deprecated">
1026*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1027*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1028*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1029*dc5640d1SHerbert Xue      deprecated="not deprecated">
1030*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1031*dc5640d1SHerbert Xue      <doc>
1032*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules.
1033*dc5640d1SHerbert Xue
1034*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1035*dc5640d1SHerbert Xue     construction]]>
1036*dc5640d1SHerbert Xue      </doc>
1037*dc5640d1SHerbert Xue    </method>
1038*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1039*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1040*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1041*dc5640d1SHerbert Xue      deprecated="not deprecated">
1042*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1043*dc5640d1SHerbert Xue      <doc>
1044*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules.
1045*dc5640d1SHerbert Xue
1046*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1047*dc5640d1SHerbert Xue     creation]]>
1048*dc5640d1SHerbert Xue      </doc>
1049*dc5640d1SHerbert Xue    </method>
1050*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1051*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1052*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1053*dc5640d1SHerbert Xue      deprecated="not deprecated">
1054*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1055*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1056*dc5640d1SHerbert Xue      <doc>
1057*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1058*dc5640d1SHerbert Xue stage.
1059*dc5640d1SHerbert Xue
1060*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1061*dc5640d1SHerbert Xue     creation.]]>
1062*dc5640d1SHerbert Xue      </doc>
1063*dc5640d1SHerbert Xue    </method>
1064*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1065*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1066*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1067*dc5640d1SHerbert Xue      deprecated="not deprecated">
1068*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1069*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1070*dc5640d1SHerbert Xue      <doc>
1071*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1072*dc5640d1SHerbert Xue stage.
1073*dc5640d1SHerbert Xue
1074*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1075*dc5640d1SHerbert Xue     construction]]>
1076*dc5640d1SHerbert Xue      </doc>
1077*dc5640d1SHerbert Xue    </method>
1078*dc5640d1SHerbert Xue    <doc>
1079*dc5640d1SHerbert Xue    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1080*dc5640d1SHerbert Xue {@link Module}s.
1081*dc5640d1SHerbert Xue
1082*dc5640d1SHerbert Xue <p>Guice supports a model of development that draws clear boundaries between
1083*dc5640d1SHerbert Xue APIs, Implementations of these APIs, Modules which configure these
1084*dc5640d1SHerbert Xue implementations, and finally Applications which consist of a collection of
1085*dc5640d1SHerbert Xue Modules. It is the Application, which typically defines your {@code main()}
1086*dc5640d1SHerbert Xue method, that bootstraps the Guice Injector using the {@code Guice} class, as
1087*dc5640d1SHerbert Xue in this example:
1088*dc5640d1SHerbert Xue <pre>
1089*dc5640d1SHerbert Xue     public class FooApplication {
1090*dc5640d1SHerbert Xue       public static void main(String[] args) {
1091*dc5640d1SHerbert Xue         Injector injector = Guice.createInjector(
1092*dc5640d1SHerbert Xue             new ModuleA(),
1093*dc5640d1SHerbert Xue             new ModuleB(),
1094*dc5640d1SHerbert Xue             . . .
1095*dc5640d1SHerbert Xue             new FooApplicationFlagsModule(args)
1096*dc5640d1SHerbert Xue         );
1097*dc5640d1SHerbert Xue
1098*dc5640d1SHerbert Xue         // Now just bootstrap the application and you're done
1099*dc5640d1SHerbert Xue         FooStarter starter = injector.getInstance(FooStarter.class);
1100*dc5640d1SHerbert Xue         starter.runApplication();
1101*dc5640d1SHerbert Xue       }
1102*dc5640d1SHerbert Xue     }
1103*dc5640d1SHerbert Xue </pre>]]>
1104*dc5640d1SHerbert Xue    </doc>
1105*dc5640d1SHerbert Xue  </class>
1106*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Guice -->
1107*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ImplementedBy -->
1108*dc5640d1SHerbert Xue  <class name="ImplementedBy"    abstract="true"
1109*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1110*dc5640d1SHerbert Xue    deprecated="not deprecated">
1111*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1112*dc5640d1SHerbert Xue    <doc>
1113*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default implementation of a type.
1114*dc5640d1SHerbert Xue
1115*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1116*dc5640d1SHerbert Xue    </doc>
1117*dc5640d1SHerbert Xue  </class>
1118*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ImplementedBy -->
1119*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Inject -->
1120*dc5640d1SHerbert Xue  <class name="Inject"    abstract="true"
1121*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1122*dc5640d1SHerbert Xue    deprecated="not deprecated">
1123*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1124*dc5640d1SHerbert Xue    <doc>
1125*dc5640d1SHerbert Xue    <![CDATA[Annotates members of your implementation class (constructors, methods
1126*dc5640d1SHerbert Xue and fields) into which the {@link Injector} should inject values.
1127*dc5640d1SHerbert Xue The Injector fulfills injection requests for:
1128*dc5640d1SHerbert Xue
1129*dc5640d1SHerbert Xue <ul>
1130*dc5640d1SHerbert Xue <li>Every instance it constructs. The class being constructed must have
1131*dc5640d1SHerbert Xue exactly one of its constructors marked with {@code @Inject} or must have a
1132*dc5640d1SHerbert Xue constructor taking no parameters. The Injector then proceeds to perform
1133*dc5640d1SHerbert Xue method and field injections.
1134*dc5640d1SHerbert Xue
1135*dc5640d1SHerbert Xue <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1136*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1137*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(Provider)}.
1138*dc5640d1SHerbert Xue In this case all constructors are, of course, ignored.
1139*dc5640d1SHerbert Xue
1140*dc5640d1SHerbert Xue <li>Static fields and methods of classes which any {@link Module} has
1141*dc5640d1SHerbert Xue specifically requested static injection for, using
1142*dc5640d1SHerbert Xue {@link Binder#requestStaticInjection}.
1143*dc5640d1SHerbert Xue </ul>
1144*dc5640d1SHerbert Xue
1145*dc5640d1SHerbert Xue In all cases, a member can be injected regardless of its Java access
1146*dc5640d1SHerbert Xue specifier (private, default, protected, public).
1147*dc5640d1SHerbert Xue
1148*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1149*dc5640d1SHerbert Xue    </doc>
1150*dc5640d1SHerbert Xue  </class>
1151*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Inject -->
1152*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Injector -->
1153*dc5640d1SHerbert Xue  <interface name="Injector"    abstract="true"
1154*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1155*dc5640d1SHerbert Xue    deprecated="not deprecated">
1156*dc5640d1SHerbert Xue    <method name="injectMembers"
1157*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1158*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1159*dc5640d1SHerbert Xue      deprecated="not deprecated">
1160*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
1161*dc5640d1SHerbert Xue      <doc>
1162*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1163*dc5640d1SHerbert Xue absence of an injectable constructor.
1164*dc5640d1SHerbert Xue
1165*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1166*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1167*dc5640d1SHerbert Xue you, you'll never need to use this method.
1168*dc5640d1SHerbert Xue
1169*dc5640d1SHerbert Xue @param instance to inject members on
1170*dc5640d1SHerbert Xue
1171*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1172*dc5640d1SHerbert Xue  run time]]>
1173*dc5640d1SHerbert Xue      </doc>
1174*dc5640d1SHerbert Xue    </method>
1175*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1176*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1177*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1178*dc5640d1SHerbert Xue      deprecated="not deprecated">
1179*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1180*dc5640d1SHerbert Xue      <doc>
1181*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1182*dc5640d1SHerbert Xue of the given type {@code T}.
1183*dc5640d1SHerbert Xue
1184*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for
1185*dc5640d1SHerbert Xue @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1186*dc5640d1SHerbert Xue  detection
1187*dc5640d1SHerbert Xue @since 2.0]]>
1188*dc5640d1SHerbert Xue      </doc>
1189*dc5640d1SHerbert Xue    </method>
1190*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1191*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1192*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1193*dc5640d1SHerbert Xue      deprecated="not deprecated">
1194*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1195*dc5640d1SHerbert Xue      <doc>
1196*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1197*dc5640d1SHerbert Xue of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1198*dc5640d1SHerbert Xue instead to get increased up front error detection.
1199*dc5640d1SHerbert Xue
1200*dc5640d1SHerbert Xue @param type type to get members injector for
1201*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1202*dc5640d1SHerbert Xue  detection
1203*dc5640d1SHerbert Xue @since 2.0]]>
1204*dc5640d1SHerbert Xue      </doc>
1205*dc5640d1SHerbert Xue    </method>
1206*dc5640d1SHerbert Xue    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1207*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1208*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1209*dc5640d1SHerbert Xue      deprecated="not deprecated">
1210*dc5640d1SHerbert Xue      <doc>
1211*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1212*dc5640d1SHerbert Xue
1213*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1214*dc5640d1SHerbert Xue injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1215*dc5640d1SHerbert Xue its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1216*dc5640d1SHerbert Xue which bindings appear in user Modules.
1217*dc5640d1SHerbert Xue
1218*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1219*dc5640d1SHerbert Xue      </doc>
1220*dc5640d1SHerbert Xue    </method>
1221*dc5640d1SHerbert Xue    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1222*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1223*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1224*dc5640d1SHerbert Xue      deprecated="not deprecated">
1225*dc5640d1SHerbert Xue      <doc>
1226*dc5640d1SHerbert Xue      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1227*dc5640d1SHerbert Xue just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1228*dc5640d1SHerbert Xue present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1229*dc5640d1SHerbert Xue additional just-in-time bindings.
1230*dc5640d1SHerbert Xue
1231*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1232*dc5640d1SHerbert Xue injector}, should one exist.
1233*dc5640d1SHerbert Xue
1234*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1235*dc5640d1SHerbert Xue
1236*dc5640d1SHerbert Xue @since 3.0]]>
1237*dc5640d1SHerbert Xue      </doc>
1238*dc5640d1SHerbert Xue    </method>
1239*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1240*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1241*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1242*dc5640d1SHerbert Xue      deprecated="not deprecated">
1243*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1244*dc5640d1SHerbert Xue      <doc>
1245*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1246*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1247*dc5640d1SHerbert Xue be created if necessary.
1248*dc5640d1SHerbert Xue
1249*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1250*dc5640d1SHerbert Xue
1251*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.]]>
1252*dc5640d1SHerbert Xue      </doc>
1253*dc5640d1SHerbert Xue    </method>
1254*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1255*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1256*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1257*dc5640d1SHerbert Xue      deprecated="not deprecated">
1258*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1259*dc5640d1SHerbert Xue      <doc>
1260*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1261*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1262*dc5640d1SHerbert Xue be created if necessary.
1263*dc5640d1SHerbert Xue
1264*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1265*dc5640d1SHerbert Xue
1266*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.
1267*dc5640d1SHerbert Xue @since 2.0]]>
1268*dc5640d1SHerbert Xue      </doc>
1269*dc5640d1SHerbert Xue    </method>
1270*dc5640d1SHerbert Xue    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1271*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1272*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1273*dc5640d1SHerbert Xue      deprecated="not deprecated">
1274*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1275*dc5640d1SHerbert Xue      <doc>
1276*dc5640d1SHerbert Xue      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1277*dc5640d1SHerbert Xue {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1278*dc5640d1SHerbert Xue for keys that aren't bound.
1279*dc5640d1SHerbert Xue
1280*dc5640d1SHerbert Xue <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1281*dc5640d1SHerbert Xue
1282*dc5640d1SHerbert Xue @since 3.0]]>
1283*dc5640d1SHerbert Xue      </doc>
1284*dc5640d1SHerbert Xue    </method>
1285*dc5640d1SHerbert Xue    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1286*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1287*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1288*dc5640d1SHerbert Xue      deprecated="not deprecated">
1289*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1290*dc5640d1SHerbert Xue      <doc>
1291*dc5640d1SHerbert Xue      <![CDATA[Returns all explicit bindings for {@code type}.
1292*dc5640d1SHerbert Xue
1293*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1294*dc5640d1SHerbert Xue      </doc>
1295*dc5640d1SHerbert Xue    </method>
1296*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1297*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1298*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1299*dc5640d1SHerbert Xue      deprecated="not deprecated">
1300*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1301*dc5640d1SHerbert Xue      <doc>
1302*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1303*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1304*dc5640d1SHerbert Xue
1305*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1306*dc5640d1SHerbert Xue @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1307*dc5640d1SHerbert Xue      </doc>
1308*dc5640d1SHerbert Xue    </method>
1309*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1310*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1311*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1312*dc5640d1SHerbert Xue      deprecated="not deprecated">
1313*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1314*dc5640d1SHerbert Xue      <doc>
1315*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1316*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1317*dc5640d1SHerbert Xue
1318*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1319*dc5640d1SHerbert Xue @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1320*dc5640d1SHerbert Xue      </doc>
1321*dc5640d1SHerbert Xue    </method>
1322*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1323*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1324*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1325*dc5640d1SHerbert Xue      deprecated="not deprecated">
1326*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1327*dc5640d1SHerbert Xue      <doc>
1328*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1329*dc5640d1SHerbert Xue getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1330*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1331*dc5640d1SHerbert Xue
1332*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1333*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1334*dc5640d1SHerbert Xue      </doc>
1335*dc5640d1SHerbert Xue    </method>
1336*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1337*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1338*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1339*dc5640d1SHerbert Xue      deprecated="not deprecated">
1340*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1341*dc5640d1SHerbert Xue      <doc>
1342*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1343*dc5640d1SHerbert Xue getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1344*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1345*dc5640d1SHerbert Xue
1346*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1347*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1348*dc5640d1SHerbert Xue      </doc>
1349*dc5640d1SHerbert Xue    </method>
1350*dc5640d1SHerbert Xue    <method name="getParent" return="com.google.inject.Injector"
1351*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1352*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1353*dc5640d1SHerbert Xue      deprecated="not deprecated">
1354*dc5640d1SHerbert Xue      <doc>
1355*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1356*dc5640d1SHerbert Xue
1357*dc5640d1SHerbert Xue @since 2.0]]>
1358*dc5640d1SHerbert Xue      </doc>
1359*dc5640d1SHerbert Xue    </method>
1360*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1361*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1362*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1363*dc5640d1SHerbert Xue      deprecated="not deprecated">
1364*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1365*dc5640d1SHerbert Xue      <doc>
1366*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1367*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1368*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1369*dc5640d1SHerbert Xue
1370*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1371*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1372*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1373*dc5640d1SHerbert Xue injections in just-in-time bindings (created in the parent injector) may be silently
1374*dc5640d1SHerbert Xue ignored if the optional dependencies are from the child injector.
1375*dc5640d1SHerbert Xue
1376*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1377*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1378*dc5640d1SHerbert Xue injector to itself.
1379*dc5640d1SHerbert Xue
1380*dc5640d1SHerbert Xue @since 2.0]]>
1381*dc5640d1SHerbert Xue      </doc>
1382*dc5640d1SHerbert Xue    </method>
1383*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1384*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1385*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1386*dc5640d1SHerbert Xue      deprecated="not deprecated">
1387*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1388*dc5640d1SHerbert Xue      <doc>
1389*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1390*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1391*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1392*dc5640d1SHerbert Xue
1393*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1394*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1395*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.
1396*dc5640d1SHerbert Xue
1397*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1398*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1399*dc5640d1SHerbert Xue injector to itself.
1400*dc5640d1SHerbert Xue
1401*dc5640d1SHerbert Xue @since 2.0]]>
1402*dc5640d1SHerbert Xue      </doc>
1403*dc5640d1SHerbert Xue    </method>
1404*dc5640d1SHerbert Xue    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1405*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1406*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1407*dc5640d1SHerbert Xue      deprecated="not deprecated">
1408*dc5640d1SHerbert Xue      <doc>
1409*dc5640d1SHerbert Xue      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1410*dc5640d1SHerbert Xue like {@code Singleton.class}, and the values are scope instances, such as {@code
1411*dc5640d1SHerbert Xue Scopes.SINGLETON}. The returned map is immutable.
1412*dc5640d1SHerbert Xue
1413*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1414*dc5640d1SHerbert Xue
1415*dc5640d1SHerbert Xue @since 3.0]]>
1416*dc5640d1SHerbert Xue      </doc>
1417*dc5640d1SHerbert Xue    </method>
1418*dc5640d1SHerbert Xue    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1419*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1420*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1421*dc5640d1SHerbert Xue      deprecated="not deprecated">
1422*dc5640d1SHerbert Xue      <doc>
1423*dc5640d1SHerbert Xue      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1424*dc5640d1SHerbert Xue immutable.
1425*dc5640d1SHerbert Xue
1426*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1427*dc5640d1SHerbert Xue
1428*dc5640d1SHerbert Xue @since 3.0]]>
1429*dc5640d1SHerbert Xue      </doc>
1430*dc5640d1SHerbert Xue    </method>
1431*dc5640d1SHerbert Xue    <doc>
1432*dc5640d1SHerbert Xue    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1433*dc5640d1SHerbert Xue for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1434*dc5640d1SHerbert Xue interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1435*dc5640d1SHerbert Xue injection from its cousin, the service locator pattern.
1436*dc5640d1SHerbert Xue
1437*dc5640d1SHerbert Xue <p>Contains several default bindings:
1438*dc5640d1SHerbert Xue
1439*dc5640d1SHerbert Xue <ul>
1440*dc5640d1SHerbert Xue <li>This {@link Injector} instance itself
1441*dc5640d1SHerbert Xue <li>A {@code Provider<T>} for each binding of type {@code T}
1442*dc5640d1SHerbert Xue <li>The {@link java.util.logging.Logger} for the class being injected
1443*dc5640d1SHerbert Xue <li>The {@link Stage} in which the Injector was created
1444*dc5640d1SHerbert Xue </ul>
1445*dc5640d1SHerbert Xue
1446*dc5640d1SHerbert Xue Injectors are created using the facade class {@link Guice}.
1447*dc5640d1SHerbert Xue
1448*dc5640d1SHerbert Xue <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1449*dc5640d1SHerbert Xue already-constructed instances. This can be used to interoperate with objects created by other
1450*dc5640d1SHerbert Xue frameworks or services.
1451*dc5640d1SHerbert Xue
1452*dc5640d1SHerbert Xue <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1453*dc5640d1SHerbert Xue the configuration of their parent injectors, but the converse does not hold.
1454*dc5640d1SHerbert Xue
1455*dc5640d1SHerbert Xue <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1456*dc5640d1SHerbert Xue enables tools and extensions to operate on an injector reflectively.
1457*dc5640d1SHerbert Xue
1458*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1459*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
1460*dc5640d1SHerbert Xue    </doc>
1461*dc5640d1SHerbert Xue  </interface>
1462*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Injector -->
1463*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Key -->
1464*dc5640d1SHerbert Xue  <class name="Key" extends="java.lang.Object"
1465*dc5640d1SHerbert Xue    abstract="false"
1466*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1467*dc5640d1SHerbert Xue    deprecated="not deprecated">
1468*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1469*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1470*dc5640d1SHerbert Xue      deprecated="not deprecated">
1471*dc5640d1SHerbert Xue      <doc>
1472*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1473*dc5640d1SHerbert Xue
1474*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1475*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1476*dc5640d1SHerbert Xue at runtime despite erasure.
1477*dc5640d1SHerbert Xue
1478*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1479*dc5640d1SHerbert Xue {@code @Bar}:
1480*dc5640d1SHerbert Xue
1481*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1482*dc5640d1SHerbert Xue      </doc>
1483*dc5640d1SHerbert Xue    </constructor>
1484*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.annotation.Annotation"
1485*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1486*dc5640d1SHerbert Xue      deprecated="not deprecated">
1487*dc5640d1SHerbert Xue      <doc>
1488*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1489*dc5640d1SHerbert Xue
1490*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1491*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1492*dc5640d1SHerbert Xue at runtime despite erasure.
1493*dc5640d1SHerbert Xue
1494*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1495*dc5640d1SHerbert Xue {@code @Bar}:
1496*dc5640d1SHerbert Xue
1497*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1498*dc5640d1SHerbert Xue      </doc>
1499*dc5640d1SHerbert Xue    </constructor>
1500*dc5640d1SHerbert Xue    <constructor name="Key"
1501*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1502*dc5640d1SHerbert Xue      deprecated="not deprecated">
1503*dc5640d1SHerbert Xue      <doc>
1504*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1505*dc5640d1SHerbert Xue
1506*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1507*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1508*dc5640d1SHerbert Xue at runtime despite erasure.
1509*dc5640d1SHerbert Xue
1510*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo}:
1511*dc5640d1SHerbert Xue
1512*dc5640d1SHerbert Xue <p>{@code new Key<Foo>() {}}.]]>
1513*dc5640d1SHerbert Xue      </doc>
1514*dc5640d1SHerbert Xue    </constructor>
1515*dc5640d1SHerbert Xue    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1516*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1517*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1518*dc5640d1SHerbert Xue      deprecated="not deprecated">
1519*dc5640d1SHerbert Xue      <doc>
1520*dc5640d1SHerbert Xue      <![CDATA[Gets the key type.]]>
1521*dc5640d1SHerbert Xue      </doc>
1522*dc5640d1SHerbert Xue    </method>
1523*dc5640d1SHerbert Xue    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1524*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1525*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1526*dc5640d1SHerbert Xue      deprecated="not deprecated">
1527*dc5640d1SHerbert Xue      <doc>
1528*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation type.]]>
1529*dc5640d1SHerbert Xue      </doc>
1530*dc5640d1SHerbert Xue    </method>
1531*dc5640d1SHerbert Xue    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1532*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1533*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1534*dc5640d1SHerbert Xue      deprecated="not deprecated">
1535*dc5640d1SHerbert Xue      <doc>
1536*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation.]]>
1537*dc5640d1SHerbert Xue      </doc>
1538*dc5640d1SHerbert Xue    </method>
1539*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
1540*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1541*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1542*dc5640d1SHerbert Xue      deprecated="not deprecated">
1543*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
1544*dc5640d1SHerbert Xue    </method>
1545*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
1546*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1547*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1548*dc5640d1SHerbert Xue      deprecated="not deprecated">
1549*dc5640d1SHerbert Xue    </method>
1550*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
1551*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1552*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1553*dc5640d1SHerbert Xue      deprecated="not deprecated">
1554*dc5640d1SHerbert Xue    </method>
1555*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1556*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1557*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1558*dc5640d1SHerbert Xue      deprecated="not deprecated">
1559*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1560*dc5640d1SHerbert Xue      <doc>
1561*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1562*dc5640d1SHerbert Xue      </doc>
1563*dc5640d1SHerbert Xue    </method>
1564*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1565*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1566*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1567*dc5640d1SHerbert Xue      deprecated="not deprecated">
1568*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1569*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1570*dc5640d1SHerbert Xue      <doc>
1571*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1572*dc5640d1SHerbert Xue      </doc>
1573*dc5640d1SHerbert Xue    </method>
1574*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1575*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1576*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1577*dc5640d1SHerbert Xue      deprecated="not deprecated">
1578*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1579*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1580*dc5640d1SHerbert Xue      <doc>
1581*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1582*dc5640d1SHerbert Xue      </doc>
1583*dc5640d1SHerbert Xue    </method>
1584*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1585*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1586*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1587*dc5640d1SHerbert Xue      deprecated="not deprecated">
1588*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1589*dc5640d1SHerbert Xue      <doc>
1590*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1591*dc5640d1SHerbert Xue      </doc>
1592*dc5640d1SHerbert Xue    </method>
1593*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1594*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1595*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1596*dc5640d1SHerbert Xue      deprecated="not deprecated">
1597*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1598*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1599*dc5640d1SHerbert Xue      <doc>
1600*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1601*dc5640d1SHerbert Xue      </doc>
1602*dc5640d1SHerbert Xue    </method>
1603*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1604*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1605*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1606*dc5640d1SHerbert Xue      deprecated="not deprecated">
1607*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1608*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1609*dc5640d1SHerbert Xue      <doc>
1610*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1611*dc5640d1SHerbert Xue      </doc>
1612*dc5640d1SHerbert Xue    </method>
1613*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1614*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1615*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1616*dc5640d1SHerbert Xue      deprecated="not deprecated">
1617*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1618*dc5640d1SHerbert Xue      <doc>
1619*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1620*dc5640d1SHerbert Xue      </doc>
1621*dc5640d1SHerbert Xue    </method>
1622*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1623*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1624*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1625*dc5640d1SHerbert Xue      deprecated="not deprecated">
1626*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1627*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1628*dc5640d1SHerbert Xue      <doc>
1629*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1630*dc5640d1SHerbert Xue      </doc>
1631*dc5640d1SHerbert Xue    </method>
1632*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1633*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1634*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1635*dc5640d1SHerbert Xue      deprecated="not deprecated">
1636*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1637*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1638*dc5640d1SHerbert Xue      <doc>
1639*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1640*dc5640d1SHerbert Xue      </doc>
1641*dc5640d1SHerbert Xue    </method>
1642*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1643*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1644*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1645*dc5640d1SHerbert Xue      deprecated="not deprecated">
1646*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1647*dc5640d1SHerbert Xue      <doc>
1648*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1649*dc5640d1SHerbert Xue key.
1650*dc5640d1SHerbert Xue
1651*dc5640d1SHerbert Xue @since 3.0]]>
1652*dc5640d1SHerbert Xue      </doc>
1653*dc5640d1SHerbert Xue    </method>
1654*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1655*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1656*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1657*dc5640d1SHerbert Xue      deprecated="not deprecated">
1658*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1659*dc5640d1SHerbert Xue      <doc>
1660*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1661*dc5640d1SHerbert Xue key.
1662*dc5640d1SHerbert Xue
1663*dc5640d1SHerbert Xue @since 3.0]]>
1664*dc5640d1SHerbert Xue      </doc>
1665*dc5640d1SHerbert Xue    </method>
1666*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1667*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1668*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1669*dc5640d1SHerbert Xue      deprecated="not deprecated">
1670*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1671*dc5640d1SHerbert Xue      <doc>
1672*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1673*dc5640d1SHerbert Xue key.
1674*dc5640d1SHerbert Xue
1675*dc5640d1SHerbert Xue @since 3.0]]>
1676*dc5640d1SHerbert Xue      </doc>
1677*dc5640d1SHerbert Xue    </method>
1678*dc5640d1SHerbert Xue    <method name="hasAttributes" return="boolean"
1679*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1680*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1681*dc5640d1SHerbert Xue      deprecated="not deprecated">
1682*dc5640d1SHerbert Xue      <doc>
1683*dc5640d1SHerbert Xue      <![CDATA[Returns true if this key has annotation attributes.
1684*dc5640d1SHerbert Xue
1685*dc5640d1SHerbert Xue @since 3.0]]>
1686*dc5640d1SHerbert Xue      </doc>
1687*dc5640d1SHerbert Xue    </method>
1688*dc5640d1SHerbert Xue    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1689*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1690*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1691*dc5640d1SHerbert Xue      deprecated="not deprecated">
1692*dc5640d1SHerbert Xue      <doc>
1693*dc5640d1SHerbert Xue      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1694*dc5640d1SHerbert Xue annotation type.
1695*dc5640d1SHerbert Xue
1696*dc5640d1SHerbert Xue @since 3.0]]>
1697*dc5640d1SHerbert Xue      </doc>
1698*dc5640d1SHerbert Xue    </method>
1699*dc5640d1SHerbert Xue    <doc>
1700*dc5640d1SHerbert Xue    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1701*dc5640d1SHerbert Xue Matches the type and annotation at a point of injection.
1702*dc5640d1SHerbert Xue
1703*dc5640d1SHerbert Xue <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1704*dc5640d1SHerbert Xue match:
1705*dc5640d1SHerbert Xue
1706*dc5640d1SHerbert Xue <pre>
1707*dc5640d1SHerbert Xue   {@literal @}Inject
1708*dc5640d1SHerbert Xue   public void setService({@literal @}Transactional Service service) {
1709*dc5640d1SHerbert Xue     ...
1710*dc5640d1SHerbert Xue   }
1711*dc5640d1SHerbert Xue </pre>
1712*dc5640d1SHerbert Xue
1713*dc5640d1SHerbert Xue <p>{@code Key} supports generic types via subclassing just like {@link
1714*dc5640d1SHerbert Xue TypeLiteral}.
1715*dc5640d1SHerbert Xue
1716*dc5640d1SHerbert Xue <p>Keys do not differentiate between primitive types (int, char, etc.) and
1717*dc5640d1SHerbert Xue their correpsonding wrapper types (Integer, Character, etc.). Primitive
1718*dc5640d1SHerbert Xue types will be replaced with their wrapper types when keys are created.
1719*dc5640d1SHerbert Xue
1720*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1721*dc5640d1SHerbert Xue    </doc>
1722*dc5640d1SHerbert Xue  </class>
1723*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Key -->
1724*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.MembersInjector -->
1725*dc5640d1SHerbert Xue  <interface name="MembersInjector"    abstract="true"
1726*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1727*dc5640d1SHerbert Xue    deprecated="not deprecated">
1728*dc5640d1SHerbert Xue    <method name="injectMembers"
1729*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1730*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1731*dc5640d1SHerbert Xue      deprecated="not deprecated">
1732*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
1733*dc5640d1SHerbert Xue      <doc>
1734*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1735*dc5640d1SHerbert Xue absence of an injectable constructor.
1736*dc5640d1SHerbert Xue
1737*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1738*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1739*dc5640d1SHerbert Xue you, you'll never need to use this method.
1740*dc5640d1SHerbert Xue
1741*dc5640d1SHerbert Xue @param instance to inject members on. May be {@code null}.]]>
1742*dc5640d1SHerbert Xue      </doc>
1743*dc5640d1SHerbert Xue    </method>
1744*dc5640d1SHerbert Xue    <doc>
1745*dc5640d1SHerbert Xue    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1746*dc5640d1SHerbert Xue presence or absence of an injectable constructor.
1747*dc5640d1SHerbert Xue
1748*dc5640d1SHerbert Xue @param <T> type to inject members of
1749*dc5640d1SHerbert Xue
1750*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1751*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1752*dc5640d1SHerbert Xue @since 2.0]]>
1753*dc5640d1SHerbert Xue    </doc>
1754*dc5640d1SHerbert Xue  </interface>
1755*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.MembersInjector -->
1756*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Module -->
1757*dc5640d1SHerbert Xue  <interface name="Module"    abstract="true"
1758*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1759*dc5640d1SHerbert Xue    deprecated="not deprecated">
1760*dc5640d1SHerbert Xue    <method name="configure"
1761*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1762*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1763*dc5640d1SHerbert Xue      deprecated="not deprecated">
1764*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1765*dc5640d1SHerbert Xue      <doc>
1766*dc5640d1SHerbert Xue      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1767*dc5640d1SHerbert Xue
1768*dc5640d1SHerbert Xue <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1769*dc5640d1SHerbert Xue {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1770*dc5640d1SHerbert Xue discovered.]]>
1771*dc5640d1SHerbert Xue      </doc>
1772*dc5640d1SHerbert Xue    </method>
1773*dc5640d1SHerbert Xue    <doc>
1774*dc5640d1SHerbert Xue    <![CDATA[A module contributes configuration information, typically interface
1775*dc5640d1SHerbert Xue bindings, which will be used to create an {@link Injector}. A Guice-based
1776*dc5640d1SHerbert Xue application is ultimately composed of little more than a set of
1777*dc5640d1SHerbert Xue {@code Module}s and some bootstrapping code.
1778*dc5640d1SHerbert Xue
1779*dc5640d1SHerbert Xue <p>Your Module classes can use a more streamlined syntax by extending
1780*dc5640d1SHerbert Xue {@link AbstractModule} rather than implementing this interface directly.
1781*dc5640d1SHerbert Xue
1782*dc5640d1SHerbert Xue <p>In addition to the bindings configured via {@link #configure}, bindings
1783*dc5640d1SHerbert Xue will be created for all methods annotated with {@literal @}{@link Provides}.
1784*dc5640d1SHerbert Xue Use scope and binding annotations on these methods to configure the
1785*dc5640d1SHerbert Xue bindings.]]>
1786*dc5640d1SHerbert Xue    </doc>
1787*dc5640d1SHerbert Xue  </interface>
1788*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Module -->
1789*dc5640d1SHerbert Xue  <!-- start class com.google.inject.OutOfScopeException -->
1790*dc5640d1SHerbert Xue  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1791*dc5640d1SHerbert Xue    abstract="false"
1792*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1793*dc5640d1SHerbert Xue    deprecated="not deprecated">
1794*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String"
1795*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1796*dc5640d1SHerbert Xue      deprecated="not deprecated">
1797*dc5640d1SHerbert Xue    </constructor>
1798*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1799*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1800*dc5640d1SHerbert Xue      deprecated="not deprecated">
1801*dc5640d1SHerbert Xue    </constructor>
1802*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1803*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1804*dc5640d1SHerbert Xue      deprecated="not deprecated">
1805*dc5640d1SHerbert Xue    </constructor>
1806*dc5640d1SHerbert Xue    <doc>
1807*dc5640d1SHerbert Xue    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1808*dc5640d1SHerbert Xue object while the scope in question is not currently active.
1809*dc5640d1SHerbert Xue
1810*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
1811*dc5640d1SHerbert Xue @since 2.0]]>
1812*dc5640d1SHerbert Xue    </doc>
1813*dc5640d1SHerbert Xue  </class>
1814*dc5640d1SHerbert Xue  <!-- end class com.google.inject.OutOfScopeException -->
1815*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.PrivateBinder -->
1816*dc5640d1SHerbert Xue  <interface name="PrivateBinder"    abstract="true"
1817*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1818*dc5640d1SHerbert Xue    deprecated="not deprecated">
1819*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binder"/>
1820*dc5640d1SHerbert Xue    <method name="expose"
1821*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1822*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1823*dc5640d1SHerbert Xue      deprecated="not deprecated">
1824*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1825*dc5640d1SHerbert Xue      <doc>
1826*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1827*dc5640d1SHerbert Xue      </doc>
1828*dc5640d1SHerbert Xue    </method>
1829*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1830*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1832*dc5640d1SHerbert Xue      deprecated="not deprecated">
1833*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1834*dc5640d1SHerbert Xue      <doc>
1835*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1836*dc5640d1SHerbert Xue com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1837*dc5640d1SHerbert Xue binding annotation.]]>
1838*dc5640d1SHerbert Xue      </doc>
1839*dc5640d1SHerbert Xue    </method>
1840*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1841*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1842*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1843*dc5640d1SHerbert Xue      deprecated="not deprecated">
1844*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1845*dc5640d1SHerbert Xue      <doc>
1846*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1847*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1848*dc5640d1SHerbert Xue binding annotation.]]>
1849*dc5640d1SHerbert Xue      </doc>
1850*dc5640d1SHerbert Xue    </method>
1851*dc5640d1SHerbert Xue    <method name="withSource" return="com.google.inject.PrivateBinder"
1852*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1853*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1854*dc5640d1SHerbert Xue      deprecated="not deprecated">
1855*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
1856*dc5640d1SHerbert Xue    </method>
1857*dc5640d1SHerbert Xue    <method name="skipSources" return="com.google.inject.PrivateBinder"
1858*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1859*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1860*dc5640d1SHerbert Xue      deprecated="not deprecated">
1861*dc5640d1SHerbert Xue      <param name="classesToSkip" type="java.lang.Class[]"/>
1862*dc5640d1SHerbert Xue    </method>
1863*dc5640d1SHerbert Xue    <doc>
1864*dc5640d1SHerbert Xue    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1865*dc5640d1SHerbert Xue {@link com.google.inject.PrivateModule PrivateModule} for details.
1866*dc5640d1SHerbert Xue
1867*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1868*dc5640d1SHerbert Xue @since 2.0]]>
1869*dc5640d1SHerbert Xue    </doc>
1870*dc5640d1SHerbert Xue  </interface>
1871*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.PrivateBinder -->
1872*dc5640d1SHerbert Xue  <!-- start class com.google.inject.PrivateModule -->
1873*dc5640d1SHerbert Xue  <class name="PrivateModule" extends="java.lang.Object"
1874*dc5640d1SHerbert Xue    abstract="true"
1875*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1876*dc5640d1SHerbert Xue    deprecated="not deprecated">
1877*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
1878*dc5640d1SHerbert Xue    <constructor name="PrivateModule"
1879*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1880*dc5640d1SHerbert Xue      deprecated="not deprecated">
1881*dc5640d1SHerbert Xue    </constructor>
1882*dc5640d1SHerbert Xue    <method name="configure"
1883*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="true"
1884*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1885*dc5640d1SHerbert Xue      deprecated="not deprecated">
1886*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1887*dc5640d1SHerbert Xue    </method>
1888*dc5640d1SHerbert Xue    <method name="configure"
1889*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1890*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1891*dc5640d1SHerbert Xue      deprecated="not deprecated">
1892*dc5640d1SHerbert Xue      <doc>
1893*dc5640d1SHerbert Xue      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1894*dc5640d1SHerbert Xue expose()} to make the bindings in this module available externally.]]>
1895*dc5640d1SHerbert Xue      </doc>
1896*dc5640d1SHerbert Xue    </method>
1897*dc5640d1SHerbert Xue    <method name="expose"
1898*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1899*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1900*dc5640d1SHerbert Xue      deprecated="not deprecated">
1901*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1902*dc5640d1SHerbert Xue      <doc>
1903*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1904*dc5640d1SHerbert Xue      </doc>
1905*dc5640d1SHerbert Xue    </method>
1906*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1907*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1908*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1909*dc5640d1SHerbert Xue      deprecated="not deprecated">
1910*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1911*dc5640d1SHerbert Xue      <doc>
1912*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1913*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1914*dc5640d1SHerbert Xue binding annotation.]]>
1915*dc5640d1SHerbert Xue      </doc>
1916*dc5640d1SHerbert Xue    </method>
1917*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1918*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1919*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1920*dc5640d1SHerbert Xue      deprecated="not deprecated">
1921*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1922*dc5640d1SHerbert Xue      <doc>
1923*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1924*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1925*dc5640d1SHerbert Xue binding annotation.]]>
1926*dc5640d1SHerbert Xue      </doc>
1927*dc5640d1SHerbert Xue    </method>
1928*dc5640d1SHerbert Xue    <method name="binder" return="com.google.inject.PrivateBinder"
1929*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1930*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1931*dc5640d1SHerbert Xue      deprecated="not deprecated">
1932*dc5640d1SHerbert Xue      <doc>
1933*dc5640d1SHerbert Xue      <![CDATA[Returns the current binder.]]>
1934*dc5640d1SHerbert Xue      </doc>
1935*dc5640d1SHerbert Xue    </method>
1936*dc5640d1SHerbert Xue    <method name="bindScope"
1937*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1938*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1939*dc5640d1SHerbert Xue      deprecated="not deprecated">
1940*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1941*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
1942*dc5640d1SHerbert Xue      <doc>
1943*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
1944*dc5640d1SHerbert Xue      </doc>
1945*dc5640d1SHerbert Xue    </method>
1946*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
1947*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1948*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1949*dc5640d1SHerbert Xue      deprecated="not deprecated">
1950*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1951*dc5640d1SHerbert Xue      <doc>
1952*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Key)]]>
1953*dc5640d1SHerbert Xue      </doc>
1954*dc5640d1SHerbert Xue    </method>
1955*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
1956*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1957*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1958*dc5640d1SHerbert Xue      deprecated="not deprecated">
1959*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1960*dc5640d1SHerbert Xue      <doc>
1961*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(TypeLiteral)]]>
1962*dc5640d1SHerbert Xue      </doc>
1963*dc5640d1SHerbert Xue    </method>
1964*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
1965*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1966*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1967*dc5640d1SHerbert Xue      deprecated="not deprecated">
1968*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
1969*dc5640d1SHerbert Xue      <doc>
1970*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Class)]]>
1971*dc5640d1SHerbert Xue      </doc>
1972*dc5640d1SHerbert Xue    </method>
1973*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
1974*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1975*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1976*dc5640d1SHerbert Xue      deprecated="not deprecated">
1977*dc5640d1SHerbert Xue      <doc>
1978*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindConstant()]]>
1979*dc5640d1SHerbert Xue      </doc>
1980*dc5640d1SHerbert Xue    </method>
1981*dc5640d1SHerbert Xue    <method name="install"
1982*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1983*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1984*dc5640d1SHerbert Xue      deprecated="not deprecated">
1985*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
1986*dc5640d1SHerbert Xue      <doc>
1987*dc5640d1SHerbert Xue      <![CDATA[@see Binder#install(Module)]]>
1988*dc5640d1SHerbert Xue      </doc>
1989*dc5640d1SHerbert Xue    </method>
1990*dc5640d1SHerbert Xue    <method name="addError"
1991*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1992*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1993*dc5640d1SHerbert Xue      deprecated="not deprecated">
1994*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
1995*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
1996*dc5640d1SHerbert Xue      <doc>
1997*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(String, Object[])]]>
1998*dc5640d1SHerbert Xue      </doc>
1999*dc5640d1SHerbert Xue    </method>
2000*dc5640d1SHerbert Xue    <method name="addError"
2001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2002*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2003*dc5640d1SHerbert Xue      deprecated="not deprecated">
2004*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
2005*dc5640d1SHerbert Xue      <doc>
2006*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Throwable)]]>
2007*dc5640d1SHerbert Xue      </doc>
2008*dc5640d1SHerbert Xue    </method>
2009*dc5640d1SHerbert Xue    <method name="addError"
2010*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2011*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2012*dc5640d1SHerbert Xue      deprecated="not deprecated">
2013*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
2014*dc5640d1SHerbert Xue      <doc>
2015*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Message)]]>
2016*dc5640d1SHerbert Xue      </doc>
2017*dc5640d1SHerbert Xue    </method>
2018*dc5640d1SHerbert Xue    <method name="requestInjection"
2019*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2020*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2021*dc5640d1SHerbert Xue      deprecated="not deprecated">
2022*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
2023*dc5640d1SHerbert Xue      <doc>
2024*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestInjection(Object)]]>
2025*dc5640d1SHerbert Xue      </doc>
2026*dc5640d1SHerbert Xue    </method>
2027*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
2028*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2029*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2030*dc5640d1SHerbert Xue      deprecated="not deprecated">
2031*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
2032*dc5640d1SHerbert Xue      <doc>
2033*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2034*dc5640d1SHerbert Xue      </doc>
2035*dc5640d1SHerbert Xue    </method>
2036*dc5640d1SHerbert Xue    <method name="bindInterceptor"
2037*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2038*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2039*dc5640d1SHerbert Xue      deprecated="not deprecated">
2040*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2041*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2042*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2043*dc5640d1SHerbert Xue      <doc>
2044*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2045*dc5640d1SHerbert Xue      </doc>
2046*dc5640d1SHerbert Xue    </method>
2047*dc5640d1SHerbert Xue    <method name="requireBinding"
2048*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2049*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2050*dc5640d1SHerbert Xue      deprecated="not deprecated">
2051*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2052*dc5640d1SHerbert Xue      <doc>
2053*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2054*dc5640d1SHerbert Xue      </doc>
2055*dc5640d1SHerbert Xue    </method>
2056*dc5640d1SHerbert Xue    <method name="requireBinding"
2057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2058*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2059*dc5640d1SHerbert Xue      deprecated="not deprecated">
2060*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2061*dc5640d1SHerbert Xue      <doc>
2062*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2063*dc5640d1SHerbert Xue      </doc>
2064*dc5640d1SHerbert Xue    </method>
2065*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2066*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2067*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2068*dc5640d1SHerbert Xue      deprecated="not deprecated">
2069*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2070*dc5640d1SHerbert Xue      <doc>
2071*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Key)]]>
2072*dc5640d1SHerbert Xue      </doc>
2073*dc5640d1SHerbert Xue    </method>
2074*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2075*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2076*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2077*dc5640d1SHerbert Xue      deprecated="not deprecated">
2078*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2079*dc5640d1SHerbert Xue      <doc>
2080*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Class)]]>
2081*dc5640d1SHerbert Xue      </doc>
2082*dc5640d1SHerbert Xue    </method>
2083*dc5640d1SHerbert Xue    <method name="convertToTypes"
2084*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2085*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2086*dc5640d1SHerbert Xue      deprecated="not deprecated">
2087*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2088*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2089*dc5640d1SHerbert Xue      <doc>
2090*dc5640d1SHerbert Xue      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2091*dc5640d1SHerbert Xue      </doc>
2092*dc5640d1SHerbert Xue    </method>
2093*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
2094*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2095*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2096*dc5640d1SHerbert Xue      deprecated="not deprecated">
2097*dc5640d1SHerbert Xue      <doc>
2098*dc5640d1SHerbert Xue      <![CDATA[@see Binder#currentStage()]]>
2099*dc5640d1SHerbert Xue      </doc>
2100*dc5640d1SHerbert Xue    </method>
2101*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2102*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2103*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2104*dc5640d1SHerbert Xue      deprecated="not deprecated">
2105*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2106*dc5640d1SHerbert Xue      <doc>
2107*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2108*dc5640d1SHerbert Xue      </doc>
2109*dc5640d1SHerbert Xue    </method>
2110*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2111*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2112*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2113*dc5640d1SHerbert Xue      deprecated="not deprecated">
2114*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2115*dc5640d1SHerbert Xue      <doc>
2116*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2117*dc5640d1SHerbert Xue      </doc>
2118*dc5640d1SHerbert Xue    </method>
2119*dc5640d1SHerbert Xue    <method name="bindListener"
2120*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2121*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2122*dc5640d1SHerbert Xue      deprecated="not deprecated">
2123*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2124*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2125*dc5640d1SHerbert Xue      <doc>
2126*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2127*dc5640d1SHerbert Xue      </doc>
2128*dc5640d1SHerbert Xue    </method>
2129*dc5640d1SHerbert Xue    <doc>
2130*dc5640d1SHerbert Xue    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2131*dc5640d1SHerbert Xue that are explicitly exposed will be available to other modules and to the users of the injector.
2132*dc5640d1SHerbert Xue This module may expose the bindings it creates and the bindings of the modules it installs.
2133*dc5640d1SHerbert Xue
2134*dc5640d1SHerbert Xue <p>A private module can be nested within a regular module or within another private module using
2135*dc5640d1SHerbert Xue {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2136*dc5640d1SHerbert Xue type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2137*dc5640d1SHerbert Xue nest multiple private modules, the result is a tree of environments where the injector's
2138*dc5640d1SHerbert Xue environment is the root.
2139*dc5640d1SHerbert Xue
2140*dc5640d1SHerbert Xue <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2141*dc5640d1SHerbert Xue com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2142*dc5640d1SHerbert Xue Exposed} annotation:
2143*dc5640d1SHerbert Xue
2144*dc5640d1SHerbert Xue <pre>
2145*dc5640d1SHerbert Xue public class FooBarBazModule extends PrivateModule {
2146*dc5640d1SHerbert Xue   protected void configure() {
2147*dc5640d1SHerbert Xue     bind(Foo.class).to(RealFoo.class);
2148*dc5640d1SHerbert Xue     expose(Foo.class);
2149*dc5640d1SHerbert Xue
2150*dc5640d1SHerbert Xue     install(new TransactionalBarModule());
2151*dc5640d1SHerbert Xue     expose(Bar.class).annotatedWith(Transactional.class);
2152*dc5640d1SHerbert Xue
2153*dc5640d1SHerbert Xue     bind(SomeImplementationDetail.class);
2154*dc5640d1SHerbert Xue     install(new MoreImplementationDetailsModule());
2155*dc5640d1SHerbert Xue   }
2156*dc5640d1SHerbert Xue
2157*dc5640d1SHerbert Xue   {@literal @}Provides {@literal @}Exposed
2158*dc5640d1SHerbert Xue   public Baz provideBaz() {
2159*dc5640d1SHerbert Xue     return new SuperBaz();
2160*dc5640d1SHerbert Xue   }
2161*dc5640d1SHerbert Xue }
2162*dc5640d1SHerbert Xue </pre>
2163*dc5640d1SHerbert Xue
2164*dc5640d1SHerbert Xue <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2165*dc5640d1SHerbert Xue injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2166*dc5640d1SHerbert Xue root environment. Such bindings are shared among all environments in the tree.
2167*dc5640d1SHerbert Xue
2168*dc5640d1SHerbert Xue <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2169*dc5640d1SHerbert Xue module will be unique to its environment. But a binding for the same type in a different private
2170*dc5640d1SHerbert Xue module will yield a different instance.
2171*dc5640d1SHerbert Xue
2172*dc5640d1SHerbert Xue <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2173*dc5640d1SHerbert Xue access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2174*dc5640d1SHerbert Xue gets access to all bindings in the child environment.
2175*dc5640d1SHerbert Xue
2176*dc5640d1SHerbert Xue <p>To promote a just-in-time binding to an explicit binding, bind it:
2177*dc5640d1SHerbert Xue <pre>
2178*dc5640d1SHerbert Xue   bind(FooImpl.class);
2179*dc5640d1SHerbert Xue </pre>
2180*dc5640d1SHerbert Xue
2181*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2182*dc5640d1SHerbert Xue @since 2.0]]>
2183*dc5640d1SHerbert Xue    </doc>
2184*dc5640d1SHerbert Xue  </class>
2185*dc5640d1SHerbert Xue  <!-- end class com.google.inject.PrivateModule -->
2186*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvidedBy -->
2187*dc5640d1SHerbert Xue  <class name="ProvidedBy"    abstract="true"
2188*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2189*dc5640d1SHerbert Xue    deprecated="not deprecated">
2190*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2191*dc5640d1SHerbert Xue    <doc>
2192*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default provider type for a type.
2193*dc5640d1SHerbert Xue
2194*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2195*dc5640d1SHerbert Xue    </doc>
2196*dc5640d1SHerbert Xue  </class>
2197*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvidedBy -->
2198*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Provider -->
2199*dc5640d1SHerbert Xue  <interface name="Provider"    abstract="true"
2200*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2201*dc5640d1SHerbert Xue    deprecated="not deprecated">
2202*dc5640d1SHerbert Xue    <implements name="javax.inject.Provider&lt;T&gt;"/>
2203*dc5640d1SHerbert Xue    <method name="get" return="T"
2204*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2205*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2206*dc5640d1SHerbert Xue      deprecated="not deprecated">
2207*dc5640d1SHerbert Xue      <doc>
2208*dc5640d1SHerbert Xue      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2209*dc5640d1SHerbert Xue
2210*dc5640d1SHerbert Xue @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2211*dc5640d1SHerbert Xue     in question is not currently active
2212*dc5640d1SHerbert Xue @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2213*dc5640d1SHerbert Xue     and throwables to describe why provision failed.]]>
2214*dc5640d1SHerbert Xue      </doc>
2215*dc5640d1SHerbert Xue    </method>
2216*dc5640d1SHerbert Xue    <doc>
2217*dc5640d1SHerbert Xue    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2218*dc5640d1SHerbert Xue by Guice:
2219*dc5640d1SHerbert Xue
2220*dc5640d1SHerbert Xue <ul>
2221*dc5640d1SHerbert Xue <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2222*dc5640d1SHerbert Xue is insufficient for a particular binding, the module can specify a custom {@code Provider}
2223*dc5640d1SHerbert Xue instead, to control exactly how Guice creates or obtains instances for the binding.
2224*dc5640d1SHerbert Xue
2225*dc5640d1SHerbert Xue <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2226*dc5640d1SHerbert Xue rather than having a {@code T} injected directly.  This may give you access to multiple
2227*dc5640d1SHerbert Xue instances, instances you wish to safely mutate and discard, instances which are out of scope
2228*dc5640d1SHerbert Xue (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2229*dc5640d1SHerbert Xue instances that will be initialized lazily.
2230*dc5640d1SHerbert Xue
2231*dc5640d1SHerbert Xue <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2232*dc5640d1SHerbert Xue when to delegate to the backing provider and when to provide the instance some other way.
2233*dc5640d1SHerbert Xue
2234*dc5640d1SHerbert Xue <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2235*dc5640d1SHerbert Xue for a given key, via the {@link Injector#getProvider} methods.
2236*dc5640d1SHerbert Xue </ul>
2237*dc5640d1SHerbert Xue
2238*dc5640d1SHerbert Xue @param <T> the type of object this provides
2239*dc5640d1SHerbert Xue
2240*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2241*dc5640d1SHerbert Xue    </doc>
2242*dc5640d1SHerbert Xue  </interface>
2243*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Provider -->
2244*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Provides -->
2245*dc5640d1SHerbert Xue  <class name="Provides"    abstract="true"
2246*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2247*dc5640d1SHerbert Xue    deprecated="not deprecated">
2248*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2249*dc5640d1SHerbert Xue    <doc>
2250*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2251*dc5640d1SHerbert Xue type is bound to it's returned value. Guice will pass dependencies to the method as parameters.
2252*dc5640d1SHerbert Xue
2253*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2254*dc5640d1SHerbert Xue @since 2.0]]>
2255*dc5640d1SHerbert Xue    </doc>
2256*dc5640d1SHerbert Xue  </class>
2257*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Provides -->
2258*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvisionException -->
2259*dc5640d1SHerbert Xue  <class name="ProvisionException" extends="java.lang.RuntimeException"
2260*dc5640d1SHerbert Xue    abstract="false"
2261*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2262*dc5640d1SHerbert Xue    deprecated="not deprecated">
2263*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2264*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2265*dc5640d1SHerbert Xue      deprecated="not deprecated">
2266*dc5640d1SHerbert Xue      <doc>
2267*dc5640d1SHerbert Xue      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2268*dc5640d1SHerbert Xue      </doc>
2269*dc5640d1SHerbert Xue    </constructor>
2270*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2271*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2272*dc5640d1SHerbert Xue      deprecated="not deprecated">
2273*dc5640d1SHerbert Xue    </constructor>
2274*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String"
2275*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2276*dc5640d1SHerbert Xue      deprecated="not deprecated">
2277*dc5640d1SHerbert Xue    </constructor>
2278*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2279*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2280*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2281*dc5640d1SHerbert Xue      deprecated="not deprecated">
2282*dc5640d1SHerbert Xue      <doc>
2283*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
2284*dc5640d1SHerbert Xue      </doc>
2285*dc5640d1SHerbert Xue    </method>
2286*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
2287*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2288*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2289*dc5640d1SHerbert Xue      deprecated="not deprecated">
2290*dc5640d1SHerbert Xue    </method>
2291*dc5640d1SHerbert Xue    <doc>
2292*dc5640d1SHerbert Xue    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2293*dc5640d1SHerbert Xue
2294*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
2295*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2296*dc5640d1SHerbert Xue @since 2.0]]>
2297*dc5640d1SHerbert Xue    </doc>
2298*dc5640d1SHerbert Xue  </class>
2299*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvisionException -->
2300*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Scope -->
2301*dc5640d1SHerbert Xue  <interface name="Scope"    abstract="true"
2302*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2303*dc5640d1SHerbert Xue    deprecated="not deprecated">
2304*dc5640d1SHerbert Xue    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2305*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2306*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2307*dc5640d1SHerbert Xue      deprecated="not deprecated">
2308*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2309*dc5640d1SHerbert Xue      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2310*dc5640d1SHerbert Xue      <doc>
2311*dc5640d1SHerbert Xue      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2312*dc5640d1SHerbert Xue If an object does not exist in this scope, the provider can use the given
2313*dc5640d1SHerbert Xue unscoped provider to retrieve one.
2314*dc5640d1SHerbert Xue
2315*dc5640d1SHerbert Xue <p>Scope implementations are strongly encouraged to override
2316*dc5640d1SHerbert Xue {@link Object#toString} in the returned provider and include the backing
2317*dc5640d1SHerbert Xue provider's {@code toString()} output.
2318*dc5640d1SHerbert Xue
2319*dc5640d1SHerbert Xue @param key binding key
2320*dc5640d1SHerbert Xue @param unscoped locates an instance when one doesn't already exist in this
2321*dc5640d1SHerbert Xue  scope.
2322*dc5640d1SHerbert Xue @return a new provider which only delegates to the given unscoped provider
2323*dc5640d1SHerbert Xue  when an instance of the requested object doesn't already exist in this
2324*dc5640d1SHerbert Xue  scope]]>
2325*dc5640d1SHerbert Xue      </doc>
2326*dc5640d1SHerbert Xue    </method>
2327*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2328*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2329*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2330*dc5640d1SHerbert Xue      deprecated="not deprecated">
2331*dc5640d1SHerbert Xue      <doc>
2332*dc5640d1SHerbert Xue      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2333*dc5640d1SHerbert Xue scopes that ship with guice use the descriptions
2334*dc5640d1SHerbert Xue {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2335*dc5640d1SHerbert Xue {@code "ServletScopes.REQUEST"}.]]>
2336*dc5640d1SHerbert Xue      </doc>
2337*dc5640d1SHerbert Xue    </method>
2338*dc5640d1SHerbert Xue    <doc>
2339*dc5640d1SHerbert Xue    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2340*dc5640d1SHerbert Xue By default, an instance created by the {@link Injector} has <i>no scope</i>,
2341*dc5640d1SHerbert Xue meaning it has no state from the framework's perspective -- the
2342*dc5640d1SHerbert Xue {@code Injector} creates it, injects it once into the class that required it,
2343*dc5640d1SHerbert Xue and then immediately forgets it. Associating a scope with a particular
2344*dc5640d1SHerbert Xue binding allows the created instance to be "remembered" and possibly used
2345*dc5640d1SHerbert Xue again for other injections.
2346*dc5640d1SHerbert Xue
2347*dc5640d1SHerbert Xue <p>An example of a scope is {@link Scopes#SINGLETON}.
2348*dc5640d1SHerbert Xue
2349*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2350*dc5640d1SHerbert Xue    </doc>
2351*dc5640d1SHerbert Xue  </interface>
2352*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Scope -->
2353*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ScopeAnnotation -->
2354*dc5640d1SHerbert Xue  <class name="ScopeAnnotation"    abstract="true"
2355*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2356*dc5640d1SHerbert Xue    deprecated="not deprecated">
2357*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2358*dc5640d1SHerbert Xue    <doc>
2359*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2360*dc5640d1SHerbert Xue may apply to a single implementation class. You must also annotate scope
2361*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
2362*dc5640d1SHerbert Xue
2363*dc5640d1SHerbert Xue <pre>
2364*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
2365*dc5640d1SHerbert Xue   {@code @}Target(TYPE, METHOD)
2366*dc5640d1SHerbert Xue   {@code @}ScopeAnnotation
2367*dc5640d1SHerbert Xue   public {@code @}interface SessionScoped {}
2368*dc5640d1SHerbert Xue </pre>
2369*dc5640d1SHerbert Xue
2370*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2371*dc5640d1SHerbert Xue    </doc>
2372*dc5640d1SHerbert Xue  </class>
2373*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ScopeAnnotation -->
2374*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Scopes -->
2375*dc5640d1SHerbert Xue  <class name="Scopes" extends="java.lang.Object"
2376*dc5640d1SHerbert Xue    abstract="false"
2377*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2378*dc5640d1SHerbert Xue    deprecated="not deprecated">
2379*dc5640d1SHerbert Xue    <method name="isSingleton" return="boolean"
2380*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2381*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2382*dc5640d1SHerbert Xue      deprecated="not deprecated">
2383*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2384*dc5640d1SHerbert Xue      <doc>
2385*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2386*dc5640d1SHerbert Xue com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2387*dc5640d1SHerbert Xue was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2388*dc5640d1SHerbert Xue also true if the target binding is singleton-scoped.
2389*dc5640d1SHerbert Xue
2390*dc5640d1SHerbert Xue @since 3.0]]>
2391*dc5640d1SHerbert Xue      </doc>
2392*dc5640d1SHerbert Xue    </method>
2393*dc5640d1SHerbert Xue    <field name="SINGLETON" type="com.google.inject.Scope"
2394*dc5640d1SHerbert Xue      transient="false" volatile="false"
2395*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2396*dc5640d1SHerbert Xue      deprecated="not deprecated">
2397*dc5640d1SHerbert Xue      <doc>
2398*dc5640d1SHerbert Xue      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2399*dc5640d1SHerbert Xue      </doc>
2400*dc5640d1SHerbert Xue    </field>
2401*dc5640d1SHerbert Xue    <field name="NO_SCOPE" type="com.google.inject.Scope"
2402*dc5640d1SHerbert Xue      transient="false" volatile="false"
2403*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2404*dc5640d1SHerbert Xue      deprecated="not deprecated">
2405*dc5640d1SHerbert Xue      <doc>
2406*dc5640d1SHerbert Xue      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2407*dc5640d1SHerbert Xue Injector obtains an instance of an object with "no scope", it injects this
2408*dc5640d1SHerbert Xue instance then immediately forgets it.  When the next request for the same
2409*dc5640d1SHerbert Xue binding arrives it will need to obtain the instance over again.
2410*dc5640d1SHerbert Xue
2411*dc5640d1SHerbert Xue <p>This exists only in case a class has been annotated with a scope
2412*dc5640d1SHerbert Xue annotation such as {@link Singleton @Singleton}, and you need to override
2413*dc5640d1SHerbert Xue this to "no scope" in your binding.
2414*dc5640d1SHerbert Xue
2415*dc5640d1SHerbert Xue @since 2.0]]>
2416*dc5640d1SHerbert Xue      </doc>
2417*dc5640d1SHerbert Xue    </field>
2418*dc5640d1SHerbert Xue    <doc>
2419*dc5640d1SHerbert Xue    <![CDATA[Built-in scope implementations.
2420*dc5640d1SHerbert Xue
2421*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2422*dc5640d1SHerbert Xue    </doc>
2423*dc5640d1SHerbert Xue  </class>
2424*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Scopes -->
2425*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Singleton -->
2426*dc5640d1SHerbert Xue  <class name="Singleton"    abstract="true"
2427*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2428*dc5640d1SHerbert Xue    deprecated="not deprecated">
2429*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2430*dc5640d1SHerbert Xue    <doc>
2431*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want only one instance
2432*dc5640d1SHerbert Xue (per {@link Injector}) to be reused for all injections for that binding.
2433*dc5640d1SHerbert Xue
2434*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2435*dc5640d1SHerbert Xue    </doc>
2436*dc5640d1SHerbert Xue  </class>
2437*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Singleton -->
2438*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Stage -->
2439*dc5640d1SHerbert Xue  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2440*dc5640d1SHerbert Xue    abstract="false"
2441*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2442*dc5640d1SHerbert Xue    deprecated="not deprecated">
2443*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.Stage[]"
2444*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2445*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2446*dc5640d1SHerbert Xue      deprecated="not deprecated">
2447*dc5640d1SHerbert Xue    </method>
2448*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.Stage"
2449*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2450*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2451*dc5640d1SHerbert Xue      deprecated="not deprecated">
2452*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
2453*dc5640d1SHerbert Xue    </method>
2454*dc5640d1SHerbert Xue    <doc>
2455*dc5640d1SHerbert Xue    <![CDATA[The stage we're running in.
2456*dc5640d1SHerbert Xue
2457*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2458*dc5640d1SHerbert Xue    </doc>
2459*dc5640d1SHerbert Xue  </class>
2460*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Stage -->
2461*dc5640d1SHerbert Xue  <!-- start class com.google.inject.TypeLiteral -->
2462*dc5640d1SHerbert Xue  <class name="TypeLiteral" extends="java.lang.Object"
2463*dc5640d1SHerbert Xue    abstract="false"
2464*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2465*dc5640d1SHerbert Xue    deprecated="not deprecated">
2466*dc5640d1SHerbert Xue    <constructor name="TypeLiteral"
2467*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2468*dc5640d1SHerbert Xue      deprecated="not deprecated">
2469*dc5640d1SHerbert Xue      <doc>
2470*dc5640d1SHerbert Xue      <![CDATA[Constructs a new type literal. Derives represented class from type
2471*dc5640d1SHerbert Xue parameter.
2472*dc5640d1SHerbert Xue
2473*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
2474*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
2475*dc5640d1SHerbert Xue at runtime despite erasure.]]>
2476*dc5640d1SHerbert Xue      </doc>
2477*dc5640d1SHerbert Xue    </constructor>
2478*dc5640d1SHerbert Xue    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2479*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2480*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2481*dc5640d1SHerbert Xue      deprecated="not deprecated">
2482*dc5640d1SHerbert Xue      <doc>
2483*dc5640d1SHerbert Xue      <![CDATA[Returns the raw (non-generic) type for this type.
2484*dc5640d1SHerbert Xue
2485*dc5640d1SHerbert Xue @since 2.0]]>
2486*dc5640d1SHerbert Xue      </doc>
2487*dc5640d1SHerbert Xue    </method>
2488*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.reflect.Type"
2489*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2490*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2491*dc5640d1SHerbert Xue      deprecated="not deprecated">
2492*dc5640d1SHerbert Xue      <doc>
2493*dc5640d1SHerbert Xue      <![CDATA[Gets underlying {@code Type} instance.]]>
2494*dc5640d1SHerbert Xue      </doc>
2495*dc5640d1SHerbert Xue    </method>
2496*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
2497*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2498*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2499*dc5640d1SHerbert Xue      deprecated="not deprecated">
2500*dc5640d1SHerbert Xue    </method>
2501*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
2502*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2503*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2504*dc5640d1SHerbert Xue      deprecated="not deprecated">
2505*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
2506*dc5640d1SHerbert Xue    </method>
2507*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2508*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2509*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2510*dc5640d1SHerbert Xue      deprecated="not deprecated">
2511*dc5640d1SHerbert Xue    </method>
2512*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2513*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2514*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2515*dc5640d1SHerbert Xue      deprecated="not deprecated">
2516*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
2517*dc5640d1SHerbert Xue      <doc>
2518*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2519*dc5640d1SHerbert Xue      </doc>
2520*dc5640d1SHerbert Xue    </method>
2521*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2522*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2523*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2524*dc5640d1SHerbert Xue      deprecated="not deprecated">
2525*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2526*dc5640d1SHerbert Xue      <doc>
2527*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2528*dc5640d1SHerbert Xue      </doc>
2529*dc5640d1SHerbert Xue    </method>
2530*dc5640d1SHerbert Xue    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2531*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2532*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2533*dc5640d1SHerbert Xue      deprecated="not deprecated">
2534*dc5640d1SHerbert Xue      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2535*dc5640d1SHerbert Xue      <doc>
2536*dc5640d1SHerbert Xue      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2537*dc5640d1SHerbert Xue ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2538*dc5640d1SHerbert Xue Iterable.class}.
2539*dc5640d1SHerbert Xue
2540*dc5640d1SHerbert Xue @param supertype a superclass of, or interface implemented by, this.
2541*dc5640d1SHerbert Xue @since 2.0]]>
2542*dc5640d1SHerbert Xue      </doc>
2543*dc5640d1SHerbert Xue    </method>
2544*dc5640d1SHerbert Xue    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2545*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2546*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2547*dc5640d1SHerbert Xue      deprecated="not deprecated">
2548*dc5640d1SHerbert Xue      <param name="field" type="java.lang.reflect.Field"/>
2549*dc5640d1SHerbert Xue      <doc>
2550*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic type of {@code field}.
2551*dc5640d1SHerbert Xue
2552*dc5640d1SHerbert Xue @param field a field defined by this or any superclass.
2553*dc5640d1SHerbert Xue @since 2.0]]>
2554*dc5640d1SHerbert Xue      </doc>
2555*dc5640d1SHerbert Xue    </method>
2556*dc5640d1SHerbert Xue    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2557*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2558*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2559*dc5640d1SHerbert Xue      deprecated="not deprecated">
2560*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2561*dc5640d1SHerbert Xue      <doc>
2562*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2563*dc5640d1SHerbert Xue
2564*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2565*dc5640d1SHerbert Xue @since 2.0]]>
2566*dc5640d1SHerbert Xue      </doc>
2567*dc5640d1SHerbert Xue    </method>
2568*dc5640d1SHerbert Xue    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2569*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2570*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2571*dc5640d1SHerbert Xue      deprecated="not deprecated">
2572*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2573*dc5640d1SHerbert Xue      <doc>
2574*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2575*dc5640d1SHerbert Xue
2576*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2577*dc5640d1SHerbert Xue @since 2.0]]>
2578*dc5640d1SHerbert Xue      </doc>
2579*dc5640d1SHerbert Xue    </method>
2580*dc5640d1SHerbert Xue    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2581*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2582*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2583*dc5640d1SHerbert Xue      deprecated="not deprecated">
2584*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
2585*dc5640d1SHerbert Xue      <doc>
2586*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic return type of {@code method}.
2587*dc5640d1SHerbert Xue
2588*dc5640d1SHerbert Xue @param method a method defined by this or any supertype.
2589*dc5640d1SHerbert Xue @since 2.0]]>
2590*dc5640d1SHerbert Xue      </doc>
2591*dc5640d1SHerbert Xue    </method>
2592*dc5640d1SHerbert Xue    <doc>
2593*dc5640d1SHerbert Xue    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2594*dc5640d1SHerbert Xue represent generic types, so this class does. Forces clients to create a
2595*dc5640d1SHerbert Xue subclass of this class which enables retrieval the type information even at
2596*dc5640d1SHerbert Xue runtime.
2597*dc5640d1SHerbert Xue
2598*dc5640d1SHerbert Xue <p>For example, to create a type literal for {@code List<String>}, you can
2599*dc5640d1SHerbert Xue create an empty anonymous inner class:
2600*dc5640d1SHerbert Xue
2601*dc5640d1SHerbert Xue <p>
2602*dc5640d1SHerbert Xue {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2603*dc5640d1SHerbert Xue
2604*dc5640d1SHerbert Xue <p>Along with modeling generic types, this class can resolve type parameters.
2605*dc5640d1SHerbert Xue For example, to figure out what type {@code keySet()} returns on a {@code
2606*dc5640d1SHerbert Xue Map<Integer, String>}, use this code:<pre>   {@code
2607*dc5640d1SHerbert Xue
2608*dc5640d1SHerbert Xue   TypeLiteral<Map<Integer, String>> mapType
2609*dc5640d1SHerbert Xue       = new TypeLiteral<Map<Integer, String>>() {};
2610*dc5640d1SHerbert Xue   TypeLiteral<?> keySetType
2611*dc5640d1SHerbert Xue       = mapType.getReturnType(Map.class.getMethod("keySet"));
2612*dc5640d1SHerbert Xue   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2613*dc5640d1SHerbert Xue
2614*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2615*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2616*dc5640d1SHerbert Xue    </doc>
2617*dc5640d1SHerbert Xue  </class>
2618*dc5640d1SHerbert Xue  <!-- end class com.google.inject.TypeLiteral -->
2619*dc5640d1SHerbert Xue</package>
2620*dc5640d1SHerbert Xue<package name="com.google.inject.assistedinject">
2621*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.Assisted -->
2622*dc5640d1SHerbert Xue  <class name="Assisted"    abstract="true"
2623*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2624*dc5640d1SHerbert Xue    deprecated="not deprecated">
2625*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2626*dc5640d1SHerbert Xue    <doc>
2627*dc5640d1SHerbert Xue    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2628*dc5640d1SHerbert Xue
2629*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2630*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2631*dc5640d1SHerbert Xue    </doc>
2632*dc5640d1SHerbert Xue  </class>
2633*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.Assisted -->
2634*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2635*dc5640d1SHerbert Xue  <class name="AssistedInject"    abstract="true"
2636*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2637*dc5640d1SHerbert Xue    deprecated="not deprecated">
2638*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2639*dc5640d1SHerbert Xue    <doc>
2640*dc5640d1SHerbert Xue    <![CDATA[<p>
2641*dc5640d1SHerbert Xue When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2642*dc5640d1SHerbert Xue {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2643*dc5640d1SHerbert Xue parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2644*dc5640d1SHerbert Xue annotations. The assisted parameters must exactly match one corresponding factory method within
2645*dc5640d1SHerbert Xue the factory interface, but the parameters do not need to be in the same order. Constructors
2646*dc5640d1SHerbert Xue annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2647*dc5640d1SHerbert Xue (such as AOP).
2648*dc5640d1SHerbert Xue
2649*dc5640d1SHerbert Xue <p>
2650*dc5640d1SHerbert Xue <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2651*dc5640d1SHerbert Xue annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2652*dc5640d1SHerbert Xue parameters must exactly match one corresponding factory method within the factory interface and
2653*dc5640d1SHerbert Xue all must be in the same order as listed in the factory. In this backwards compatable mode,
2654*dc5640d1SHerbert Xue constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2655*dc5640d1SHerbert Xue none of the benefits.
2656*dc5640d1SHerbert Xue
2657*dc5640d1SHerbert Xue <p>
2658*dc5640d1SHerbert Xue Constructor parameters must be either supplied by the factory interface and marked with
2659*dc5640d1SHerbert Xue <code>@Assisted</code>, or they must be injectable.
2660*dc5640d1SHerbert Xue
2661*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2662*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2663*dc5640d1SHerbert Xue    </doc>
2664*dc5640d1SHerbert Xue  </class>
2665*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2666*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2667*dc5640d1SHerbert Xue  <interface name="AssistedInjectBinding"    abstract="true"
2668*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2669*dc5640d1SHerbert Xue    deprecated="not deprecated">
2670*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2671*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2672*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2673*dc5640d1SHerbert Xue      deprecated="not deprecated">
2674*dc5640d1SHerbert Xue      <doc>
2675*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2676*dc5640d1SHerbert Xue      </doc>
2677*dc5640d1SHerbert Xue    </method>
2678*dc5640d1SHerbert Xue    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2679*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2680*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2681*dc5640d1SHerbert Xue      deprecated="not deprecated">
2682*dc5640d1SHerbert Xue      <doc>
2683*dc5640d1SHerbert Xue      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2684*dc5640d1SHerbert Xue      </doc>
2685*dc5640d1SHerbert Xue    </method>
2686*dc5640d1SHerbert Xue    <doc>
2687*dc5640d1SHerbert Xue    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2688*dc5640d1SHerbert Xue
2689*dc5640d1SHerbert Xue @param <T> The fully qualified type of the factory.
2690*dc5640d1SHerbert Xue
2691*dc5640d1SHerbert Xue @since 3.0
2692*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2693*dc5640d1SHerbert Xue    </doc>
2694*dc5640d1SHerbert Xue  </interface>
2695*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2696*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2697*dc5640d1SHerbert Xue  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2698*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2699*dc5640d1SHerbert Xue    deprecated="not deprecated">
2700*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2701*dc5640d1SHerbert Xue    <method name="visit" return="V"
2702*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2703*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2704*dc5640d1SHerbert Xue      deprecated="not deprecated">
2705*dc5640d1SHerbert Xue      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2706*dc5640d1SHerbert Xue      <doc>
2707*dc5640d1SHerbert Xue      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2708*dc5640d1SHerbert Xue      </doc>
2709*dc5640d1SHerbert Xue    </method>
2710*dc5640d1SHerbert Xue    <doc>
2711*dc5640d1SHerbert Xue    <![CDATA[A visitor for the AssistedInject extension.
2712*dc5640d1SHerbert Xue <p>
2713*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2714*dc5640d1SHerbert Xue {@link FactoryModuleBuilder} will be visited through this interface.
2715*dc5640d1SHerbert Xue
2716*dc5640d1SHerbert Xue @since 3.0
2717*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2718*dc5640d1SHerbert Xue    </doc>
2719*dc5640d1SHerbert Xue  </interface>
2720*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2721*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2722*dc5640d1SHerbert Xue  <interface name="AssistedMethod"    abstract="true"
2723*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2724*dc5640d1SHerbert Xue    deprecated="not deprecated">
2725*dc5640d1SHerbert Xue    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2726*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2727*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2728*dc5640d1SHerbert Xue      deprecated="not deprecated">
2729*dc5640d1SHerbert Xue      <doc>
2730*dc5640d1SHerbert Xue      <![CDATA[Returns the factory method that is being assisted.]]>
2731*dc5640d1SHerbert Xue      </doc>
2732*dc5640d1SHerbert Xue    </method>
2733*dc5640d1SHerbert Xue    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2734*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2735*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2736*dc5640d1SHerbert Xue      deprecated="not deprecated">
2737*dc5640d1SHerbert Xue      <doc>
2738*dc5640d1SHerbert Xue      <![CDATA[Returns the implementation type that will be created when the method is
2739*dc5640d1SHerbert Xue used.]]>
2740*dc5640d1SHerbert Xue      </doc>
2741*dc5640d1SHerbert Xue    </method>
2742*dc5640d1SHerbert Xue    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2743*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2744*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2745*dc5640d1SHerbert Xue      deprecated="not deprecated">
2746*dc5640d1SHerbert Xue      <doc>
2747*dc5640d1SHerbert Xue      <![CDATA[Returns the constructor that will be used to construct instances of the
2748*dc5640d1SHerbert Xue implementation.]]>
2749*dc5640d1SHerbert Xue      </doc>
2750*dc5640d1SHerbert Xue    </method>
2751*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2752*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2753*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2754*dc5640d1SHerbert Xue      deprecated="not deprecated">
2755*dc5640d1SHerbert Xue      <doc>
2756*dc5640d1SHerbert Xue      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2757*dc5640d1SHerbert Xue the implementation.]]>
2758*dc5640d1SHerbert Xue      </doc>
2759*dc5640d1SHerbert Xue    </method>
2760*dc5640d1SHerbert Xue    <doc>
2761*dc5640d1SHerbert Xue    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2762*dc5640d1SHerbert Xue
2763*dc5640d1SHerbert Xue @since 3.0
2764*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2765*dc5640d1SHerbert Xue    </doc>
2766*dc5640d1SHerbert Xue  </interface>
2767*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2768*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2769*dc5640d1SHerbert Xue  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2770*dc5640d1SHerbert Xue    abstract="false"
2771*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2772*dc5640d1SHerbert Xue    deprecated="not deprecated">
2773*dc5640d1SHerbert Xue    <constructor name="FactoryModuleBuilder"
2774*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2775*dc5640d1SHerbert Xue      deprecated="not deprecated">
2776*dc5640d1SHerbert Xue    </constructor>
2777*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2778*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2779*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2780*dc5640d1SHerbert Xue      deprecated="not deprecated">
2781*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2782*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2783*dc5640d1SHerbert Xue      <doc>
2784*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2785*dc5640d1SHerbert Xue      </doc>
2786*dc5640d1SHerbert Xue    </method>
2787*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2788*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2789*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2790*dc5640d1SHerbert Xue      deprecated="not deprecated">
2791*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2792*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2793*dc5640d1SHerbert Xue      <doc>
2794*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2795*dc5640d1SHerbert Xue      </doc>
2796*dc5640d1SHerbert Xue    </method>
2797*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2798*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2799*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2800*dc5640d1SHerbert Xue      deprecated="not deprecated">
2801*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2802*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2803*dc5640d1SHerbert Xue      <doc>
2804*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2805*dc5640d1SHerbert Xue      </doc>
2806*dc5640d1SHerbert Xue    </method>
2807*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2808*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2809*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2810*dc5640d1SHerbert Xue      deprecated="not deprecated">
2811*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2812*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2813*dc5640d1SHerbert Xue      <doc>
2814*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2815*dc5640d1SHerbert Xue      </doc>
2816*dc5640d1SHerbert Xue    </method>
2817*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2818*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2819*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2820*dc5640d1SHerbert Xue      deprecated="not deprecated">
2821*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2822*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2823*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2824*dc5640d1SHerbert Xue      <doc>
2825*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2826*dc5640d1SHerbert Xue      </doc>
2827*dc5640d1SHerbert Xue    </method>
2828*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2829*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2830*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2831*dc5640d1SHerbert Xue      deprecated="not deprecated">
2832*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2833*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2834*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2835*dc5640d1SHerbert Xue      <doc>
2836*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2837*dc5640d1SHerbert Xue      </doc>
2838*dc5640d1SHerbert Xue    </method>
2839*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2840*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2841*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2842*dc5640d1SHerbert Xue      deprecated="not deprecated">
2843*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2844*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2845*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2846*dc5640d1SHerbert Xue      <doc>
2847*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2848*dc5640d1SHerbert Xue      </doc>
2849*dc5640d1SHerbert Xue    </method>
2850*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2851*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2852*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2853*dc5640d1SHerbert Xue      deprecated="not deprecated">
2854*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2855*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2856*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2857*dc5640d1SHerbert Xue      <doc>
2858*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2859*dc5640d1SHerbert Xue      </doc>
2860*dc5640d1SHerbert Xue    </method>
2861*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2862*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2863*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2864*dc5640d1SHerbert Xue      deprecated="not deprecated">
2865*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2866*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2867*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2868*dc5640d1SHerbert Xue      <doc>
2869*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2870*dc5640d1SHerbert Xue      </doc>
2871*dc5640d1SHerbert Xue    </method>
2872*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2873*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2874*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2875*dc5640d1SHerbert Xue      deprecated="not deprecated">
2876*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2877*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2878*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2879*dc5640d1SHerbert Xue      <doc>
2880*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2881*dc5640d1SHerbert Xue      </doc>
2882*dc5640d1SHerbert Xue    </method>
2883*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2884*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2885*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2886*dc5640d1SHerbert Xue      deprecated="not deprecated">
2887*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2888*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2889*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2890*dc5640d1SHerbert Xue      <doc>
2891*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2892*dc5640d1SHerbert Xue      </doc>
2893*dc5640d1SHerbert Xue    </method>
2894*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2895*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2896*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2897*dc5640d1SHerbert Xue      deprecated="not deprecated">
2898*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2899*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2900*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2901*dc5640d1SHerbert Xue      <doc>
2902*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2903*dc5640d1SHerbert Xue      </doc>
2904*dc5640d1SHerbert Xue    </method>
2905*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2906*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2907*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2908*dc5640d1SHerbert Xue      deprecated="not deprecated">
2909*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
2910*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2911*dc5640d1SHerbert Xue      <doc>
2912*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2913*dc5640d1SHerbert Xue      </doc>
2914*dc5640d1SHerbert Xue    </method>
2915*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2916*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2917*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2918*dc5640d1SHerbert Xue      deprecated="not deprecated">
2919*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
2920*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2921*dc5640d1SHerbert Xue      <doc>
2922*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2923*dc5640d1SHerbert Xue      </doc>
2924*dc5640d1SHerbert Xue    </method>
2925*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
2926*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2927*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2928*dc5640d1SHerbert Xue      deprecated="not deprecated">
2929*dc5640d1SHerbert Xue      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
2930*dc5640d1SHerbert Xue      <doc>
2931*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2932*dc5640d1SHerbert Xue      </doc>
2933*dc5640d1SHerbert Xue    </method>
2934*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
2935*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2936*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2937*dc5640d1SHerbert Xue      deprecated="not deprecated">
2938*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
2939*dc5640d1SHerbert Xue      <doc>
2940*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2941*dc5640d1SHerbert Xue      </doc>
2942*dc5640d1SHerbert Xue    </method>
2943*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
2944*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2945*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2946*dc5640d1SHerbert Xue      deprecated="not deprecated">
2947*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
2948*dc5640d1SHerbert Xue    </method>
2949*dc5640d1SHerbert Xue    <doc>
2950*dc5640d1SHerbert Xue    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
2951*dc5640d1SHerbert Xue construct objects.
2952*dc5640d1SHerbert Xue
2953*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
2954*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
2955*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
2956*dc5640d1SHerbert Xue
2957*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
2958*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
2959*dc5640d1SHerbert Xue }</pre>
2960*dc5640d1SHerbert Xue
2961*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
2962*dc5640d1SHerbert Xue or <i>newPayment</i>.
2963*dc5640d1SHerbert Xue
2964*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
2965*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
2966*dc5640d1SHerbert Xue Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
2967*dc5640d1SHerbert Xue should have parameters that match each of the factory method's parameters. Each factory-supplied
2968*dc5640d1SHerbert Xue parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
2969*dc5640d1SHerbert Xue parameter is not bound by your application's modules.
2970*dc5640d1SHerbert Xue
2971*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
2972*dc5640d1SHerbert Xue   {@literal @}Inject
2973*dc5640d1SHerbert Xue   public RealPayment(
2974*dc5640d1SHerbert Xue      CreditService creditService,
2975*dc5640d1SHerbert Xue      AuthService authService,
2976*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
2977*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
2978*dc5640d1SHerbert Xue     ...
2979*dc5640d1SHerbert Xue   }
2980*dc5640d1SHerbert Xue }</pre>
2981*dc5640d1SHerbert Xue
2982*dc5640d1SHerbert Xue <h3>Multiple factory methods for the same type</h3>
2983*dc5640d1SHerbert Xue If the factory contains many methods that return the same type, you can create multiple
2984*dc5640d1SHerbert Xue constructors in your concrete class, each constructor marked with with
2985*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
2986*dc5640d1SHerbert Xue factory methods.
2987*dc5640d1SHerbert Xue
2988*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
2989*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
2990*dc5640d1SHerbert Xue    Payment createWithoutDate(Money amount);
2991*dc5640d1SHerbert Xue }
2992*dc5640d1SHerbert Xue
2993*dc5640d1SHerbert Xue public class RealPayment implements Payment {
2994*dc5640d1SHerbert Xue  {@literal @}AssistedInject
2995*dc5640d1SHerbert Xue   public RealPayment(
2996*dc5640d1SHerbert Xue      CreditService creditService,
2997*dc5640d1SHerbert Xue      AuthService authService,
2998*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Date startDate</strong>,
2999*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3000*dc5640d1SHerbert Xue     ...
3001*dc5640d1SHerbert Xue   }
3002*dc5640d1SHerbert Xue
3003*dc5640d1SHerbert Xue  {@literal @}AssistedInject
3004*dc5640d1SHerbert Xue   public RealPayment(
3005*dc5640d1SHerbert Xue      CreditService creditService,
3006*dc5640d1SHerbert Xue      AuthService authService,
3007*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3008*dc5640d1SHerbert Xue     ...
3009*dc5640d1SHerbert Xue   }
3010*dc5640d1SHerbert Xue }</pre>
3011*dc5640d1SHerbert Xue
3012*dc5640d1SHerbert Xue <h3>Configuring simple factories</h3>
3013*dc5640d1SHerbert Xue In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3014*dc5640d1SHerbert Xue factory:
3015*dc5640d1SHerbert Xue
3016*dc5640d1SHerbert Xue <pre>install(new FactoryModuleBuilder()
3017*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3018*dc5640d1SHerbert Xue     .build(PaymentFactory.class);</pre>
3019*dc5640d1SHerbert Xue
3020*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3021*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3022*dc5640d1SHerbert Xue
3023*dc5640d1SHerbert Xue <h3>Configuring complex factories</h3>
3024*dc5640d1SHerbert Xue Factories can create an arbitrary number of objects, one per each method.  Each factory
3025*dc5640d1SHerbert Xue method can be configured using <code>.implement</code>.
3026*dc5640d1SHerbert Xue
3027*dc5640d1SHerbert Xue <pre>public interface OrderFactory {
3028*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
3029*dc5640d1SHerbert Xue    Shipment create(Customer customer, Item item);
3030*dc5640d1SHerbert Xue    Receipt create(Payment payment, Shipment shipment);
3031*dc5640d1SHerbert Xue }
3032*dc5640d1SHerbert Xue
3033*dc5640d1SHerbert Xue [...]
3034*dc5640d1SHerbert Xue
3035*dc5640d1SHerbert Xue install(new FactoryModuleBuilder()
3036*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3037*dc5640d1SHerbert Xue     // excluding .implement for Shipment means the implementation class
3038*dc5640d1SHerbert Xue     // will be 'Shipment' itself, which is legal if it's not an interface.
3039*dc5640d1SHerbert Xue     .implement(Receipt.class, RealReceipt.class)
3040*dc5640d1SHerbert Xue     .build(OrderFactory.class);</pre>
3041*dc5640d1SHerbert Xue </pre>
3042*dc5640d1SHerbert Xue
3043*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3044*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3045*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3046*dc5640d1SHerbert Xue
3047*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3048*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3049*dc5640d1SHerbert Xue
3050*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3051*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3052*dc5640d1SHerbert Xue     payment.apply();
3053*dc5640d1SHerbert Xue   }
3054*dc5640d1SHerbert Xue }</pre>
3055*dc5640d1SHerbert Xue
3056*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3057*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3058*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3059*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3060*dc5640d1SHerbert Xue
3061*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3062*dc5640d1SHerbert Xue   Payment create(
3063*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3064*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3065*dc5640d1SHerbert Xue       Money amount);
3066*dc5640d1SHerbert Xue } </pre>
3067*dc5640d1SHerbert Xue
3068*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3069*dc5640d1SHerbert Xue
3070*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3071*dc5640d1SHerbert Xue   {@literal @}Inject
3072*dc5640d1SHerbert Xue   public RealPayment(
3073*dc5640d1SHerbert Xue      CreditService creditService,
3074*dc5640d1SHerbert Xue      AuthService authService,
3075*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3076*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3077*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3078*dc5640d1SHerbert Xue     ...
3079*dc5640d1SHerbert Xue   }
3080*dc5640d1SHerbert Xue }</pre>
3081*dc5640d1SHerbert Xue
3082*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3083*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3084*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3085*dc5640d1SHerbert Xue returned.
3086*dc5640d1SHerbert Xue
3087*dc5640d1SHerbert Xue <h3>More configuration options</h3>
3088*dc5640d1SHerbert Xue In addition to simply specifying an implementation class for any returned type, factories' return
3089*dc5640d1SHerbert Xue values can be automatic or can be configured to use annotations:
3090*dc5640d1SHerbert Xue <p/>
3091*dc5640d1SHerbert Xue If you just want to return the types specified in the factory, do not configure any
3092*dc5640d1SHerbert Xue implementations:
3093*dc5640d1SHerbert Xue
3094*dc5640d1SHerbert Xue <pre>public interface FruitFactory {
3095*dc5640d1SHerbert Xue   Apple getApple(Color color);
3096*dc5640d1SHerbert Xue }
3097*dc5640d1SHerbert Xue ...
3098*dc5640d1SHerbert Xue protected void configure() {
3099*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder().build(FruitFactory.class));
3100*dc5640d1SHerbert Xue }</pre>
3101*dc5640d1SHerbert Xue
3102*dc5640d1SHerbert Xue Note that any type returned by the factory in this manner needs to be an implementation class.
3103*dc5640d1SHerbert Xue <p/>
3104*dc5640d1SHerbert Xue To return two different implementations for the same interface from your factory, use binding
3105*dc5640d1SHerbert Xue annotations on your return types:
3106*dc5640d1SHerbert Xue
3107*dc5640d1SHerbert Xue <pre>interface CarFactory {
3108*dc5640d1SHerbert Xue   {@literal @}Named("fast") Car getFastCar(Color color);
3109*dc5640d1SHerbert Xue   {@literal @}Named("clean") Car getCleanCar(Color color);
3110*dc5640d1SHerbert Xue }
3111*dc5640d1SHerbert Xue ...
3112*dc5640d1SHerbert Xue protected void configure() {
3113*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder()
3114*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("fast"), Porsche.class)
3115*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("clean"), Prius.class)
3116*dc5640d1SHerbert Xue       .build(CarFactory.class));
3117*dc5640d1SHerbert Xue }</pre>
3118*dc5640d1SHerbert Xue
3119*dc5640d1SHerbert Xue <h3>Implementation limitations</h3>
3120*dc5640d1SHerbert Xue As a limitation of the implementation, it is prohibited to declare a factory method that
3121*dc5640d1SHerbert Xue accepts a {@code Provider} as one of its arguments.
3122*dc5640d1SHerbert Xue
3123*dc5640d1SHerbert Xue @since 3.0
3124*dc5640d1SHerbert Xue @author [email protected] (Peter Schmitt)]]>
3125*dc5640d1SHerbert Xue    </doc>
3126*dc5640d1SHerbert Xue  </class>
3127*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3128*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3129*dc5640d1SHerbert Xue  <class name="FactoryProvider" extends="java.lang.Object"
3130*dc5640d1SHerbert Xue    abstract="false"
3131*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3132*dc5640d1SHerbert Xue    deprecated="use {@link FactoryModuleBuilder} instead.">
3133*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3134*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
3135*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3136*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3137*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3138*dc5640d1SHerbert Xue      deprecated="not deprecated">
3139*dc5640d1SHerbert Xue      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3140*dc5640d1SHerbert Xue      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3141*dc5640d1SHerbert Xue    </method>
3142*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3143*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3144*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3145*dc5640d1SHerbert Xue      deprecated="not deprecated">
3146*dc5640d1SHerbert Xue      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3147*dc5640d1SHerbert Xue      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3148*dc5640d1SHerbert Xue    </method>
3149*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3150*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3151*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3152*dc5640d1SHerbert Xue      deprecated="not deprecated">
3153*dc5640d1SHerbert Xue    </method>
3154*dc5640d1SHerbert Xue    <method name="get" return="F"
3155*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3156*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3157*dc5640d1SHerbert Xue      deprecated="not deprecated">
3158*dc5640d1SHerbert Xue    </method>
3159*dc5640d1SHerbert Xue    <doc>
3160*dc5640d1SHerbert Xue    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3161*dc5640d1SHerbert Xue additional capability.
3162*dc5640d1SHerbert Xue
3163*dc5640d1SHerbert Xue <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3164*dc5640d1SHerbert Xue construct objects.
3165*dc5640d1SHerbert Xue
3166*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
3167*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
3168*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
3169*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3170*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
3171*dc5640d1SHerbert Xue }</pre>
3172*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3173*dc5640d1SHerbert Xue or <i>newPayment</i>.
3174*dc5640d1SHerbert Xue
3175*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
3176*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3177*dc5640d1SHerbert Xue constructor. In addition to injector-supplied parameters, the constructor should have
3178*dc5640d1SHerbert Xue parameters that match each of the factory method's parameters. Each factory-supplied parameter
3179*dc5640d1SHerbert Xue requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3180*dc5640d1SHerbert Xue is not bound by your application's modules.
3181*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3182*dc5640d1SHerbert Xue   {@literal @}Inject
3183*dc5640d1SHerbert Xue   public RealPayment(
3184*dc5640d1SHerbert Xue      CreditService creditService,
3185*dc5640d1SHerbert Xue      AuthService authService,
3186*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
3187*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
3188*dc5640d1SHerbert Xue     ...
3189*dc5640d1SHerbert Xue   }
3190*dc5640d1SHerbert Xue }</pre>
3191*dc5640d1SHerbert Xue Any parameter that permits a null value should also be annotated {@code @Nullable}.
3192*dc5640d1SHerbert Xue
3193*dc5640d1SHerbert Xue <h3>Configuring factories</h3>
3194*dc5640d1SHerbert Xue In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3195*dc5640d1SHerbert Xue factory:
3196*dc5640d1SHerbert Xue <pre>bind(PaymentFactory.class).toProvider(
3197*dc5640d1SHerbert Xue     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3198*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3199*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3200*dc5640d1SHerbert Xue
3201*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3202*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3203*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3204*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3205*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3206*dc5640d1SHerbert Xue
3207*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3208*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3209*dc5640d1SHerbert Xue     payment.apply();
3210*dc5640d1SHerbert Xue   }
3211*dc5640d1SHerbert Xue }</pre>
3212*dc5640d1SHerbert Xue
3213*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3214*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3215*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3216*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3217*dc5640d1SHerbert Xue
3218*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3219*dc5640d1SHerbert Xue   Payment create(
3220*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3221*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3222*dc5640d1SHerbert Xue       Money amount);
3223*dc5640d1SHerbert Xue } </pre>
3224*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3225*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3226*dc5640d1SHerbert Xue   {@literal @}Inject
3227*dc5640d1SHerbert Xue   public RealPayment(
3228*dc5640d1SHerbert Xue      CreditService creditService,
3229*dc5640d1SHerbert Xue      AuthService authService,
3230*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3231*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3232*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3233*dc5640d1SHerbert Xue     ...
3234*dc5640d1SHerbert Xue   }
3235*dc5640d1SHerbert Xue }</pre>
3236*dc5640d1SHerbert Xue
3237*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3238*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3239*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3240*dc5640d1SHerbert Xue returned.
3241*dc5640d1SHerbert Xue
3242*dc5640d1SHerbert Xue <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3243*dc5640d1SHerbert Xue Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3244*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3245*dc5640d1SHerbert Xue
3246*dc5640d1SHerbert Xue <p>Instead of matching factory method arguments to constructor parameters using their names, the
3247*dc5640d1SHerbert Xue <strong>parameters are matched by their order</strong>. The first factory method argument is
3248*dc5640d1SHerbert Xue used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3249*dc5640d1SHerbert Xue effect.
3250*dc5640d1SHerbert Xue
3251*dc5640d1SHerbert Xue <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3252*dc5640d1SHerbert Xue method interception. They do receive post-construction member injection.
3253*dc5640d1SHerbert Xue
3254*dc5640d1SHerbert Xue @param <F> The factory interface
3255*dc5640d1SHerbert Xue
3256*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
3257*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3258*dc5640d1SHerbert Xue @author [email protected] (Daniel Martin)
3259*dc5640d1SHerbert Xue
3260*dc5640d1SHerbert Xue @deprecated use {@link FactoryModuleBuilder} instead.]]>
3261*dc5640d1SHerbert Xue    </doc>
3262*dc5640d1SHerbert Xue  </class>
3263*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3264*dc5640d1SHerbert Xue</package>
3265*dc5640d1SHerbert Xue<package name="com.google.inject.binder">
3266*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3267*dc5640d1SHerbert Xue  <interface name="AnnotatedBindingBuilder"    abstract="true"
3268*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3269*dc5640d1SHerbert Xue    deprecated="not deprecated">
3270*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3271*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3272*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3273*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3274*dc5640d1SHerbert Xue      deprecated="not deprecated">
3275*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3276*dc5640d1SHerbert Xue      <doc>
3277*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3278*dc5640d1SHerbert Xue      </doc>
3279*dc5640d1SHerbert Xue    </method>
3280*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3281*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3282*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3283*dc5640d1SHerbert Xue      deprecated="not deprecated">
3284*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3285*dc5640d1SHerbert Xue      <doc>
3286*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3287*dc5640d1SHerbert Xue      </doc>
3288*dc5640d1SHerbert Xue    </method>
3289*dc5640d1SHerbert Xue    <doc>
3290*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3291*dc5640d1SHerbert Xue
3292*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3293*dc5640d1SHerbert Xue    </doc>
3294*dc5640d1SHerbert Xue  </interface>
3295*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3296*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3297*dc5640d1SHerbert Xue  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3298*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3299*dc5640d1SHerbert Xue    deprecated="not deprecated">
3300*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3301*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3302*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3303*dc5640d1SHerbert Xue      deprecated="not deprecated">
3304*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3305*dc5640d1SHerbert Xue      <doc>
3306*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3307*dc5640d1SHerbert Xue      </doc>
3308*dc5640d1SHerbert Xue    </method>
3309*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3310*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3311*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3312*dc5640d1SHerbert Xue      deprecated="not deprecated">
3313*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3314*dc5640d1SHerbert Xue      <doc>
3315*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3316*dc5640d1SHerbert Xue      </doc>
3317*dc5640d1SHerbert Xue    </method>
3318*dc5640d1SHerbert Xue    <doc>
3319*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3320*dc5640d1SHerbert Xue
3321*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3322*dc5640d1SHerbert Xue    </doc>
3323*dc5640d1SHerbert Xue  </interface>
3324*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3325*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3326*dc5640d1SHerbert Xue  <interface name="AnnotatedElementBuilder"    abstract="true"
3327*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3328*dc5640d1SHerbert Xue    deprecated="not deprecated">
3329*dc5640d1SHerbert Xue    <method name="annotatedWith"
3330*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3331*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3332*dc5640d1SHerbert Xue      deprecated="not deprecated">
3333*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3334*dc5640d1SHerbert Xue      <doc>
3335*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3336*dc5640d1SHerbert Xue      </doc>
3337*dc5640d1SHerbert Xue    </method>
3338*dc5640d1SHerbert Xue    <method name="annotatedWith"
3339*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3340*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3341*dc5640d1SHerbert Xue      deprecated="not deprecated">
3342*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3343*dc5640d1SHerbert Xue      <doc>
3344*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3345*dc5640d1SHerbert Xue      </doc>
3346*dc5640d1SHerbert Xue    </method>
3347*dc5640d1SHerbert Xue    <doc>
3348*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3349*dc5640d1SHerbert Xue
3350*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3351*dc5640d1SHerbert Xue @since 2.0]]>
3352*dc5640d1SHerbert Xue    </doc>
3353*dc5640d1SHerbert Xue  </interface>
3354*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3355*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3356*dc5640d1SHerbert Xue  <interface name="ConstantBindingBuilder"    abstract="true"
3357*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3358*dc5640d1SHerbert Xue    deprecated="not deprecated">
3359*dc5640d1SHerbert Xue    <method name="to"
3360*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3361*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3362*dc5640d1SHerbert Xue      deprecated="not deprecated">
3363*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
3364*dc5640d1SHerbert Xue      <doc>
3365*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3366*dc5640d1SHerbert Xue      </doc>
3367*dc5640d1SHerbert Xue    </method>
3368*dc5640d1SHerbert Xue    <method name="to"
3369*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3370*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3371*dc5640d1SHerbert Xue      deprecated="not deprecated">
3372*dc5640d1SHerbert Xue      <param name="value" type="int"/>
3373*dc5640d1SHerbert Xue      <doc>
3374*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3375*dc5640d1SHerbert Xue      </doc>
3376*dc5640d1SHerbert Xue    </method>
3377*dc5640d1SHerbert Xue    <method name="to"
3378*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3379*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3380*dc5640d1SHerbert Xue      deprecated="not deprecated">
3381*dc5640d1SHerbert Xue      <param name="value" type="long"/>
3382*dc5640d1SHerbert Xue      <doc>
3383*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3384*dc5640d1SHerbert Xue      </doc>
3385*dc5640d1SHerbert Xue    </method>
3386*dc5640d1SHerbert Xue    <method name="to"
3387*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3388*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3389*dc5640d1SHerbert Xue      deprecated="not deprecated">
3390*dc5640d1SHerbert Xue      <param name="value" type="boolean"/>
3391*dc5640d1SHerbert Xue      <doc>
3392*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3393*dc5640d1SHerbert Xue      </doc>
3394*dc5640d1SHerbert Xue    </method>
3395*dc5640d1SHerbert Xue    <method name="to"
3396*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3397*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3398*dc5640d1SHerbert Xue      deprecated="not deprecated">
3399*dc5640d1SHerbert Xue      <param name="value" type="double"/>
3400*dc5640d1SHerbert Xue      <doc>
3401*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3402*dc5640d1SHerbert Xue      </doc>
3403*dc5640d1SHerbert Xue    </method>
3404*dc5640d1SHerbert Xue    <method name="to"
3405*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3406*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3407*dc5640d1SHerbert Xue      deprecated="not deprecated">
3408*dc5640d1SHerbert Xue      <param name="value" type="float"/>
3409*dc5640d1SHerbert Xue      <doc>
3410*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3411*dc5640d1SHerbert Xue      </doc>
3412*dc5640d1SHerbert Xue    </method>
3413*dc5640d1SHerbert Xue    <method name="to"
3414*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3415*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3416*dc5640d1SHerbert Xue      deprecated="not deprecated">
3417*dc5640d1SHerbert Xue      <param name="value" type="short"/>
3418*dc5640d1SHerbert Xue      <doc>
3419*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3420*dc5640d1SHerbert Xue      </doc>
3421*dc5640d1SHerbert Xue    </method>
3422*dc5640d1SHerbert Xue    <method name="to"
3423*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3424*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3425*dc5640d1SHerbert Xue      deprecated="not deprecated">
3426*dc5640d1SHerbert Xue      <param name="value" type="char"/>
3427*dc5640d1SHerbert Xue      <doc>
3428*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3429*dc5640d1SHerbert Xue      </doc>
3430*dc5640d1SHerbert Xue    </method>
3431*dc5640d1SHerbert Xue    <method name="to"
3432*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3433*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3434*dc5640d1SHerbert Xue      deprecated="not deprecated">
3435*dc5640d1SHerbert Xue      <param name="value" type="byte"/>
3436*dc5640d1SHerbert Xue      <doc>
3437*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.
3438*dc5640d1SHerbert Xue
3439*dc5640d1SHerbert Xue @since 3.0]]>
3440*dc5640d1SHerbert Xue      </doc>
3441*dc5640d1SHerbert Xue    </method>
3442*dc5640d1SHerbert Xue    <method name="to"
3443*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3444*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3445*dc5640d1SHerbert Xue      deprecated="not deprecated">
3446*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3447*dc5640d1SHerbert Xue      <doc>
3448*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3449*dc5640d1SHerbert Xue      </doc>
3450*dc5640d1SHerbert Xue    </method>
3451*dc5640d1SHerbert Xue    <method name="to"
3452*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3453*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3454*dc5640d1SHerbert Xue      deprecated="not deprecated">
3455*dc5640d1SHerbert Xue      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3456*dc5640d1SHerbert Xue      <doc>
3457*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3458*dc5640d1SHerbert Xue      </doc>
3459*dc5640d1SHerbert Xue    </method>
3460*dc5640d1SHerbert Xue    <doc>
3461*dc5640d1SHerbert Xue    <![CDATA[Binds to a constant value.]]>
3462*dc5640d1SHerbert Xue    </doc>
3463*dc5640d1SHerbert Xue  </interface>
3464*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3465*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3466*dc5640d1SHerbert Xue  <interface name="LinkedBindingBuilder"    abstract="true"
3467*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3468*dc5640d1SHerbert Xue    deprecated="not deprecated">
3469*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3470*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3471*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3472*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3473*dc5640d1SHerbert Xue      deprecated="not deprecated">
3474*dc5640d1SHerbert Xue      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3475*dc5640d1SHerbert Xue      <doc>
3476*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3477*dc5640d1SHerbert Xue      </doc>
3478*dc5640d1SHerbert Xue    </method>
3479*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3480*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3481*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3482*dc5640d1SHerbert Xue      deprecated="not deprecated">
3483*dc5640d1SHerbert Xue      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3484*dc5640d1SHerbert Xue      <doc>
3485*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3486*dc5640d1SHerbert Xue      </doc>
3487*dc5640d1SHerbert Xue    </method>
3488*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3489*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3490*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3491*dc5640d1SHerbert Xue      deprecated="not deprecated">
3492*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3493*dc5640d1SHerbert Xue      <doc>
3494*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3495*dc5640d1SHerbert Xue      </doc>
3496*dc5640d1SHerbert Xue    </method>
3497*dc5640d1SHerbert Xue    <method name="toInstance"
3498*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3499*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3500*dc5640d1SHerbert Xue      deprecated="not deprecated">
3501*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
3502*dc5640d1SHerbert Xue      <doc>
3503*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3504*dc5640d1SHerbert Xue
3505*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3506*dc5640d1SHerbert Xue      </doc>
3507*dc5640d1SHerbert Xue    </method>
3508*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3509*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3510*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3511*dc5640d1SHerbert Xue      deprecated="not deprecated">
3512*dc5640d1SHerbert Xue      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3513*dc5640d1SHerbert Xue      <doc>
3514*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3515*dc5640d1SHerbert Xue
3516*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3517*dc5640d1SHerbert Xue      </doc>
3518*dc5640d1SHerbert Xue    </method>
3519*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3520*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3521*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3522*dc5640d1SHerbert Xue      deprecated="not deprecated">
3523*dc5640d1SHerbert Xue      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3524*dc5640d1SHerbert Xue      <doc>
3525*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3526*dc5640d1SHerbert Xue      </doc>
3527*dc5640d1SHerbert Xue    </method>
3528*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3529*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3530*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3531*dc5640d1SHerbert Xue      deprecated="not deprecated">
3532*dc5640d1SHerbert Xue      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3533*dc5640d1SHerbert Xue      <doc>
3534*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3535*dc5640d1SHerbert Xue      </doc>
3536*dc5640d1SHerbert Xue    </method>
3537*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3538*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3539*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3540*dc5640d1SHerbert Xue      deprecated="not deprecated">
3541*dc5640d1SHerbert Xue      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3542*dc5640d1SHerbert Xue      <doc>
3543*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3544*dc5640d1SHerbert Xue      </doc>
3545*dc5640d1SHerbert Xue    </method>
3546*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3547*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3548*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3549*dc5640d1SHerbert Xue      deprecated="not deprecated">
3550*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3551*dc5640d1SHerbert Xue      <doc>
3552*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3553*dc5640d1SHerbert Xue
3554*dc5640d1SHerbert Xue @since 3.0]]>
3555*dc5640d1SHerbert Xue      </doc>
3556*dc5640d1SHerbert Xue    </method>
3557*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3558*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3559*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3560*dc5640d1SHerbert Xue      deprecated="not deprecated">
3561*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3562*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3563*dc5640d1SHerbert Xue      <doc>
3564*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3565*dc5640d1SHerbert Xue
3566*dc5640d1SHerbert Xue @since 3.0]]>
3567*dc5640d1SHerbert Xue      </doc>
3568*dc5640d1SHerbert Xue    </method>
3569*dc5640d1SHerbert Xue    <doc>
3570*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3571*dc5640d1SHerbert Xue
3572*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3573*dc5640d1SHerbert Xue    </doc>
3574*dc5640d1SHerbert Xue  </interface>
3575*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3576*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3577*dc5640d1SHerbert Xue  <interface name="ScopedBindingBuilder"    abstract="true"
3578*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3579*dc5640d1SHerbert Xue    deprecated="not deprecated">
3580*dc5640d1SHerbert Xue    <method name="in"
3581*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3582*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3583*dc5640d1SHerbert Xue      deprecated="not deprecated">
3584*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3585*dc5640d1SHerbert Xue      <doc>
3586*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3587*dc5640d1SHerbert Xue      </doc>
3588*dc5640d1SHerbert Xue    </method>
3589*dc5640d1SHerbert Xue    <method name="in"
3590*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3591*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3592*dc5640d1SHerbert Xue      deprecated="not deprecated">
3593*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
3594*dc5640d1SHerbert Xue      <doc>
3595*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3596*dc5640d1SHerbert Xue      </doc>
3597*dc5640d1SHerbert Xue    </method>
3598*dc5640d1SHerbert Xue    <method name="asEagerSingleton"
3599*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3600*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3601*dc5640d1SHerbert Xue      deprecated="not deprecated">
3602*dc5640d1SHerbert Xue      <doc>
3603*dc5640d1SHerbert Xue      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3604*dc5640d1SHerbert Xue singleton-scoped binding upon creation. Useful for application
3605*dc5640d1SHerbert Xue initialization logic.  See the EDSL examples at
3606*dc5640d1SHerbert Xue {@link com.google.inject.Binder}.]]>
3607*dc5640d1SHerbert Xue      </doc>
3608*dc5640d1SHerbert Xue    </method>
3609*dc5640d1SHerbert Xue    <doc>
3610*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3611*dc5640d1SHerbert Xue
3612*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3613*dc5640d1SHerbert Xue    </doc>
3614*dc5640d1SHerbert Xue  </interface>
3615*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3616*dc5640d1SHerbert Xue</package>
3617*dc5640d1SHerbert Xue<package name="com.google.inject.grapher">
3618*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.BindingEdge -->
3619*dc5640d1SHerbert Xue  <interface name="BindingEdge"    abstract="true"
3620*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3621*dc5640d1SHerbert Xue    deprecated="not deprecated">
3622*dc5640d1SHerbert Xue    <method name="setType"
3623*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3624*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3625*dc5640d1SHerbert Xue      deprecated="not deprecated">
3626*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
3627*dc5640d1SHerbert Xue    </method>
3628*dc5640d1SHerbert Xue    <doc>
3629*dc5640d1SHerbert Xue    <![CDATA[Interface for an edge that connects an interface to the type or instance
3630*dc5640d1SHerbert Xue that is bound to implement it.
3631*dc5640d1SHerbert Xue
3632*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
3633*dc5640d1SHerbert Xue
3634*dc5640d1SHerbert Xue @param <K> The type for node IDs.]]>
3635*dc5640d1SHerbert Xue    </doc>
3636*dc5640d1SHerbert Xue  </interface>
3637*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.BindingEdge -->
3638*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.BindingEdge.Factory -->
3639*dc5640d1SHerbert Xue  <interface name="BindingEdge.Factory"    abstract="true"
3640*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
3641*dc5640d1SHerbert Xue    deprecated="not deprecated">
3642*dc5640d1SHerbert Xue    <method name="newBindingEdge" return="T extends com.google.inject.grapher.BindingEdge&lt;K&gt;"
3643*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3644*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3645*dc5640d1SHerbert Xue      deprecated="not deprecated">
3646*dc5640d1SHerbert Xue      <param name="fromId" type="K"/>
3647*dc5640d1SHerbert Xue      <param name="toId" type="K"/>
3648*dc5640d1SHerbert Xue      <doc>
3649*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link BindingEdge} instance and adds it to the graph.
3650*dc5640d1SHerbert Xue
3651*dc5640d1SHerbert Xue @param fromId Node ID for the interface node.
3652*dc5640d1SHerbert Xue @param toId Node ID for the implementation (class or instance) node.
3653*dc5640d1SHerbert Xue @return The newly created and added {@link BindingEdge}.]]>
3654*dc5640d1SHerbert Xue      </doc>
3655*dc5640d1SHerbert Xue    </method>
3656*dc5640d1SHerbert Xue    <doc>
3657*dc5640d1SHerbert Xue    <![CDATA[Factory interface for {@link BindingEdge}s. Renderer implementations will
3658*dc5640d1SHerbert Xue need to provide an implementation for this.
3659*dc5640d1SHerbert Xue
3660*dc5640d1SHerbert Xue @param <K> The type for node IDs.
3661*dc5640d1SHerbert Xue @param <T> The {@link BindingEdge} sub-type that this factory provides.]]>
3662*dc5640d1SHerbert Xue    </doc>
3663*dc5640d1SHerbert Xue  </interface>
3664*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.BindingEdge.Factory -->
3665*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
3666*dc5640d1SHerbert Xue  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
3667*dc5640d1SHerbert Xue    abstract="false"
3668*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
3669*dc5640d1SHerbert Xue    deprecated="not deprecated">
3670*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
3671*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3672*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3673*dc5640d1SHerbert Xue      deprecated="not deprecated">
3674*dc5640d1SHerbert Xue    </method>
3675*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
3676*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3677*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3678*dc5640d1SHerbert Xue      deprecated="not deprecated">
3679*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
3680*dc5640d1SHerbert Xue    </method>
3681*dc5640d1SHerbert Xue    <doc>
3682*dc5640d1SHerbert Xue    <![CDATA[Classification for what kind of binding this edge represents.]]>
3683*dc5640d1SHerbert Xue    </doc>
3684*dc5640d1SHerbert Xue  </class>
3685*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
3686*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.DependencyEdge -->
3687*dc5640d1SHerbert Xue  <interface name="DependencyEdge"    abstract="true"
3688*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3689*dc5640d1SHerbert Xue    deprecated="not deprecated">
3690*dc5640d1SHerbert Xue    <doc>
3691*dc5640d1SHerbert Xue    <![CDATA[Interface for an edge from a class or {@link InjectionPoint} to the
3692*dc5640d1SHerbert Xue interface node that will satisfy the dependency.
3693*dc5640d1SHerbert Xue
3694*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
3695*dc5640d1SHerbert Xue
3696*dc5640d1SHerbert Xue @param <K> The type for node IDs.]]>
3697*dc5640d1SHerbert Xue    </doc>
3698*dc5640d1SHerbert Xue  </interface>
3699*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.DependencyEdge -->
3700*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.DependencyEdge.Factory -->
3701*dc5640d1SHerbert Xue  <interface name="DependencyEdge.Factory"    abstract="true"
3702*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
3703*dc5640d1SHerbert Xue    deprecated="not deprecated">
3704*dc5640d1SHerbert Xue    <method name="newDependencyEdge" return="T extends com.google.inject.grapher.DependencyEdge&lt;K&gt;"
3705*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3706*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3707*dc5640d1SHerbert Xue      deprecated="not deprecated">
3708*dc5640d1SHerbert Xue      <param name="fromId" type="K"/>
3709*dc5640d1SHerbert Xue      <param name="fromPoint" type="com.google.inject.spi.InjectionPoint"/>
3710*dc5640d1SHerbert Xue      <param name="toId" type="K"/>
3711*dc5640d1SHerbert Xue      <doc>
3712*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link DependencyEdge} and adds it to the graph.
3713*dc5640d1SHerbert Xue
3714*dc5640d1SHerbert Xue @param fromId The ID for the class or instance node that has the
3715*dc5640d1SHerbert Xue     dependency.
3716*dc5640d1SHerbert Xue @param fromPoint The point where the dependency will be
3717*dc5640d1SHerbert Xue     {@literal @}{@link Inject}ed.
3718*dc5640d1SHerbert Xue @param toId The ID for the interface node that satisfies the dependency.]]>
3719*dc5640d1SHerbert Xue      </doc>
3720*dc5640d1SHerbert Xue    </method>
3721*dc5640d1SHerbert Xue    <doc>
3722*dc5640d1SHerbert Xue    <![CDATA[Factory interface for {@link DependencyEdge}s. Renderer implementations
3723*dc5640d1SHerbert Xue will need to provide an implementation for this.
3724*dc5640d1SHerbert Xue
3725*dc5640d1SHerbert Xue @param <K> The type for node IDs.
3726*dc5640d1SHerbert Xue @param <T> The {@link DependencyEdge} sub-type that this factory provides.]]>
3727*dc5640d1SHerbert Xue    </doc>
3728*dc5640d1SHerbert Xue  </interface>
3729*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.DependencyEdge.Factory -->
3730*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.GrapherModule -->
3731*dc5640d1SHerbert Xue  <class name="GrapherModule" extends="com.google.inject.AbstractModule"
3732*dc5640d1SHerbert Xue    abstract="false"
3733*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3734*dc5640d1SHerbert Xue    deprecated="not deprecated">
3735*dc5640d1SHerbert Xue    <constructor name="GrapherModule"
3736*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3737*dc5640d1SHerbert Xue      deprecated="not deprecated">
3738*dc5640d1SHerbert Xue    </constructor>
3739*dc5640d1SHerbert Xue    <method name="configure"
3740*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3741*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3742*dc5640d1SHerbert Xue      deprecated="not deprecated">
3743*dc5640d1SHerbert Xue    </method>
3744*dc5640d1SHerbert Xue    <doc>
3745*dc5640d1SHerbert Xue    <![CDATA[Module for the common bindings for {@link InjectorGrapher}. You will also
3746*dc5640d1SHerbert Xue need to bind a {@link Module} that satisfies the {@link Renderer}
3747*dc5640d1SHerbert Xue dependency.
3748*dc5640d1SHerbert Xue <p>
3749*dc5640d1SHerbert Xue If you want to use subtypes of the node and edge classes, or a different
3750*dc5640d1SHerbert Xue node ID type, you will need to override the {@link GraphingVisitor} binding
3751*dc5640d1SHerbert Xue to specify the new type parameters.
3752*dc5640d1SHerbert Xue
3753*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
3754*dc5640d1SHerbert Xue    </doc>
3755*dc5640d1SHerbert Xue  </class>
3756*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.GrapherModule -->
3757*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.GraphingVisitor -->
3758*dc5640d1SHerbert Xue  <class name="GraphingVisitor" extends="java.lang.Object"
3759*dc5640d1SHerbert Xue    abstract="false"
3760*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3761*dc5640d1SHerbert Xue    deprecated="not deprecated">
3762*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.lang.Void&gt;"/>
3763*dc5640d1SHerbert Xue    <constructor name="GraphingVisitor" type="com.google.inject.grapher.NodeIdFactory&lt;K&gt;, com.google.inject.grapher.InterfaceNode.Factory&lt;K, N&gt;, com.google.inject.grapher.ImplementationNode.Factory&lt;K, M&gt;, com.google.inject.grapher.BindingEdge.Factory&lt;K, B&gt;, com.google.inject.grapher.DependencyEdge.Factory&lt;K, D&gt;, com.google.inject.grapher.NodeAliasFactory&lt;K&gt;"
3764*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3765*dc5640d1SHerbert Xue      deprecated="not deprecated">
3766*dc5640d1SHerbert Xue    </constructor>
3767*dc5640d1SHerbert Xue    <method name="getClassNodeId" return="K"
3768*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3769*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
3770*dc5640d1SHerbert Xue      deprecated="not deprecated">
3771*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3772*dc5640d1SHerbert Xue      <doc>
3773*dc5640d1SHerbert Xue      <![CDATA[Helper method to return the standard node ID for the {@link Binding}'s
3774*dc5640d1SHerbert Xue {@link Key}.
3775*dc5640d1SHerbert Xue
3776*dc5640d1SHerbert Xue @see NodeIdFactory#getClassNodeId(Key)]]>
3777*dc5640d1SHerbert Xue      </doc>
3778*dc5640d1SHerbert Xue    </method>
3779*dc5640d1SHerbert Xue    <method name="getInstanceNodeId" return="K"
3780*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3781*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
3782*dc5640d1SHerbert Xue      deprecated="not deprecated">
3783*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3784*dc5640d1SHerbert Xue      <doc>
3785*dc5640d1SHerbert Xue      <![CDATA[Helper method to return the instance node ID for the {@link Binding}'s
3786*dc5640d1SHerbert Xue {@link Key}.
3787*dc5640d1SHerbert Xue
3788*dc5640d1SHerbert Xue @see NodeIdFactory#getInstanceNodeId(Key)]]>
3789*dc5640d1SHerbert Xue      </doc>
3790*dc5640d1SHerbert Xue    </method>
3791*dc5640d1SHerbert Xue    <method name="newInterfaceNode" return="N extends com.google.inject.grapher.InterfaceNode&lt;K&gt;"
3792*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3793*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3794*dc5640d1SHerbert Xue      deprecated="not deprecated">
3795*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3796*dc5640d1SHerbert Xue      <doc>
3797*dc5640d1SHerbert Xue      <![CDATA[Creates and returns a new {@link InterfaceNode} object for the given
3798*dc5640d1SHerbert Xue {@link Binding}.]]>
3799*dc5640d1SHerbert Xue      </doc>
3800*dc5640d1SHerbert Xue    </method>
3801*dc5640d1SHerbert Xue    <method name="newClassImplementationNode" return="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
3802*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3803*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3804*dc5640d1SHerbert Xue      deprecated="not deprecated">
3805*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3806*dc5640d1SHerbert Xue      <param name="constructorInjectionPoint" type="com.google.inject.spi.InjectionPoint"/>
3807*dc5640d1SHerbert Xue      <param name="memberInjectionPoints" type="java.util.Collection&lt;com.google.inject.spi.InjectionPoint&gt;"/>
3808*dc5640d1SHerbert Xue      <doc>
3809*dc5640d1SHerbert Xue      <![CDATA[Creates and returns a new {@link ImplementationNode} for the given
3810*dc5640d1SHerbert Xue {@link Binding}, where the {@link Binding} is for a class that Guice
3811*dc5640d1SHerbert Xue will instantiate, rather than a specific instance.]]>
3812*dc5640d1SHerbert Xue      </doc>
3813*dc5640d1SHerbert Xue    </method>
3814*dc5640d1SHerbert Xue    <method name="newInstanceImplementationNode" return="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
3815*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3816*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3817*dc5640d1SHerbert Xue      deprecated="not deprecated">
3818*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3819*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
3820*dc5640d1SHerbert Xue      <doc>
3821*dc5640d1SHerbert Xue      <![CDATA[Creates and returns a new {@link ImplementationNode} for the given
3822*dc5640d1SHerbert Xue {@link Binding}, where the {@link Binding} is for an instance, rather than
3823*dc5640d1SHerbert Xue a class.]]>
3824*dc5640d1SHerbert Xue      </doc>
3825*dc5640d1SHerbert Xue    </method>
3826*dc5640d1SHerbert Xue    <method name="newBindingEdge" return="B extends com.google.inject.grapher.BindingEdge&lt;K&gt;"
3827*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3828*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3829*dc5640d1SHerbert Xue      deprecated="not deprecated">
3830*dc5640d1SHerbert Xue      <param name="nodeId" type="K"/>
3831*dc5640d1SHerbert Xue      <param name="toId" type="K"/>
3832*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
3833*dc5640d1SHerbert Xue      <doc>
3834*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link BindingEdge} from the given node to the specified
3835*dc5640d1SHerbert Xue node.
3836*dc5640d1SHerbert Xue
3837*dc5640d1SHerbert Xue @param nodeId ID of the {@link InterfaceNode} that binds to the other.
3838*dc5640d1SHerbert Xue @param toId The node ID of a class or instance that is bound.
3839*dc5640d1SHerbert Xue @param type The {@link BindingEdge.Type} of this binding.
3840*dc5640d1SHerbert Xue @return The newly-created and added {@link BindingEdge}.]]>
3841*dc5640d1SHerbert Xue      </doc>
3842*dc5640d1SHerbert Xue    </method>
3843*dc5640d1SHerbert Xue    <method name="newDependencyEdges" return="java.util.Collection&lt;D&gt;"
3844*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3845*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3846*dc5640d1SHerbert Xue      deprecated="not deprecated">
3847*dc5640d1SHerbert Xue      <param name="nodeId" type="K"/>
3848*dc5640d1SHerbert Xue      <param name="node" type="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"/>
3849*dc5640d1SHerbert Xue      <param name="dependencies" type="java.util.Collection&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"/>
3850*dc5640d1SHerbert Xue      <doc>
3851*dc5640d1SHerbert Xue      <![CDATA[Adds {@link DependencyEdge}s to the graph for each of the provided
3852*dc5640d1SHerbert Xue {@link Dependency}s. These will be from the given node ID to the
3853*dc5640d1SHerbert Xue {@link Dependency}'s {@link Key}.
3854*dc5640d1SHerbert Xue <p>
3855*dc5640d1SHerbert Xue If a {@link Dependency} has an associated {@link InjectionPoint}, its
3856*dc5640d1SHerbert Xue member will be added to the given {@link ImplementationNode} and the edge
3857*dc5640d1SHerbert Xue will start at the {@link Member}.
3858*dc5640d1SHerbert Xue
3859*dc5640d1SHerbert Xue @see #newDependencyEdge(Object, InjectionPoint, Dependency)
3860*dc5640d1SHerbert Xue
3861*dc5640d1SHerbert Xue @param nodeId ID of the node that should be the tail of the
3862*dc5640d1SHerbert Xue     {@link DependencyEdge}s.
3863*dc5640d1SHerbert Xue @param node An {@link ImplementationNode} to add {@link Member}s to.
3864*dc5640d1SHerbert Xue @param dependencies {@link Collection} of {@link Dependency}s from the
3865*dc5640d1SHerbert Xue     {@link Binding}.
3866*dc5640d1SHerbert Xue @return A {@link Collection} of the {@link DependencyEdge}s that were
3867*dc5640d1SHerbert Xue     added to the graph.]]>
3868*dc5640d1SHerbert Xue      </doc>
3869*dc5640d1SHerbert Xue    </method>
3870*dc5640d1SHerbert Xue    <method name="newDependencyEdge" return="D extends com.google.inject.grapher.DependencyEdge&lt;K&gt;"
3871*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3872*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3873*dc5640d1SHerbert Xue      deprecated="not deprecated">
3874*dc5640d1SHerbert Xue      <param name="nodeId" type="K"/>
3875*dc5640d1SHerbert Xue      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
3876*dc5640d1SHerbert Xue      <param name="dependency" type="com.google.inject.spi.Dependency&lt;?&gt;"/>
3877*dc5640d1SHerbert Xue      <doc>
3878*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link DependencyEdge} from the given node to a
3879*dc5640d1SHerbert Xue {@link Dependency}.
3880*dc5640d1SHerbert Xue <p>
3881*dc5640d1SHerbert Xue This method takes more comprehensive parameters than strictly necessary
3882*dc5640d1SHerbert Xue in case they would be useful to overriding implementations.
3883*dc5640d1SHerbert Xue
3884*dc5640d1SHerbert Xue @param nodeId ID of the {@link ImplementationNode} where the edges will start.
3885*dc5640d1SHerbert Xue @param injectionPoint The {@link InjectionPoint} that gave rise to this
3886*dc5640d1SHerbert Xue     {@link Dependency}, if one exists. Used to figure out which
3887*dc5640d1SHerbert Xue     {@link Member} the edge should point from.
3888*dc5640d1SHerbert Xue @param dependency The {@link Dependency} to represent with this edge.
3889*dc5640d1SHerbert Xue @return The newly-created and added {@link DependencyEdge}.]]>
3890*dc5640d1SHerbert Xue      </doc>
3891*dc5640d1SHerbert Xue    </method>
3892*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3893*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3894*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3895*dc5640d1SHerbert Xue      deprecated="not deprecated">
3896*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
3897*dc5640d1SHerbert Xue      <doc>
3898*dc5640d1SHerbert Xue      <![CDATA[Visitor for {@link ConstructorBinding}s. These are for classes that Guice
3899*dc5640d1SHerbert Xue will instantiate to satisfy injection requests. We create a new
3900*dc5640d1SHerbert Xue {@link ImplementationNode} for the class, then add edges to everything
3901*dc5640d1SHerbert Xue that it depends on to be instantiated.
3902*dc5640d1SHerbert Xue
3903*dc5640d1SHerbert Xue @see #newClassImplementationNode(Binding, InjectionPoint, Collection)
3904*dc5640d1SHerbert Xue @see #newDependencyEdges(Object, ImplementationNode, Collection)]]>
3905*dc5640d1SHerbert Xue      </doc>
3906*dc5640d1SHerbert Xue    </method>
3907*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3908*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3909*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3910*dc5640d1SHerbert Xue      deprecated="not deprecated">
3911*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
3912*dc5640d1SHerbert Xue      <doc>
3913*dc5640d1SHerbert Xue      <![CDATA[Visitor for {@link ConvertedConstantBinding}. The {@link Binding}'s
3914*dc5640d1SHerbert Xue {@link Key} will be of an annotated primitive type, and the value of
3915*dc5640d1SHerbert Xue {@link ConvertedConstantBinding#getSourceKey()} will be of a
3916*dc5640d1SHerbert Xue {@link String} with the same annotation.
3917*dc5640d1SHerbert Xue <p>
3918*dc5640d1SHerbert Xue We render this as an {@link InterfaceNode} that has a
3919*dc5640d1SHerbert Xue {@link BindingEdge} to the source {@link Key}. That will then be rendered
3920*dc5640d1SHerbert Xue by {@link #visit(InstanceBinding)} as an {@link InterfaceNode}
3921*dc5640d1SHerbert Xue with a {@link BindingEdge} to the {@link String} instance.
3922*dc5640d1SHerbert Xue
3923*dc5640d1SHerbert Xue @see #newInterfaceNode(Binding)
3924*dc5640d1SHerbert Xue @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
3925*dc5640d1SHerbert Xue      </doc>
3926*dc5640d1SHerbert Xue    </method>
3927*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3928*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3929*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3930*dc5640d1SHerbert Xue      deprecated="not deprecated">
3931*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;?&gt;"/>
3932*dc5640d1SHerbert Xue      <doc>
3933*dc5640d1SHerbert Xue      <![CDATA[Currently not displayed on the graph.]]>
3934*dc5640d1SHerbert Xue      </doc>
3935*dc5640d1SHerbert Xue    </method>
3936*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3937*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3938*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3939*dc5640d1SHerbert Xue      deprecated="not deprecated">
3940*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
3941*dc5640d1SHerbert Xue      <doc>
3942*dc5640d1SHerbert Xue      <![CDATA[Visitor for {@link InstanceBinding}. We render two nodes in this case: a
3943*dc5640d1SHerbert Xue {@link InterfaceNode} for the binding's {@link Key}, and then an
3944*dc5640d1SHerbert Xue {@link ImplementationNode} for the instance {@link Object} itself. We run
3945*dc5640d1SHerbert Xue a binding node between them.
3946*dc5640d1SHerbert Xue <p>
3947*dc5640d1SHerbert Xue We then render any {@link DependencyEdge}s that the instance may have,
3948*dc5640d1SHerbert Xue which come either from {@link InjectionPoint}s (method and field) on the
3949*dc5640d1SHerbert Xue instance, or on {@link Dependency}s the instance declares through the
3950*dc5640d1SHerbert Xue {@link HasDependencies} interface.
3951*dc5640d1SHerbert Xue
3952*dc5640d1SHerbert Xue @see #newInterfaceNode(Binding)
3953*dc5640d1SHerbert Xue @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)
3954*dc5640d1SHerbert Xue @see #newInstanceImplementationNode(Binding, Object)
3955*dc5640d1SHerbert Xue @see #newDependencyEdges(Object, ImplementationNode, java.util.Collection)]]>
3956*dc5640d1SHerbert Xue      </doc>
3957*dc5640d1SHerbert Xue    </method>
3958*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3959*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3960*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3961*dc5640d1SHerbert Xue      deprecated="not deprecated">
3962*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
3963*dc5640d1SHerbert Xue      <doc>
3964*dc5640d1SHerbert Xue      <![CDATA[Visitor for {@link LinkedKeyBinding}. This is the standard {@link Binding}
3965*dc5640d1SHerbert Xue you get from binding an interface class to an implementation class. We
3966*dc5640d1SHerbert Xue create an {@link InterfaceNode}, then draw a {@link BindingEdge} to the
3967*dc5640d1SHerbert Xue node of the implementing class.
3968*dc5640d1SHerbert Xue
3969*dc5640d1SHerbert Xue @see #newInterfaceNode(Binding)
3970*dc5640d1SHerbert Xue @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
3971*dc5640d1SHerbert Xue      </doc>
3972*dc5640d1SHerbert Xue    </method>
3973*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3974*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3975*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3976*dc5640d1SHerbert Xue      deprecated="not deprecated">
3977*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
3978*dc5640d1SHerbert Xue      <doc>
3979*dc5640d1SHerbert Xue      <![CDATA[Visitor for {@link ProviderBinding}. These {@link Binding}s arise from an
3980*dc5640d1SHerbert Xue {@link InjectionPoint} for the {@link Provider} interface. Since this
3981*dc5640d1SHerbert Xue isn't tremendously interesting information, we don't render this binding
3982*dc5640d1SHerbert Xue on the graph, and instead let the {@link DependencyEdge} go straight from
3983*dc5640d1SHerbert Xue the {@link InjectionPoint} to the node specified by
3984*dc5640d1SHerbert Xue {@link ProviderBinding#getProvidedKey()}.
3985*dc5640d1SHerbert Xue
3986*dc5640d1SHerbert Xue @see NodeAliasFactory#newAlias(Object, Object)]]>
3987*dc5640d1SHerbert Xue      </doc>
3988*dc5640d1SHerbert Xue    </method>
3989*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
3990*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3991*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3992*dc5640d1SHerbert Xue      deprecated="not deprecated">
3993*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
3994*dc5640d1SHerbert Xue      <doc>
3995*dc5640d1SHerbert Xue      <![CDATA[Same as {@link #visit(InstanceBinding)}, but the
3996*dc5640d1SHerbert Xue {@link BindingEdge} is {@link BindingEdge.Type#PROVIDER}.
3997*dc5640d1SHerbert Xue
3998*dc5640d1SHerbert Xue @see #newInterfaceNode(Binding)
3999*dc5640d1SHerbert Xue @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)
4000*dc5640d1SHerbert Xue @see #newInstanceImplementationNode(Binding, Object)
4001*dc5640d1SHerbert Xue @see #newDependencyEdges(Object, ImplementationNode, java.util.Collection)]]>
4002*dc5640d1SHerbert Xue      </doc>
4003*dc5640d1SHerbert Xue    </method>
4004*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
4005*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4006*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4007*dc5640d1SHerbert Xue      deprecated="not deprecated">
4008*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4009*dc5640d1SHerbert Xue      <doc>
4010*dc5640d1SHerbert Xue      <![CDATA[Same as {@link #visit(LinkedKeyBinding)}, but the
4011*dc5640d1SHerbert Xue {@link BindingEdge} is {@link BindingEdge.Type#PROVIDER}.
4012*dc5640d1SHerbert Xue
4013*dc5640d1SHerbert Xue @see #newInterfaceNode(Binding)
4014*dc5640d1SHerbert Xue @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
4015*dc5640d1SHerbert Xue      </doc>
4016*dc5640d1SHerbert Xue    </method>
4017*dc5640d1SHerbert Xue    <method name="visit" return="java.lang.Void"
4018*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4019*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4020*dc5640d1SHerbert Xue      deprecated="not deprecated">
4021*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;?&gt;"/>
4022*dc5640d1SHerbert Xue      <doc>
4023*dc5640d1SHerbert Xue      <![CDATA[Currently not displayed on the graph.]]>
4024*dc5640d1SHerbert Xue      </doc>
4025*dc5640d1SHerbert Xue    </method>
4026*dc5640d1SHerbert Xue    <doc>
4027*dc5640d1SHerbert Xue    <![CDATA[{@link BindingTargetVisitor} that adds nodes and edges to the graph based on
4028*dc5640d1SHerbert Xue the visited {@link Binding}.
4029*dc5640d1SHerbert Xue <p>
4030*dc5640d1SHerbert Xue This class is parameterized over the four graph element types
4031*dc5640d1SHerbert Xue ({@link InterfaceNode}, {@link ImplementationNode}, {@link BindingEdge}, and
4032*dc5640d1SHerbert Xue {@link DependencyEdge}) so that you can extend those interfaces and also
4033*dc5640d1SHerbert Xue extend this class, and the helper methods will all return your new types.
4034*dc5640d1SHerbert Xue
4035*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4036*dc5640d1SHerbert Xue
4037*dc5640d1SHerbert Xue @param <K> The type for node IDs.
4038*dc5640d1SHerbert Xue @param <N> Type for {@link InterfaceNode}s.
4039*dc5640d1SHerbert Xue @param <M> Type for {@link ImplementationNode}.s
4040*dc5640d1SHerbert Xue @param <B> Type for {@link BindingEdge}s.
4041*dc5640d1SHerbert Xue @param <D> Type for {@link DependencyEdge}s.]]>
4042*dc5640d1SHerbert Xue    </doc>
4043*dc5640d1SHerbert Xue  </class>
4044*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.GraphingVisitor -->
4045*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.ImplementationNode -->
4046*dc5640d1SHerbert Xue  <interface name="ImplementationNode"    abstract="true"
4047*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4048*dc5640d1SHerbert Xue    deprecated="not deprecated">
4049*dc5640d1SHerbert Xue    <method name="setClassKey"
4050*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4051*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4052*dc5640d1SHerbert Xue      deprecated="not deprecated">
4053*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4054*dc5640d1SHerbert Xue      <doc>
4055*dc5640d1SHerbert Xue      <![CDATA[Sets the {@link Key} that this node is for. Used when the node is
4056*dc5640d1SHerbert Xue representing a class that Guice will instantiate.]]>
4057*dc5640d1SHerbert Xue      </doc>
4058*dc5640d1SHerbert Xue    </method>
4059*dc5640d1SHerbert Xue    <method name="setInstance"
4060*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4061*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4062*dc5640d1SHerbert Xue      deprecated="not deprecated">
4063*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4064*dc5640d1SHerbert Xue      <doc>
4065*dc5640d1SHerbert Xue      <![CDATA[Sets the {@link Object} that's the already-created instance. Used when
4066*dc5640d1SHerbert Xue this node is represeting the instance instead of a class.]]>
4067*dc5640d1SHerbert Xue      </doc>
4068*dc5640d1SHerbert Xue    </method>
4069*dc5640d1SHerbert Xue    <method name="setSource"
4070*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4071*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4072*dc5640d1SHerbert Xue      deprecated="not deprecated">
4073*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4074*dc5640d1SHerbert Xue    </method>
4075*dc5640d1SHerbert Xue    <method name="addMember"
4076*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4077*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4078*dc5640d1SHerbert Xue      deprecated="not deprecated">
4079*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4080*dc5640d1SHerbert Xue    </method>
4081*dc5640d1SHerbert Xue    <doc>
4082*dc5640d1SHerbert Xue    <![CDATA[Node for classes and instances that have {@link Dependency}s and are
4083*dc5640d1SHerbert Xue bound to {@link InterfaceNode}s. These nodes will often have fields for
4084*dc5640d1SHerbert Xue {@link Member}s that are {@link InjectionPoint}s.
4085*dc5640d1SHerbert Xue
4086*dc5640d1SHerbert Xue @see DependencyEdge
4087*dc5640d1SHerbert Xue
4088*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4089*dc5640d1SHerbert Xue
4090*dc5640d1SHerbert Xue @param <K> The type for node IDs.]]>
4091*dc5640d1SHerbert Xue    </doc>
4092*dc5640d1SHerbert Xue  </interface>
4093*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.ImplementationNode -->
4094*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.ImplementationNode.Factory -->
4095*dc5640d1SHerbert Xue  <interface name="ImplementationNode.Factory"    abstract="true"
4096*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
4097*dc5640d1SHerbert Xue    deprecated="not deprecated">
4098*dc5640d1SHerbert Xue    <method name="newImplementationNode" return="T extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
4099*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4100*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4101*dc5640d1SHerbert Xue      deprecated="not deprecated">
4102*dc5640d1SHerbert Xue      <param name="nodeId" type="K"/>
4103*dc5640d1SHerbert Xue      <doc>
4104*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link ImplementationNode} and adds it to the graph.
4105*dc5640d1SHerbert Xue
4106*dc5640d1SHerbert Xue @param nodeId ID for the node.
4107*dc5640d1SHerbert Xue @return The new {@link ImplementationNode} instance.]]>
4108*dc5640d1SHerbert Xue      </doc>
4109*dc5640d1SHerbert Xue    </method>
4110*dc5640d1SHerbert Xue    <doc>
4111*dc5640d1SHerbert Xue    <![CDATA[Factory interface for {@link ImplementationNode}s. Renderer
4112*dc5640d1SHerbert Xue implementations will need to provide an implementation for this.
4113*dc5640d1SHerbert Xue
4114*dc5640d1SHerbert Xue @param <K> The type for node IDs.
4115*dc5640d1SHerbert Xue @param <T> The {@link ImplementationNode} sub-type that this factory
4116*dc5640d1SHerbert Xue     provides.]]>
4117*dc5640d1SHerbert Xue    </doc>
4118*dc5640d1SHerbert Xue  </interface>
4119*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.ImplementationNode.Factory -->
4120*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.InjectorGrapher -->
4121*dc5640d1SHerbert Xue  <class name="InjectorGrapher" extends="java.lang.Object"
4122*dc5640d1SHerbert Xue    abstract="false"
4123*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4124*dc5640d1SHerbert Xue    deprecated="not deprecated">
4125*dc5640d1SHerbert Xue    <constructor name="InjectorGrapher" type="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;, com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.lang.Void&gt;, com.google.inject.grapher.Renderer"
4126*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4127*dc5640d1SHerbert Xue      deprecated="not deprecated">
4128*dc5640d1SHerbert Xue    </constructor>
4129*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.grapher.InjectorGrapher"
4130*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4131*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4132*dc5640d1SHerbert Xue      deprecated="not deprecated">
4133*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4134*dc5640d1SHerbert Xue      <doc>
4135*dc5640d1SHerbert Xue      <![CDATA[Sets the {@link Injector} to graph.]]>
4136*dc5640d1SHerbert Xue      </doc>
4137*dc5640d1SHerbert Xue    </method>
4138*dc5640d1SHerbert Xue    <method name="rootedAt" return="com.google.inject.grapher.InjectorGrapher"
4139*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4140*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4141*dc5640d1SHerbert Xue      deprecated="not deprecated">
4142*dc5640d1SHerbert Xue      <param name="classes" type="java.lang.Class[]"/>
4143*dc5640d1SHerbert Xue      <doc>
4144*dc5640d1SHerbert Xue      <![CDATA[Sets an initial group of {@link Class}es to use as the starting point for
4145*dc5640d1SHerbert Xue the graph. The graph will be of these classes and their transitive
4146*dc5640d1SHerbert Xue dependencies and bindings.]]>
4147*dc5640d1SHerbert Xue      </doc>
4148*dc5640d1SHerbert Xue    </method>
4149*dc5640d1SHerbert Xue    <method name="rootedAt" return="com.google.inject.grapher.InjectorGrapher"
4150*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4151*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4152*dc5640d1SHerbert Xue      deprecated="not deprecated">
4153*dc5640d1SHerbert Xue      <param name="keys" type="com.google.inject.Key[]"/>
4154*dc5640d1SHerbert Xue      <doc>
4155*dc5640d1SHerbert Xue      <![CDATA[Sets an initial group of {@link Key}s to use as the starting point for
4156*dc5640d1SHerbert Xue the graph. The graph will be of these keys and their transitive
4157*dc5640d1SHerbert Xue dependencies and bindings.]]>
4158*dc5640d1SHerbert Xue      </doc>
4159*dc5640d1SHerbert Xue    </method>
4160*dc5640d1SHerbert Xue    <method name="graph"
4161*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4162*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4163*dc5640d1SHerbert Xue      deprecated="not deprecated">
4164*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4165*dc5640d1SHerbert Xue      <doc>
4166*dc5640d1SHerbert Xue      <![CDATA[Renders a graph with the bound {@link Renderer}. The {@link Injector}
4167*dc5640d1SHerbert Xue must have already been specified with {@link #of(Injector)}.]]>
4168*dc5640d1SHerbert Xue      </doc>
4169*dc5640d1SHerbert Xue    </method>
4170*dc5640d1SHerbert Xue    <doc>
4171*dc5640d1SHerbert Xue    <![CDATA[Root class for graphing an {@link Injector}. Bound in {@link GrapherModule}.
4172*dc5640d1SHerbert Xue <p>
4173*dc5640d1SHerbert Xue Use {@link #of(Injector)} to specify the {@link Injector} to use, and
4174*dc5640d1SHerbert Xue {@link graph()} to graph the {@link Injector} using the currently-bound
4175*dc5640d1SHerbert Xue {@link Renderer}.
4176*dc5640d1SHerbert Xue <p>
4177*dc5640d1SHerbert Xue By default, this will graph the entire {@link Injector}. Use
4178*dc5640d1SHerbert Xue {@link #rootedAt(Class...)} or {@link #rootedAt(Key...)} to specify an
4179*dc5640d1SHerbert Xue initial set of {@link Class}es or {@link Key}s to use, and this will graph
4180*dc5640d1SHerbert Xue their transitive bindings and dependencies.
4181*dc5640d1SHerbert Xue
4182*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4183*dc5640d1SHerbert Xue    </doc>
4184*dc5640d1SHerbert Xue  </class>
4185*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.InjectorGrapher -->
4186*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.InterfaceNode -->
4187*dc5640d1SHerbert Xue  <interface name="InterfaceNode"    abstract="true"
4188*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4189*dc5640d1SHerbert Xue    deprecated="not deprecated">
4190*dc5640d1SHerbert Xue    <method name="setKey"
4191*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4192*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4193*dc5640d1SHerbert Xue      deprecated="not deprecated">
4194*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4195*dc5640d1SHerbert Xue    </method>
4196*dc5640d1SHerbert Xue    <method name="setSource"
4197*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4198*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4199*dc5640d1SHerbert Xue      deprecated="not deprecated">
4200*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4201*dc5640d1SHerbert Xue    </method>
4202*dc5640d1SHerbert Xue    <doc>
4203*dc5640d1SHerbert Xue    <![CDATA[Node for an interface class that has been bound to an implementation class
4204*dc5640d1SHerbert Xue or instance. These nodes are basically defined by a {@link Key}.
4205*dc5640d1SHerbert Xue
4206*dc5640d1SHerbert Xue @see BindingEdge
4207*dc5640d1SHerbert Xue
4208*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4209*dc5640d1SHerbert Xue
4210*dc5640d1SHerbert Xue @param <K> The type for node IDs.]]>
4211*dc5640d1SHerbert Xue    </doc>
4212*dc5640d1SHerbert Xue  </interface>
4213*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.InterfaceNode -->
4214*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.InterfaceNode.Factory -->
4215*dc5640d1SHerbert Xue  <interface name="InterfaceNode.Factory"    abstract="true"
4216*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
4217*dc5640d1SHerbert Xue    deprecated="not deprecated">
4218*dc5640d1SHerbert Xue    <method name="newInterfaceNode" return="T extends com.google.inject.grapher.InterfaceNode&lt;K&gt;"
4219*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4220*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4221*dc5640d1SHerbert Xue      deprecated="not deprecated">
4222*dc5640d1SHerbert Xue      <param name="nodeId" type="K"/>
4223*dc5640d1SHerbert Xue      <doc>
4224*dc5640d1SHerbert Xue      <![CDATA[Creates a new {@link InterfaceNode} and adds it to the graph.
4225*dc5640d1SHerbert Xue
4226*dc5640d1SHerbert Xue @param nodeId ID for the node.
4227*dc5640d1SHerbert Xue @return The new {@link InterfaceNode} instance.]]>
4228*dc5640d1SHerbert Xue      </doc>
4229*dc5640d1SHerbert Xue    </method>
4230*dc5640d1SHerbert Xue    <doc>
4231*dc5640d1SHerbert Xue    <![CDATA[Factory interface for {@link InterfaceNode}s. Renderer implementations
4232*dc5640d1SHerbert Xue will need to provide an implementation for this.
4233*dc5640d1SHerbert Xue
4234*dc5640d1SHerbert Xue @param <K> The type for node IDs.
4235*dc5640d1SHerbert Xue @param <T> The {@link InterfaceNode} sub-type that this factory provides.]]>
4236*dc5640d1SHerbert Xue    </doc>
4237*dc5640d1SHerbert Xue  </interface>
4238*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.InterfaceNode.Factory -->
4239*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NameFactory -->
4240*dc5640d1SHerbert Xue  <interface name="NameFactory"    abstract="true"
4241*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4242*dc5640d1SHerbert Xue    deprecated="not deprecated">
4243*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4244*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4245*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4246*dc5640d1SHerbert Xue      deprecated="not deprecated">
4247*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4248*dc5640d1SHerbert Xue    </method>
4249*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4250*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4251*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4252*dc5640d1SHerbert Xue      deprecated="not deprecated">
4253*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4254*dc5640d1SHerbert Xue    </method>
4255*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4256*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4257*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4258*dc5640d1SHerbert Xue      deprecated="not deprecated">
4259*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4260*dc5640d1SHerbert Xue    </method>
4261*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4262*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4263*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4264*dc5640d1SHerbert Xue      deprecated="not deprecated">
4265*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4266*dc5640d1SHerbert Xue    </method>
4267*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4268*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4269*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4270*dc5640d1SHerbert Xue      deprecated="not deprecated">
4271*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4272*dc5640d1SHerbert Xue    </method>
4273*dc5640d1SHerbert Xue    <doc>
4274*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4275*dc5640d1SHerbert Xue display in the graph for the types that come up in {@link Binding}s.
4276*dc5640d1SHerbert Xue
4277*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4278*dc5640d1SHerbert Xue    </doc>
4279*dc5640d1SHerbert Xue  </interface>
4280*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NameFactory -->
4281*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NodeAliasFactory -->
4282*dc5640d1SHerbert Xue  <interface name="NodeAliasFactory"    abstract="true"
4283*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4284*dc5640d1SHerbert Xue    deprecated="not deprecated">
4285*dc5640d1SHerbert Xue    <method name="newAlias"
4286*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4287*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4288*dc5640d1SHerbert Xue      deprecated="not deprecated">
4289*dc5640d1SHerbert Xue      <param name="fromId" type="K"/>
4290*dc5640d1SHerbert Xue      <param name="toId" type="K"/>
4291*dc5640d1SHerbert Xue      <doc>
4292*dc5640d1SHerbert Xue      <![CDATA[Makes edges that would point to {@code fromId} point to
4293*dc5640d1SHerbert Xue {@code toId} instead.]]>
4294*dc5640d1SHerbert Xue      </doc>
4295*dc5640d1SHerbert Xue    </method>
4296*dc5640d1SHerbert Xue    <doc>
4297*dc5640d1SHerbert Xue    <![CDATA[Factory for aliasing one node ID to another. Used when we don't want to
4298*dc5640d1SHerbert Xue render {@link Key}s from {@link Binding}s that are not interesting.
4299*dc5640d1SHerbert Xue
4300*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4301*dc5640d1SHerbert Xue    </doc>
4302*dc5640d1SHerbert Xue  </interface>
4303*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NodeAliasFactory -->
4304*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NodeIdFactory -->
4305*dc5640d1SHerbert Xue  <interface name="NodeIdFactory"    abstract="true"
4306*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4307*dc5640d1SHerbert Xue    deprecated="not deprecated">
4308*dc5640d1SHerbert Xue    <method name="getClassNodeId" return="K"
4309*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4310*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4311*dc5640d1SHerbert Xue      deprecated="not deprecated">
4312*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4313*dc5640d1SHerbert Xue    </method>
4314*dc5640d1SHerbert Xue    <method name="getInstanceNodeId" return="K"
4315*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4316*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4317*dc5640d1SHerbert Xue      deprecated="not deprecated">
4318*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4319*dc5640d1SHerbert Xue    </method>
4320*dc5640d1SHerbert Xue    <doc>
4321*dc5640d1SHerbert Xue    <![CDATA[Factory for abstract identifiers for elements on the graph. Most graph nodes
4322*dc5640d1SHerbert Xue will correspond directly to {@link Key}s, but we do this for additional
4323*dc5640d1SHerbert Xue flexibility and because instances do not have separate {@link Key}s from the
4324*dc5640d1SHerbert Xue interfaces they are bound to.
4325*dc5640d1SHerbert Xue <p>
4326*dc5640d1SHerbert Xue Node IDs are treated as opaque values by {@link GraphingVisitor} and the
4327*dc5640d1SHerbert Xue other classes in this package.
4328*dc5640d1SHerbert Xue
4329*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4330*dc5640d1SHerbert Xue
4331*dc5640d1SHerbert Xue @param <K> The type for node IDs.]]>
4332*dc5640d1SHerbert Xue    </doc>
4333*dc5640d1SHerbert Xue  </interface>
4334*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NodeIdFactory -->
4335*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.Renderer -->
4336*dc5640d1SHerbert Xue  <interface name="Renderer"    abstract="true"
4337*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4338*dc5640d1SHerbert Xue    deprecated="not deprecated">
4339*dc5640d1SHerbert Xue    <method name="render"
4340*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4341*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4342*dc5640d1SHerbert Xue      deprecated="not deprecated">
4343*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4344*dc5640d1SHerbert Xue    </method>
4345*dc5640d1SHerbert Xue    <doc>
4346*dc5640d1SHerbert Xue    <![CDATA[Interface for the service that renders the graph. It is assumed that the
4347*dc5640d1SHerbert Xue implementations for {@link BindingEdge.Factory},
4348*dc5640d1SHerbert Xue {@link ImplementationNode.Factory}, etc. will have direct access to the
4349*dc5640d1SHerbert Xue internals of the {@link Renderer} implementation, so the only external
4350*dc5640d1SHerbert Xue interface needed is the {@link #render()} call that {@link InjectorGrapher}
4351*dc5640d1SHerbert Xue calls when it's done.
4352*dc5640d1SHerbert Xue
4353*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4354*dc5640d1SHerbert Xue    </doc>
4355*dc5640d1SHerbert Xue  </interface>
4356*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.Renderer -->
4357*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4358*dc5640d1SHerbert Xue  <class name="ShortNameFactory" extends="java.lang.Object"
4359*dc5640d1SHerbert Xue    abstract="false"
4360*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4361*dc5640d1SHerbert Xue    deprecated="not deprecated">
4362*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.NameFactory"/>
4363*dc5640d1SHerbert Xue    <constructor name="ShortNameFactory"
4364*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4365*dc5640d1SHerbert Xue      deprecated="not deprecated">
4366*dc5640d1SHerbert Xue    </constructor>
4367*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4368*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4369*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4370*dc5640d1SHerbert Xue      deprecated="not deprecated">
4371*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4372*dc5640d1SHerbert Xue    </method>
4373*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4374*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4375*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4376*dc5640d1SHerbert Xue      deprecated="not deprecated">
4377*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4378*dc5640d1SHerbert Xue    </method>
4379*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4380*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4381*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4382*dc5640d1SHerbert Xue      deprecated="not deprecated">
4383*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4384*dc5640d1SHerbert Xue    </method>
4385*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4386*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4387*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4388*dc5640d1SHerbert Xue      deprecated="not deprecated">
4389*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4390*dc5640d1SHerbert Xue    </method>
4391*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4392*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4393*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4394*dc5640d1SHerbert Xue      deprecated="not deprecated">
4395*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4396*dc5640d1SHerbert Xue      <doc>
4397*dc5640d1SHerbert Xue      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4398*dc5640d1SHerbert Xue a {@link StackTraceElement} for when the binding is made to the instance,
4399*dc5640d1SHerbert Xue or a {@link Method} when a provider method is used.]]>
4400*dc5640d1SHerbert Xue      </doc>
4401*dc5640d1SHerbert Xue    </method>
4402*dc5640d1SHerbert Xue    <method name="getFileString" return="java.lang.String"
4403*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4404*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4405*dc5640d1SHerbert Xue      deprecated="not deprecated">
4406*dc5640d1SHerbert Xue      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4407*dc5640d1SHerbert Xue    </method>
4408*dc5640d1SHerbert Xue    <method name="getMethodString" return="java.lang.String"
4409*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4410*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4411*dc5640d1SHerbert Xue      deprecated="not deprecated">
4412*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
4413*dc5640d1SHerbert Xue    </method>
4414*dc5640d1SHerbert Xue    <doc>
4415*dc5640d1SHerbert Xue    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4416*dc5640d1SHerbert Xue {@link Object#toString()}s and strips package names out of them so that
4417*dc5640d1SHerbert Xue they'll fit on the graph.
4418*dc5640d1SHerbert Xue
4419*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4420*dc5640d1SHerbert Xue    </doc>
4421*dc5640d1SHerbert Xue  </class>
4422*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4423*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.StringNodeIdFactory -->
4424*dc5640d1SHerbert Xue  <class name="StringNodeIdFactory" extends="java.lang.Object"
4425*dc5640d1SHerbert Xue    abstract="false"
4426*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4427*dc5640d1SHerbert Xue    deprecated="not deprecated">
4428*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.NodeIdFactory&lt;java.lang.String&gt;"/>
4429*dc5640d1SHerbert Xue    <constructor name="StringNodeIdFactory"
4430*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4431*dc5640d1SHerbert Xue      deprecated="not deprecated">
4432*dc5640d1SHerbert Xue    </constructor>
4433*dc5640d1SHerbert Xue    <method name="getClassNodeId" return="java.lang.String"
4434*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4435*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4436*dc5640d1SHerbert Xue      deprecated="not deprecated">
4437*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4438*dc5640d1SHerbert Xue    </method>
4439*dc5640d1SHerbert Xue    <method name="getInstanceNodeId" return="java.lang.String"
4440*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4441*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4442*dc5640d1SHerbert Xue      deprecated="not deprecated">
4443*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4444*dc5640d1SHerbert Xue    </method>
4445*dc5640d1SHerbert Xue    <doc>
4446*dc5640d1SHerbert Xue    <![CDATA[{@link IdFactory} implementation that for {@link String} node IDs. The IDs
4447*dc5640d1SHerbert Xue are comprised of letters, numbers and underscores.
4448*dc5640d1SHerbert Xue
4449*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4450*dc5640d1SHerbert Xue    </doc>
4451*dc5640d1SHerbert Xue  </class>
4452*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.StringNodeIdFactory -->
4453*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4454*dc5640d1SHerbert Xue  <class name="TransitiveDependencyVisitor" extends="java.lang.Object"
4455*dc5640d1SHerbert Xue    abstract="false"
4456*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4457*dc5640d1SHerbert Xue    deprecated="not deprecated">
4458*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;"/>
4459*dc5640d1SHerbert Xue    <constructor name="TransitiveDependencyVisitor"
4460*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4461*dc5640d1SHerbert Xue      deprecated="not deprecated">
4462*dc5640d1SHerbert Xue    </constructor>
4463*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4464*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4465*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4466*dc5640d1SHerbert Xue      deprecated="not deprecated">
4467*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4468*dc5640d1SHerbert Xue    </method>
4469*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4470*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4471*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4472*dc5640d1SHerbert Xue      deprecated="not deprecated">
4473*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4474*dc5640d1SHerbert Xue    </method>
4475*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4476*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4477*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4478*dc5640d1SHerbert Xue      deprecated="not deprecated">
4479*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;?&gt;"/>
4480*dc5640d1SHerbert Xue    </method>
4481*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4482*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4483*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4484*dc5640d1SHerbert Xue      deprecated="not deprecated">
4485*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4486*dc5640d1SHerbert Xue    </method>
4487*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4488*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4489*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4490*dc5640d1SHerbert Xue      deprecated="not deprecated">
4491*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4492*dc5640d1SHerbert Xue    </method>
4493*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4494*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4495*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4496*dc5640d1SHerbert Xue      deprecated="not deprecated">
4497*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4498*dc5640d1SHerbert Xue    </method>
4499*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4500*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4501*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4502*dc5640d1SHerbert Xue      deprecated="not deprecated">
4503*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4504*dc5640d1SHerbert Xue    </method>
4505*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4506*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4507*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4508*dc5640d1SHerbert Xue      deprecated="not deprecated">
4509*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4510*dc5640d1SHerbert Xue    </method>
4511*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4512*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4513*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4514*dc5640d1SHerbert Xue      deprecated="not deprecated">
4515*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;?&gt;"/>
4516*dc5640d1SHerbert Xue    </method>
4517*dc5640d1SHerbert Xue    <doc>
4518*dc5640d1SHerbert Xue    <![CDATA[{@link BindingTargetVisitor} that returns a {@link Collection} of the
4519*dc5640d1SHerbert Xue {@link Key}s of each {@link Binding}'s dependencies. Used by
4520*dc5640d1SHerbert Xue {@link InjectorGropher} to walk the dependency graph from a starting set of
4521*dc5640d1SHerbert Xue {@link Binding}s.
4522*dc5640d1SHerbert Xue
4523*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4524*dc5640d1SHerbert Xue    </doc>
4525*dc5640d1SHerbert Xue  </class>
4526*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4527*dc5640d1SHerbert Xue</package>
4528*dc5640d1SHerbert Xue<package name="com.google.inject.grapher.graphviz">
4529*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4530*dc5640d1SHerbert Xue  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4531*dc5640d1SHerbert Xue    abstract="false"
4532*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4533*dc5640d1SHerbert Xue    deprecated="not deprecated">
4534*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4535*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4536*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4537*dc5640d1SHerbert Xue      deprecated="not deprecated">
4538*dc5640d1SHerbert Xue    </method>
4539*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4540*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4541*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4542*dc5640d1SHerbert Xue      deprecated="not deprecated">
4543*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4544*dc5640d1SHerbert Xue    </method>
4545*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4546*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4547*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4548*dc5640d1SHerbert Xue      deprecated="not deprecated">
4549*dc5640d1SHerbert Xue    </method>
4550*dc5640d1SHerbert Xue    <doc>
4551*dc5640d1SHerbert Xue    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4552*dc5640d1SHerbert Xue concatenation to make double arrows and such.
4553*dc5640d1SHerbert Xue <p>
4554*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/arrows.html
4555*dc5640d1SHerbert Xue
4556*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4557*dc5640d1SHerbert Xue    </doc>
4558*dc5640d1SHerbert Xue  </class>
4559*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4560*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.BindingEdgeFactory -->
4561*dc5640d1SHerbert Xue  <class name="BindingEdgeFactory" extends="java.lang.Object"
4562*dc5640d1SHerbert Xue    abstract="false"
4563*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4564*dc5640d1SHerbert Xue    deprecated="not deprecated">
4565*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.BindingEdge.Factory&lt;java.lang.String, com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;&gt;"/>
4566*dc5640d1SHerbert Xue    <constructor name="BindingEdgeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer"
4567*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4568*dc5640d1SHerbert Xue      deprecated="not deprecated">
4569*dc5640d1SHerbert Xue    </constructor>
4570*dc5640d1SHerbert Xue    <method name="newBindingEdge" return="com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;"
4571*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4572*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4573*dc5640d1SHerbert Xue      deprecated="not deprecated">
4574*dc5640d1SHerbert Xue      <param name="fromId" type="java.lang.String"/>
4575*dc5640d1SHerbert Xue      <param name="toId" type="java.lang.String"/>
4576*dc5640d1SHerbert Xue    </method>
4577*dc5640d1SHerbert Xue    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor"
4578*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4579*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4580*dc5640d1SHerbert Xue      deprecated="not deprecated">
4581*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4582*dc5640d1SHerbert Xue    </method>
4583*dc5640d1SHerbert Xue    <doc>
4584*dc5640d1SHerbert Xue    <![CDATA[Graphviz-specific implementation of {@link BindingEdge.Factory}. Uses a
4585*dc5640d1SHerbert Xue {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizEdge}.
4586*dc5640d1SHerbert Xue
4587*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4588*dc5640d1SHerbert Xue    </doc>
4589*dc5640d1SHerbert Xue  </class>
4590*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.BindingEdgeFactory -->
4591*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor -->
4592*dc5640d1SHerbert Xue  <class name="BindingEdgeFactory.GraphvizEdgeAdaptor" extends="java.lang.Object"
4593*dc5640d1SHerbert Xue    abstract="false"
4594*dc5640d1SHerbert Xue    static="false" final="false" visibility="protected"
4595*dc5640d1SHerbert Xue    deprecated="not deprecated">
4596*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;"/>
4597*dc5640d1SHerbert Xue    <constructor name="BindingEdgeFactory.GraphvizEdgeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4598*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4599*dc5640d1SHerbert Xue      deprecated="not deprecated">
4600*dc5640d1SHerbert Xue    </constructor>
4601*dc5640d1SHerbert Xue    <method name="setType"
4602*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4603*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4604*dc5640d1SHerbert Xue      deprecated="not deprecated">
4605*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
4606*dc5640d1SHerbert Xue    </method>
4607*dc5640d1SHerbert Xue    <field name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4608*dc5640d1SHerbert Xue      transient="false" volatile="false"
4609*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
4610*dc5640d1SHerbert Xue      deprecated="not deprecated">
4611*dc5640d1SHerbert Xue    </field>
4612*dc5640d1SHerbert Xue    <doc>
4613*dc5640d1SHerbert Xue    <![CDATA[Adaptor class that converts {@link BindingEdge} methods to display
4614*dc5640d1SHerbert Xue operations on a {@link GraphvizEdge}.]]>
4615*dc5640d1SHerbert Xue    </doc>
4616*dc5640d1SHerbert Xue  </class>
4617*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor -->
4618*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4619*dc5640d1SHerbert Xue  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4620*dc5640d1SHerbert Xue    abstract="false"
4621*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4622*dc5640d1SHerbert Xue    deprecated="not deprecated">
4623*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4624*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4625*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4626*dc5640d1SHerbert Xue      deprecated="not deprecated">
4627*dc5640d1SHerbert Xue    </method>
4628*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4629*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4630*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4631*dc5640d1SHerbert Xue      deprecated="not deprecated">
4632*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4633*dc5640d1SHerbert Xue    </method>
4634*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4635*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4636*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4637*dc5640d1SHerbert Xue      deprecated="not deprecated">
4638*dc5640d1SHerbert Xue    </method>
4639*dc5640d1SHerbert Xue    <doc>
4640*dc5640d1SHerbert Xue    <![CDATA[Enum for the "compass point" values used to control where edge
4641*dc5640d1SHerbert Xue end points appear on the graph.
4642*dc5640d1SHerbert Xue <p>
4643*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4644*dc5640d1SHerbert Xue
4645*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4646*dc5640d1SHerbert Xue    </doc>
4647*dc5640d1SHerbert Xue  </class>
4648*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4649*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.DependencyEdgeFactory -->
4650*dc5640d1SHerbert Xue  <class name="DependencyEdgeFactory" extends="java.lang.Object"
4651*dc5640d1SHerbert Xue    abstract="false"
4652*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4653*dc5640d1SHerbert Xue    deprecated="not deprecated">
4654*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.DependencyEdge.Factory&lt;java.lang.String, com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;&gt;"/>
4655*dc5640d1SHerbert Xue    <constructor name="DependencyEdgeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.graphviz.PortIdFactory"
4656*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4657*dc5640d1SHerbert Xue      deprecated="not deprecated">
4658*dc5640d1SHerbert Xue    </constructor>
4659*dc5640d1SHerbert Xue    <method name="newDependencyEdge" return="com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;"
4660*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4661*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4662*dc5640d1SHerbert Xue      deprecated="not deprecated">
4663*dc5640d1SHerbert Xue      <param name="fromId" type="java.lang.String"/>
4664*dc5640d1SHerbert Xue      <param name="fromPoint" type="com.google.inject.spi.InjectionPoint"/>
4665*dc5640d1SHerbert Xue      <param name="toId" type="java.lang.String"/>
4666*dc5640d1SHerbert Xue    </method>
4667*dc5640d1SHerbert Xue    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor"
4668*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4669*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4670*dc5640d1SHerbert Xue      deprecated="not deprecated">
4671*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4672*dc5640d1SHerbert Xue    </method>
4673*dc5640d1SHerbert Xue    <doc>
4674*dc5640d1SHerbert Xue    <![CDATA[Graphviz-specific implementation of {@link DependencyEdge.Factory}. Uses a
4675*dc5640d1SHerbert Xue {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizEdge}.
4676*dc5640d1SHerbert Xue
4677*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4678*dc5640d1SHerbert Xue    </doc>
4679*dc5640d1SHerbert Xue  </class>
4680*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.DependencyEdgeFactory -->
4681*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor -->
4682*dc5640d1SHerbert Xue  <class name="DependencyEdgeFactory.GraphvizEdgeAdaptor" extends="java.lang.Object"
4683*dc5640d1SHerbert Xue    abstract="false"
4684*dc5640d1SHerbert Xue    static="false" final="false" visibility="protected"
4685*dc5640d1SHerbert Xue    deprecated="not deprecated">
4686*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;"/>
4687*dc5640d1SHerbert Xue    <constructor name="DependencyEdgeFactory.GraphvizEdgeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4688*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4689*dc5640d1SHerbert Xue      deprecated="not deprecated">
4690*dc5640d1SHerbert Xue    </constructor>
4691*dc5640d1SHerbert Xue    <field name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4692*dc5640d1SHerbert Xue      transient="false" volatile="false"
4693*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
4694*dc5640d1SHerbert Xue      deprecated="not deprecated">
4695*dc5640d1SHerbert Xue    </field>
4696*dc5640d1SHerbert Xue    <doc>
4697*dc5640d1SHerbert Xue    <![CDATA[Adaptor class that converts {@link DependencyEdge} methods to display
4698*dc5640d1SHerbert Xue operations on a {@link GraphvizEdge}.]]>
4699*dc5640d1SHerbert Xue    </doc>
4700*dc5640d1SHerbert Xue  </class>
4701*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor -->
4702*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4703*dc5640d1SHerbert Xue  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4704*dc5640d1SHerbert Xue    abstract="false"
4705*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4706*dc5640d1SHerbert Xue    deprecated="not deprecated">
4707*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4709*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4710*dc5640d1SHerbert Xue      deprecated="not deprecated">
4711*dc5640d1SHerbert Xue    </method>
4712*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4713*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4714*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4715*dc5640d1SHerbert Xue      deprecated="not deprecated">
4716*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4717*dc5640d1SHerbert Xue    </method>
4718*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4719*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4720*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4721*dc5640d1SHerbert Xue      deprecated="not deprecated">
4722*dc5640d1SHerbert Xue    </method>
4723*dc5640d1SHerbert Xue    <doc>
4724*dc5640d1SHerbert Xue    <![CDATA[Styles for edges.
4725*dc5640d1SHerbert Xue <p>
4726*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
4727*dc5640d1SHerbert Xue
4728*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4729*dc5640d1SHerbert Xue    </doc>
4730*dc5640d1SHerbert Xue  </class>
4731*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4732*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4733*dc5640d1SHerbert Xue  <class name="GraphvizEdge" extends="java.lang.Object"
4734*dc5640d1SHerbert Xue    abstract="false"
4735*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4736*dc5640d1SHerbert Xue    deprecated="not deprecated">
4737*dc5640d1SHerbert Xue    <constructor name="GraphvizEdge" type="java.lang.String, java.lang.String"
4738*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4739*dc5640d1SHerbert Xue      deprecated="not deprecated">
4740*dc5640d1SHerbert Xue    </constructor>
4741*dc5640d1SHerbert Xue    <method name="getHeadNodeId" return="java.lang.String"
4742*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4743*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4744*dc5640d1SHerbert Xue      deprecated="not deprecated">
4745*dc5640d1SHerbert Xue    </method>
4746*dc5640d1SHerbert Xue    <method name="getHeadPortId" return="java.lang.String"
4747*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4748*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4749*dc5640d1SHerbert Xue      deprecated="not deprecated">
4750*dc5640d1SHerbert Xue    </method>
4751*dc5640d1SHerbert Xue    <method name="setHeadPortId"
4752*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4753*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4754*dc5640d1SHerbert Xue      deprecated="not deprecated">
4755*dc5640d1SHerbert Xue      <param name="headPortId" type="java.lang.String"/>
4756*dc5640d1SHerbert Xue    </method>
4757*dc5640d1SHerbert Xue    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4758*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4759*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4760*dc5640d1SHerbert Xue      deprecated="not deprecated">
4761*dc5640d1SHerbert Xue    </method>
4762*dc5640d1SHerbert Xue    <method name="setHeadCompassPoint"
4763*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4764*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4765*dc5640d1SHerbert Xue      deprecated="not deprecated">
4766*dc5640d1SHerbert Xue      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4767*dc5640d1SHerbert Xue    </method>
4768*dc5640d1SHerbert Xue    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4769*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4770*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4771*dc5640d1SHerbert Xue      deprecated="not deprecated">
4772*dc5640d1SHerbert Xue    </method>
4773*dc5640d1SHerbert Xue    <method name="setArrowHead"
4774*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4775*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4776*dc5640d1SHerbert Xue      deprecated="not deprecated">
4777*dc5640d1SHerbert Xue      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4778*dc5640d1SHerbert Xue    </method>
4779*dc5640d1SHerbert Xue    <method name="getTailNodeId" return="java.lang.String"
4780*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4781*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4782*dc5640d1SHerbert Xue      deprecated="not deprecated">
4783*dc5640d1SHerbert Xue    </method>
4784*dc5640d1SHerbert Xue    <method name="getTailPortId" return="java.lang.String"
4785*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4786*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4787*dc5640d1SHerbert Xue      deprecated="not deprecated">
4788*dc5640d1SHerbert Xue    </method>
4789*dc5640d1SHerbert Xue    <method name="setTailPortId"
4790*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4791*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4792*dc5640d1SHerbert Xue      deprecated="not deprecated">
4793*dc5640d1SHerbert Xue      <param name="tailPortId" type="java.lang.String"/>
4794*dc5640d1SHerbert Xue    </method>
4795*dc5640d1SHerbert Xue    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4796*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4797*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4798*dc5640d1SHerbert Xue      deprecated="not deprecated">
4799*dc5640d1SHerbert Xue    </method>
4800*dc5640d1SHerbert Xue    <method name="setTailCompassPoint"
4801*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4802*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4803*dc5640d1SHerbert Xue      deprecated="not deprecated">
4804*dc5640d1SHerbert Xue      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4805*dc5640d1SHerbert Xue    </method>
4806*dc5640d1SHerbert Xue    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4807*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4808*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4809*dc5640d1SHerbert Xue      deprecated="not deprecated">
4810*dc5640d1SHerbert Xue    </method>
4811*dc5640d1SHerbert Xue    <method name="setArrowTail"
4812*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4813*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4814*dc5640d1SHerbert Xue      deprecated="not deprecated">
4815*dc5640d1SHerbert Xue      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4816*dc5640d1SHerbert Xue    </method>
4817*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4818*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4819*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4820*dc5640d1SHerbert Xue      deprecated="not deprecated">
4821*dc5640d1SHerbert Xue    </method>
4822*dc5640d1SHerbert Xue    <method name="setStyle"
4823*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4824*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4825*dc5640d1SHerbert Xue      deprecated="not deprecated">
4826*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4827*dc5640d1SHerbert Xue    </method>
4828*dc5640d1SHerbert Xue    <doc>
4829*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4830*dc5640d1SHerbert Xue interested in drawing.
4831*dc5640d1SHerbert Xue
4832*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4833*dc5640d1SHerbert Xue    </doc>
4834*dc5640d1SHerbert Xue  </class>
4835*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4836*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
4837*dc5640d1SHerbert Xue  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
4838*dc5640d1SHerbert Xue    abstract="false"
4839*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4840*dc5640d1SHerbert Xue    deprecated="not deprecated">
4841*dc5640d1SHerbert Xue    <constructor name="GraphvizModule"
4842*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4843*dc5640d1SHerbert Xue      deprecated="not deprecated">
4844*dc5640d1SHerbert Xue    </constructor>
4845*dc5640d1SHerbert Xue    <method name="configure"
4846*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4847*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4848*dc5640d1SHerbert Xue      deprecated="not deprecated">
4849*dc5640d1SHerbert Xue    </method>
4850*dc5640d1SHerbert Xue    <doc>
4851*dc5640d1SHerbert Xue    <![CDATA[Module that provides {@link GraphvizRenderer} as the {@link Renderer} and
4852*dc5640d1SHerbert Xue binds the other Graphviz factories.
4853*dc5640d1SHerbert Xue
4854*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4855*dc5640d1SHerbert Xue    </doc>
4856*dc5640d1SHerbert Xue  </class>
4857*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
4858*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
4859*dc5640d1SHerbert Xue  <class name="GraphvizNode" extends="java.lang.Object"
4860*dc5640d1SHerbert Xue    abstract="false"
4861*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4862*dc5640d1SHerbert Xue    deprecated="not deprecated">
4863*dc5640d1SHerbert Xue    <constructor name="GraphvizNode" type="java.lang.String"
4864*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4865*dc5640d1SHerbert Xue      deprecated="not deprecated">
4866*dc5640d1SHerbert Xue    </constructor>
4867*dc5640d1SHerbert Xue    <method name="getNodeId" return="java.lang.String"
4868*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4870*dc5640d1SHerbert Xue      deprecated="not deprecated">
4871*dc5640d1SHerbert Xue    </method>
4872*dc5640d1SHerbert Xue    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
4873*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4874*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4875*dc5640d1SHerbert Xue      deprecated="not deprecated">
4876*dc5640d1SHerbert Xue    </method>
4877*dc5640d1SHerbert Xue    <method name="setShape"
4878*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4879*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4880*dc5640d1SHerbert Xue      deprecated="not deprecated">
4881*dc5640d1SHerbert Xue      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
4882*dc5640d1SHerbert Xue    </method>
4883*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
4884*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4885*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4886*dc5640d1SHerbert Xue      deprecated="not deprecated">
4887*dc5640d1SHerbert Xue    </method>
4888*dc5640d1SHerbert Xue    <method name="setStyle"
4889*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4890*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4891*dc5640d1SHerbert Xue      deprecated="not deprecated">
4892*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
4893*dc5640d1SHerbert Xue    </method>
4894*dc5640d1SHerbert Xue    <method name="getTitle" return="java.lang.String"
4895*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4896*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4897*dc5640d1SHerbert Xue      deprecated="not deprecated">
4898*dc5640d1SHerbert Xue    </method>
4899*dc5640d1SHerbert Xue    <method name="setTitle"
4900*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4901*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4902*dc5640d1SHerbert Xue      deprecated="not deprecated">
4903*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
4904*dc5640d1SHerbert Xue    </method>
4905*dc5640d1SHerbert Xue    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
4906*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4907*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4908*dc5640d1SHerbert Xue      deprecated="not deprecated">
4909*dc5640d1SHerbert Xue    </method>
4910*dc5640d1SHerbert Xue    <method name="addSubtitle"
4911*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4912*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4913*dc5640d1SHerbert Xue      deprecated="not deprecated">
4914*dc5640d1SHerbert Xue      <param name="position" type="int"/>
4915*dc5640d1SHerbert Xue      <param name="subtitle" type="java.lang.String"/>
4916*dc5640d1SHerbert Xue    </method>
4917*dc5640d1SHerbert Xue    <method name="getHeaderTextColor" return="java.lang.String"
4918*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4919*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4920*dc5640d1SHerbert Xue      deprecated="not deprecated">
4921*dc5640d1SHerbert Xue    </method>
4922*dc5640d1SHerbert Xue    <method name="setHeaderTextColor"
4923*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4924*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4925*dc5640d1SHerbert Xue      deprecated="not deprecated">
4926*dc5640d1SHerbert Xue      <param name="headerTextColor" type="java.lang.String"/>
4927*dc5640d1SHerbert Xue    </method>
4928*dc5640d1SHerbert Xue    <method name="getHeaderBackgroundColor" return="java.lang.String"
4929*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4930*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4931*dc5640d1SHerbert Xue      deprecated="not deprecated">
4932*dc5640d1SHerbert Xue    </method>
4933*dc5640d1SHerbert Xue    <method name="setHeaderBackgroundColor"
4934*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4935*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4936*dc5640d1SHerbert Xue      deprecated="not deprecated">
4937*dc5640d1SHerbert Xue      <param name="headerBackgroundColor" type="java.lang.String"/>
4938*dc5640d1SHerbert Xue    </method>
4939*dc5640d1SHerbert Xue    <method name="addField"
4940*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4941*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4942*dc5640d1SHerbert Xue      deprecated="not deprecated">
4943*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
4944*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
4945*dc5640d1SHerbert Xue    </method>
4946*dc5640d1SHerbert Xue    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
4947*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4948*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4949*dc5640d1SHerbert Xue      deprecated="not deprecated">
4950*dc5640d1SHerbert Xue    </method>
4951*dc5640d1SHerbert Xue    <doc>
4952*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
4953*dc5640d1SHerbert Xue interested in drawing.
4954*dc5640d1SHerbert Xue
4955*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4956*dc5640d1SHerbert Xue    </doc>
4957*dc5640d1SHerbert Xue  </class>
4958*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
4959*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizRenderer -->
4960*dc5640d1SHerbert Xue  <class name="GraphvizRenderer" extends="java.lang.Object"
4961*dc5640d1SHerbert Xue    abstract="false"
4962*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4963*dc5640d1SHerbert Xue    deprecated="not deprecated">
4964*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.Renderer"/>
4965*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.NodeAliasFactory&lt;java.lang.String&gt;"/>
4966*dc5640d1SHerbert Xue    <constructor name="GraphvizRenderer"
4967*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4968*dc5640d1SHerbert Xue      deprecated="not deprecated">
4969*dc5640d1SHerbert Xue    </constructor>
4970*dc5640d1SHerbert Xue    <method name="setOut" return="com.google.inject.grapher.graphviz.GraphvizRenderer"
4971*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4972*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4973*dc5640d1SHerbert Xue      deprecated="not deprecated">
4974*dc5640d1SHerbert Xue      <param name="out" type="java.io.PrintWriter"/>
4975*dc5640d1SHerbert Xue    </method>
4976*dc5640d1SHerbert Xue    <method name="setRankdir" return="com.google.inject.grapher.graphviz.GraphvizRenderer"
4977*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4978*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4979*dc5640d1SHerbert Xue      deprecated="not deprecated">
4980*dc5640d1SHerbert Xue      <param name="rankdir" type="java.lang.String"/>
4981*dc5640d1SHerbert Xue    </method>
4982*dc5640d1SHerbert Xue    <method name="addNode"
4983*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4984*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4985*dc5640d1SHerbert Xue      deprecated="not deprecated">
4986*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
4987*dc5640d1SHerbert Xue    </method>
4988*dc5640d1SHerbert Xue    <method name="addEdge"
4989*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4990*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4991*dc5640d1SHerbert Xue      deprecated="not deprecated">
4992*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4993*dc5640d1SHerbert Xue    </method>
4994*dc5640d1SHerbert Xue    <method name="newAlias"
4995*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4996*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4997*dc5640d1SHerbert Xue      deprecated="not deprecated">
4998*dc5640d1SHerbert Xue      <param name="fromId" type="java.lang.String"/>
4999*dc5640d1SHerbert Xue      <param name="toId" type="java.lang.String"/>
5000*dc5640d1SHerbert Xue    </method>
5001*dc5640d1SHerbert Xue    <method name="resolveAlias" return="java.lang.String"
5002*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5003*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5004*dc5640d1SHerbert Xue      deprecated="not deprecated">
5005*dc5640d1SHerbert Xue      <param name="id" type="java.lang.String"/>
5006*dc5640d1SHerbert Xue    </method>
5007*dc5640d1SHerbert Xue    <method name="render"
5008*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5009*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5010*dc5640d1SHerbert Xue      deprecated="not deprecated">
5011*dc5640d1SHerbert Xue    </method>
5012*dc5640d1SHerbert Xue    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5013*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5014*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5015*dc5640d1SHerbert Xue      deprecated="not deprecated">
5016*dc5640d1SHerbert Xue    </method>
5017*dc5640d1SHerbert Xue    <method name="start"
5018*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5019*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5020*dc5640d1SHerbert Xue      deprecated="not deprecated">
5021*dc5640d1SHerbert Xue    </method>
5022*dc5640d1SHerbert Xue    <method name="finish"
5023*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5024*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5025*dc5640d1SHerbert Xue      deprecated="not deprecated">
5026*dc5640d1SHerbert Xue    </method>
5027*dc5640d1SHerbert Xue    <method name="renderNode"
5028*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5029*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5030*dc5640d1SHerbert Xue      deprecated="not deprecated">
5031*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5032*dc5640d1SHerbert Xue    </method>
5033*dc5640d1SHerbert Xue    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5034*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5035*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5036*dc5640d1SHerbert Xue      deprecated="not deprecated">
5037*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5038*dc5640d1SHerbert Xue    </method>
5039*dc5640d1SHerbert Xue    <method name="getNodeLabel" return="java.lang.String"
5040*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5041*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5042*dc5640d1SHerbert Xue      deprecated="not deprecated">
5043*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5044*dc5640d1SHerbert Xue      <doc>
5045*dc5640d1SHerbert Xue      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5046*dc5640d1SHerbert Xue table with a heading at the top and (in the case of
5047*dc5640d1SHerbert Xue {@link ImplementationNode}s) rows for each of the member fields.]]>
5048*dc5640d1SHerbert Xue      </doc>
5049*dc5640d1SHerbert Xue    </method>
5050*dc5640d1SHerbert Xue    <method name="renderEdge"
5051*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5052*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5053*dc5640d1SHerbert Xue      deprecated="not deprecated">
5054*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5055*dc5640d1SHerbert Xue    </method>
5056*dc5640d1SHerbert Xue    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5058*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5059*dc5640d1SHerbert Xue      deprecated="not deprecated">
5060*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5061*dc5640d1SHerbert Xue    </method>
5062*dc5640d1SHerbert Xue    <method name="getArrowString" return="java.lang.String"
5063*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5064*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5065*dc5640d1SHerbert Xue      deprecated="not deprecated">
5066*dc5640d1SHerbert Xue      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5067*dc5640d1SHerbert Xue      <doc>
5068*dc5640d1SHerbert Xue      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5069*dc5640d1SHerbert Xue represents combining them. With Graphviz, that just means concatenating
5070*dc5640d1SHerbert Xue them.]]>
5071*dc5640d1SHerbert Xue      </doc>
5072*dc5640d1SHerbert Xue    </method>
5073*dc5640d1SHerbert Xue    <method name="getEdgeEndPoint" return="java.lang.String"
5074*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5075*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5076*dc5640d1SHerbert Xue      deprecated="not deprecated">
5077*dc5640d1SHerbert Xue      <param name="nodeId" type="java.lang.String"/>
5078*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
5079*dc5640d1SHerbert Xue      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5080*dc5640d1SHerbert Xue    </method>
5081*dc5640d1SHerbert Xue    <method name="htmlEscape" return="java.lang.String"
5082*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5083*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5084*dc5640d1SHerbert Xue      deprecated="not deprecated">
5085*dc5640d1SHerbert Xue      <param name="str" type="java.lang.String"/>
5086*dc5640d1SHerbert Xue    </method>
5087*dc5640d1SHerbert Xue    <doc>
5088*dc5640d1SHerbert Xue    <![CDATA[{@link Renderer} implementation that writes out a Graphviz DOT file of the
5089*dc5640d1SHerbert Xue graph. Bound in {@link GraphvizModule}.
5090*dc5640d1SHerbert Xue <p>
5091*dc5640d1SHerbert Xue Specify the {@link PrintWriter} to output to with
5092*dc5640d1SHerbert Xue {@link #setOut(PrintWriter)}.
5093*dc5640d1SHerbert Xue
5094*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5095*dc5640d1SHerbert Xue    </doc>
5096*dc5640d1SHerbert Xue  </class>
5097*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizRenderer -->
5098*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.ImplementationNodeFactory -->
5099*dc5640d1SHerbert Xue  <class name="ImplementationNodeFactory" extends="java.lang.Object"
5100*dc5640d1SHerbert Xue    abstract="false"
5101*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5102*dc5640d1SHerbert Xue    deprecated="not deprecated">
5103*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.ImplementationNode.Factory&lt;java.lang.String, com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;&gt;"/>
5104*dc5640d1SHerbert Xue    <constructor name="ImplementationNodeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.NameFactory, com.google.inject.grapher.graphviz.PortIdFactory"
5105*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5106*dc5640d1SHerbert Xue      deprecated="not deprecated">
5107*dc5640d1SHerbert Xue    </constructor>
5108*dc5640d1SHerbert Xue    <method name="newImplementationNode" return="com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;"
5109*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5110*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5111*dc5640d1SHerbert Xue      deprecated="not deprecated">
5112*dc5640d1SHerbert Xue      <param name="nodeId" type="java.lang.String"/>
5113*dc5640d1SHerbert Xue    </method>
5114*dc5640d1SHerbert Xue    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor"
5115*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5116*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5117*dc5640d1SHerbert Xue      deprecated="not deprecated">
5118*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5119*dc5640d1SHerbert Xue    </method>
5120*dc5640d1SHerbert Xue    <doc>
5121*dc5640d1SHerbert Xue    <![CDATA[Graphviz-specific implementation of {@link ImplementationNode.Factory}. Uses
5122*dc5640d1SHerbert Xue a {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizNode}.
5123*dc5640d1SHerbert Xue
5124*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5125*dc5640d1SHerbert Xue    </doc>
5126*dc5640d1SHerbert Xue  </class>
5127*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.ImplementationNodeFactory -->
5128*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor -->
5129*dc5640d1SHerbert Xue  <class name="ImplementationNodeFactory.GraphvizNodeAdaptor" extends="java.lang.Object"
5130*dc5640d1SHerbert Xue    abstract="false"
5131*dc5640d1SHerbert Xue    static="false" final="false" visibility="protected"
5132*dc5640d1SHerbert Xue    deprecated="not deprecated">
5133*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;"/>
5134*dc5640d1SHerbert Xue    <constructor name="ImplementationNodeFactory.GraphvizNodeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizNode"
5135*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5136*dc5640d1SHerbert Xue      deprecated="not deprecated">
5137*dc5640d1SHerbert Xue    </constructor>
5138*dc5640d1SHerbert Xue    <method name="setClassKey"
5139*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5140*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5141*dc5640d1SHerbert Xue      deprecated="not deprecated">
5142*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
5143*dc5640d1SHerbert Xue    </method>
5144*dc5640d1SHerbert Xue    <method name="setInstance"
5145*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5146*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5147*dc5640d1SHerbert Xue      deprecated="not deprecated">
5148*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
5149*dc5640d1SHerbert Xue    </method>
5150*dc5640d1SHerbert Xue    <method name="setSource"
5151*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5152*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5153*dc5640d1SHerbert Xue      deprecated="not deprecated">
5154*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
5155*dc5640d1SHerbert Xue    </method>
5156*dc5640d1SHerbert Xue    <method name="addMember"
5157*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5158*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5159*dc5640d1SHerbert Xue      deprecated="not deprecated">
5160*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5161*dc5640d1SHerbert Xue    </method>
5162*dc5640d1SHerbert Xue    <field name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"
5163*dc5640d1SHerbert Xue      transient="false" volatile="false"
5164*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
5165*dc5640d1SHerbert Xue      deprecated="not deprecated">
5166*dc5640d1SHerbert Xue    </field>
5167*dc5640d1SHerbert Xue    <doc>
5168*dc5640d1SHerbert Xue    <![CDATA[Adaptor class that converts {@link ImplementationNode} methods to display
5169*dc5640d1SHerbert Xue operations on a {@link GraphvizNode}.]]>
5170*dc5640d1SHerbert Xue    </doc>
5171*dc5640d1SHerbert Xue  </class>
5172*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor -->
5173*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.InterfaceNodeFactory -->
5174*dc5640d1SHerbert Xue  <class name="InterfaceNodeFactory" extends="java.lang.Object"
5175*dc5640d1SHerbert Xue    abstract="false"
5176*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5177*dc5640d1SHerbert Xue    deprecated="not deprecated">
5178*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.InterfaceNode.Factory&lt;java.lang.String, com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;&gt;"/>
5179*dc5640d1SHerbert Xue    <constructor name="InterfaceNodeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.NameFactory"
5180*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5181*dc5640d1SHerbert Xue      deprecated="not deprecated">
5182*dc5640d1SHerbert Xue    </constructor>
5183*dc5640d1SHerbert Xue    <method name="newInterfaceNode" return="com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;"
5184*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5185*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5186*dc5640d1SHerbert Xue      deprecated="not deprecated">
5187*dc5640d1SHerbert Xue      <param name="nodeId" type="java.lang.String"/>
5188*dc5640d1SHerbert Xue    </method>
5189*dc5640d1SHerbert Xue    <doc>
5190*dc5640d1SHerbert Xue    <![CDATA[Graphviz-specific implementation of {@link InterfaceNode.Factory}. Uses
5191*dc5640d1SHerbert Xue a {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizNode}.
5192*dc5640d1SHerbert Xue
5193*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5194*dc5640d1SHerbert Xue    </doc>
5195*dc5640d1SHerbert Xue  </class>
5196*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.InterfaceNodeFactory -->
5197*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.InterfaceNodeFactory.GraphvizNodeAdaptor -->
5198*dc5640d1SHerbert Xue  <class name="InterfaceNodeFactory.GraphvizNodeAdaptor" extends="java.lang.Object"
5199*dc5640d1SHerbert Xue    abstract="false"
5200*dc5640d1SHerbert Xue    static="false" final="false" visibility="protected"
5201*dc5640d1SHerbert Xue    deprecated="not deprecated">
5202*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;"/>
5203*dc5640d1SHerbert Xue    <constructor name="InterfaceNodeFactory.GraphvizNodeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizNode"
5204*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5205*dc5640d1SHerbert Xue      deprecated="not deprecated">
5206*dc5640d1SHerbert Xue    </constructor>
5207*dc5640d1SHerbert Xue    <method name="setKey"
5208*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5209*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5210*dc5640d1SHerbert Xue      deprecated="not deprecated">
5211*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
5212*dc5640d1SHerbert Xue    </method>
5213*dc5640d1SHerbert Xue    <method name="setSource"
5214*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5215*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5216*dc5640d1SHerbert Xue      deprecated="not deprecated">
5217*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
5218*dc5640d1SHerbert Xue    </method>
5219*dc5640d1SHerbert Xue    <field name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"
5220*dc5640d1SHerbert Xue      transient="false" volatile="false"
5221*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
5222*dc5640d1SHerbert Xue      deprecated="not deprecated">
5223*dc5640d1SHerbert Xue    </field>
5224*dc5640d1SHerbert Xue    <doc>
5225*dc5640d1SHerbert Xue    <![CDATA[Adaptor class that converts {@link InterfaceNode} methods to display
5226*dc5640d1SHerbert Xue operations on a {@link GraphvizNode}.]]>
5227*dc5640d1SHerbert Xue    </doc>
5228*dc5640d1SHerbert Xue  </class>
5229*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.InterfaceNodeFactory.GraphvizNodeAdaptor -->
5230*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5231*dc5640d1SHerbert Xue  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5232*dc5640d1SHerbert Xue    abstract="false"
5233*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5234*dc5640d1SHerbert Xue    deprecated="not deprecated">
5235*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5236*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5237*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5238*dc5640d1SHerbert Xue      deprecated="not deprecated">
5239*dc5640d1SHerbert Xue    </method>
5240*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5241*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5242*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5243*dc5640d1SHerbert Xue      deprecated="not deprecated">
5244*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5245*dc5640d1SHerbert Xue    </method>
5246*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5247*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5248*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5249*dc5640d1SHerbert Xue      deprecated="not deprecated">
5250*dc5640d1SHerbert Xue    </method>
5251*dc5640d1SHerbert Xue    <doc>
5252*dc5640d1SHerbert Xue    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5253*dc5640d1SHerbert Xue <p>
5254*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/shapes.html
5255*dc5640d1SHerbert Xue
5256*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5257*dc5640d1SHerbert Xue    </doc>
5258*dc5640d1SHerbert Xue  </class>
5259*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5260*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5261*dc5640d1SHerbert Xue  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5262*dc5640d1SHerbert Xue    abstract="false"
5263*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5264*dc5640d1SHerbert Xue    deprecated="not deprecated">
5265*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5266*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5267*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5268*dc5640d1SHerbert Xue      deprecated="not deprecated">
5269*dc5640d1SHerbert Xue    </method>
5270*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5271*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5272*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5273*dc5640d1SHerbert Xue      deprecated="not deprecated">
5274*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5275*dc5640d1SHerbert Xue    </method>
5276*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5277*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5278*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5279*dc5640d1SHerbert Xue      deprecated="not deprecated">
5280*dc5640d1SHerbert Xue    </method>
5281*dc5640d1SHerbert Xue    <doc>
5282*dc5640d1SHerbert Xue    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5283*dc5640d1SHerbert Xue <p>
5284*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
5285*dc5640d1SHerbert Xue
5286*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5287*dc5640d1SHerbert Xue    </doc>
5288*dc5640d1SHerbert Xue  </class>
5289*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5290*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5291*dc5640d1SHerbert Xue  <interface name="PortIdFactory"    abstract="true"
5292*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5293*dc5640d1SHerbert Xue    deprecated="not deprecated">
5294*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5295*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5296*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5297*dc5640d1SHerbert Xue      deprecated="not deprecated">
5298*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5299*dc5640d1SHerbert Xue    </method>
5300*dc5640d1SHerbert Xue    <doc>
5301*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5302*dc5640d1SHerbert Xue rows in {@link ImplementationNode}-displaying {@link GraphvizNode}s.
5303*dc5640d1SHerbert Xue Implemented by {@link StringNodeIdFactory}.
5304*dc5640d1SHerbert Xue
5305*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5306*dc5640d1SHerbert Xue    </doc>
5307*dc5640d1SHerbert Xue  </interface>
5308*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5309*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5310*dc5640d1SHerbert Xue  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5311*dc5640d1SHerbert Xue    abstract="false"
5312*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5313*dc5640d1SHerbert Xue    deprecated="not deprecated">
5314*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5315*dc5640d1SHerbert Xue    <constructor name="PortIdFactoryImpl"
5316*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5317*dc5640d1SHerbert Xue      deprecated="not deprecated">
5318*dc5640d1SHerbert Xue    </constructor>
5319*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5320*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5321*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5322*dc5640d1SHerbert Xue      deprecated="not deprecated">
5323*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5324*dc5640d1SHerbert Xue    </method>
5325*dc5640d1SHerbert Xue    <doc>
5326*dc5640d1SHerbert Xue    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5327*dc5640d1SHerbert Xue
5328*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5329*dc5640d1SHerbert Xue    </doc>
5330*dc5640d1SHerbert Xue  </class>
5331*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5332*dc5640d1SHerbert Xue</package>
5333*dc5640d1SHerbert Xue<package name="com.google.inject.jndi">
5334*dc5640d1SHerbert Xue  <!-- start class com.google.inject.jndi.JndiIntegration -->
5335*dc5640d1SHerbert Xue  <class name="JndiIntegration" extends="java.lang.Object"
5336*dc5640d1SHerbert Xue    abstract="false"
5337*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5338*dc5640d1SHerbert Xue    deprecated="not deprecated">
5339*dc5640d1SHerbert Xue    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5340*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5341*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5342*dc5640d1SHerbert Xue      deprecated="not deprecated">
5343*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5344*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5345*dc5640d1SHerbert Xue      <doc>
5346*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5347*dc5640d1SHerbert Xue Example usage:
5348*dc5640d1SHerbert Xue
5349*dc5640d1SHerbert Xue <pre>
5350*dc5640d1SHerbert Xue bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5351*dc5640d1SHerbert Xue </pre>]]>
5352*dc5640d1SHerbert Xue      </doc>
5353*dc5640d1SHerbert Xue    </method>
5354*dc5640d1SHerbert Xue    <doc>
5355*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5356*dc5640d1SHerbert Xue {@link javax.naming.Context}.
5357*dc5640d1SHerbert Xue
5358*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5359*dc5640d1SHerbert Xue    </doc>
5360*dc5640d1SHerbert Xue  </class>
5361*dc5640d1SHerbert Xue  <!-- end class com.google.inject.jndi.JndiIntegration -->
5362*dc5640d1SHerbert Xue</package>
5363*dc5640d1SHerbert Xue<package name="com.google.inject.matcher">
5364*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5365*dc5640d1SHerbert Xue  <class name="AbstractMatcher" extends="java.lang.Object"
5366*dc5640d1SHerbert Xue    abstract="true"
5367*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5368*dc5640d1SHerbert Xue    deprecated="not deprecated">
5369*dc5640d1SHerbert Xue    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5370*dc5640d1SHerbert Xue    <constructor name="AbstractMatcher"
5371*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5372*dc5640d1SHerbert Xue      deprecated="not deprecated">
5373*dc5640d1SHerbert Xue    </constructor>
5374*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5375*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5376*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5377*dc5640d1SHerbert Xue      deprecated="not deprecated">
5378*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5379*dc5640d1SHerbert Xue    </method>
5380*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5381*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5382*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5383*dc5640d1SHerbert Xue      deprecated="not deprecated">
5384*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5385*dc5640d1SHerbert Xue    </method>
5386*dc5640d1SHerbert Xue    <doc>
5387*dc5640d1SHerbert Xue    <![CDATA[Implements {@code and()} and {@code or()}.
5388*dc5640d1SHerbert Xue
5389*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5390*dc5640d1SHerbert Xue    </doc>
5391*dc5640d1SHerbert Xue  </class>
5392*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5393*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.matcher.Matcher -->
5394*dc5640d1SHerbert Xue  <interface name="Matcher"    abstract="true"
5395*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5396*dc5640d1SHerbert Xue    deprecated="not deprecated">
5397*dc5640d1SHerbert Xue    <method name="matches" return="boolean"
5398*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5399*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5400*dc5640d1SHerbert Xue      deprecated="not deprecated">
5401*dc5640d1SHerbert Xue      <param name="t" type="T"/>
5402*dc5640d1SHerbert Xue      <doc>
5403*dc5640d1SHerbert Xue      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5404*dc5640d1SHerbert Xue      </doc>
5405*dc5640d1SHerbert Xue    </method>
5406*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5407*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5408*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5409*dc5640d1SHerbert Xue      deprecated="not deprecated">
5410*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5411*dc5640d1SHerbert Xue      <doc>
5412*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5413*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5414*dc5640d1SHerbert Xue      </doc>
5415*dc5640d1SHerbert Xue    </method>
5416*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5417*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5418*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5419*dc5640d1SHerbert Xue      deprecated="not deprecated">
5420*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5421*dc5640d1SHerbert Xue      <doc>
5422*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5423*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5424*dc5640d1SHerbert Xue      </doc>
5425*dc5640d1SHerbert Xue    </method>
5426*dc5640d1SHerbert Xue    <doc>
5427*dc5640d1SHerbert Xue    <![CDATA[Returns {@code true} or {@code false} for a given input.
5428*dc5640d1SHerbert Xue
5429*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5430*dc5640d1SHerbert Xue    </doc>
5431*dc5640d1SHerbert Xue  </interface>
5432*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.matcher.Matcher -->
5433*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.Matchers -->
5434*dc5640d1SHerbert Xue  <class name="Matchers" extends="java.lang.Object"
5435*dc5640d1SHerbert Xue    abstract="false"
5436*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5437*dc5640d1SHerbert Xue    deprecated="not deprecated">
5438*dc5640d1SHerbert Xue    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5439*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5440*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5441*dc5640d1SHerbert Xue      deprecated="not deprecated">
5442*dc5640d1SHerbert Xue      <doc>
5443*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches any input.]]>
5444*dc5640d1SHerbert Xue      </doc>
5445*dc5640d1SHerbert Xue    </method>
5446*dc5640d1SHerbert Xue    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5447*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5448*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5449*dc5640d1SHerbert Xue      deprecated="not deprecated">
5450*dc5640d1SHerbert Xue      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5451*dc5640d1SHerbert Xue      <doc>
5452*dc5640d1SHerbert Xue      <![CDATA[Inverts the given matcher.]]>
5453*dc5640d1SHerbert Xue      </doc>
5454*dc5640d1SHerbert Xue    </method>
5455*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5456*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5457*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5458*dc5640d1SHerbert Xue      deprecated="not deprecated">
5459*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5460*dc5640d1SHerbert Xue      <doc>
5461*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5462*dc5640d1SHerbert Xue with a given annotation.]]>
5463*dc5640d1SHerbert Xue      </doc>
5464*dc5640d1SHerbert Xue    </method>
5465*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5466*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5467*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5468*dc5640d1SHerbert Xue      deprecated="not deprecated">
5469*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5470*dc5640d1SHerbert Xue      <doc>
5471*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5472*dc5640d1SHerbert Xue with a given annotation.]]>
5473*dc5640d1SHerbert Xue      </doc>
5474*dc5640d1SHerbert Xue    </method>
5475*dc5640d1SHerbert Xue    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5476*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5477*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5478*dc5640d1SHerbert Xue      deprecated="not deprecated">
5479*dc5640d1SHerbert Xue      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5480*dc5640d1SHerbert Xue      <doc>
5481*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5482*dc5640d1SHerbert Xue the given type).]]>
5483*dc5640d1SHerbert Xue      </doc>
5484*dc5640d1SHerbert Xue    </method>
5485*dc5640d1SHerbert Xue    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5486*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5487*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5488*dc5640d1SHerbert Xue      deprecated="not deprecated">
5489*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5490*dc5640d1SHerbert Xue      <doc>
5491*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5492*dc5640d1SHerbert Xue      </doc>
5493*dc5640d1SHerbert Xue    </method>
5494*dc5640d1SHerbert Xue    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5495*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5496*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5497*dc5640d1SHerbert Xue      deprecated="not deprecated">
5498*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5499*dc5640d1SHerbert Xue      <doc>
5500*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches only the given object.]]>
5501*dc5640d1SHerbert Xue      </doc>
5502*dc5640d1SHerbert Xue    </method>
5503*dc5640d1SHerbert Xue    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5504*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5505*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5506*dc5640d1SHerbert Xue      deprecated="not deprecated">
5507*dc5640d1SHerbert Xue      <param name="targetPackage" type="java.lang.Package"/>
5508*dc5640d1SHerbert Xue      <doc>
5509*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5510*dc5640d1SHerbert Xue classloader, so classes with the same package name may not have the same package at runtime.]]>
5511*dc5640d1SHerbert Xue      </doc>
5512*dc5640d1SHerbert Xue    </method>
5513*dc5640d1SHerbert Xue    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5514*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5515*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5516*dc5640d1SHerbert Xue      deprecated="not deprecated">
5517*dc5640d1SHerbert Xue      <param name="targetPackageName" type="java.lang.String"/>
5518*dc5640d1SHerbert Xue      <doc>
5519*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5520*dc5640d1SHerbert Xue {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5521*dc5640d1SHerbert Xue
5522*dc5640d1SHerbert Xue @since 2.0]]>
5523*dc5640d1SHerbert Xue      </doc>
5524*dc5640d1SHerbert Xue    </method>
5525*dc5640d1SHerbert Xue    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5526*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5527*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5528*dc5640d1SHerbert Xue      deprecated="not deprecated">
5529*dc5640d1SHerbert Xue      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5530*dc5640d1SHerbert Xue      <doc>
5531*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5532*dc5640d1SHerbert Xue      </doc>
5533*dc5640d1SHerbert Xue    </method>
5534*dc5640d1SHerbert Xue    <doc>
5535*dc5640d1SHerbert Xue    <![CDATA[Matcher implementations. Supports matching classes and methods.
5536*dc5640d1SHerbert Xue
5537*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5538*dc5640d1SHerbert Xue    </doc>
5539*dc5640d1SHerbert Xue  </class>
5540*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.Matchers -->
5541*dc5640d1SHerbert Xue</package>
5542*dc5640d1SHerbert Xue<package name="com.google.inject.multibindings">
5543*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MapBinder -->
5544*dc5640d1SHerbert Xue  <class name="MapBinder" extends="java.lang.Object"
5545*dc5640d1SHerbert Xue    abstract="true"
5546*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5547*dc5640d1SHerbert Xue    deprecated="not deprecated">
5548*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5549*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5550*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5551*dc5640d1SHerbert Xue      deprecated="not deprecated">
5552*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5553*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5554*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5555*dc5640d1SHerbert Xue      <doc>
5556*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5557*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5558*dc5640d1SHerbert Xue      </doc>
5559*dc5640d1SHerbert Xue    </method>
5560*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5561*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5562*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5563*dc5640d1SHerbert Xue      deprecated="not deprecated">
5564*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5565*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5566*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5567*dc5640d1SHerbert Xue      <doc>
5568*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5569*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5570*dc5640d1SHerbert Xue      </doc>
5571*dc5640d1SHerbert Xue    </method>
5572*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5573*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5574*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5575*dc5640d1SHerbert Xue      deprecated="not deprecated">
5576*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5577*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5578*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5579*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5580*dc5640d1SHerbert Xue      <doc>
5581*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5582*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5583*dc5640d1SHerbert Xue      </doc>
5584*dc5640d1SHerbert Xue    </method>
5585*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5586*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5587*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5588*dc5640d1SHerbert Xue      deprecated="not deprecated">
5589*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5590*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5591*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5592*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5593*dc5640d1SHerbert Xue      <doc>
5594*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5595*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5596*dc5640d1SHerbert Xue      </doc>
5597*dc5640d1SHerbert Xue    </method>
5598*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5599*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5600*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5601*dc5640d1SHerbert Xue      deprecated="not deprecated">
5602*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5603*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5604*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5605*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5606*dc5640d1SHerbert Xue      <doc>
5607*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5608*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5609*dc5640d1SHerbert Xue      </doc>
5610*dc5640d1SHerbert Xue    </method>
5611*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5612*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5613*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5614*dc5640d1SHerbert Xue      deprecated="not deprecated">
5615*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5616*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5617*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5618*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5619*dc5640d1SHerbert Xue      <doc>
5620*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5621*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5622*dc5640d1SHerbert Xue      </doc>
5623*dc5640d1SHerbert Xue    </method>
5624*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5625*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5626*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5627*dc5640d1SHerbert Xue      deprecated="not deprecated">
5628*dc5640d1SHerbert Xue      <doc>
5629*dc5640d1SHerbert Xue      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5630*dc5640d1SHerbert Xue <p>When multiple equal keys are bound, the value that gets included in the map is
5631*dc5640d1SHerbert Xue arbitrary.
5632*dc5640d1SHerbert Xue <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5633*dc5640d1SHerbert Xue maps that are normally bound, a {@code Map<K, Set<V>>} and
5634*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5635*dc5640d1SHerbert Xue all values bound to each key.
5636*dc5640d1SHerbert Xue <p>
5637*dc5640d1SHerbert Xue When multiple modules contribute elements to the map, this configuration
5638*dc5640d1SHerbert Xue option impacts all of them.
5639*dc5640d1SHerbert Xue
5640*dc5640d1SHerbert Xue @return this map binder
5641*dc5640d1SHerbert Xue @since 3.0]]>
5642*dc5640d1SHerbert Xue      </doc>
5643*dc5640d1SHerbert Xue    </method>
5644*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5645*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5646*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5647*dc5640d1SHerbert Xue      deprecated="not deprecated">
5648*dc5640d1SHerbert Xue      <param name="key" type="K"/>
5649*dc5640d1SHerbert Xue      <doc>
5650*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5651*dc5640d1SHerbert Xue key must be distinct (and non-null). Bound providers will be evaluated each
5652*dc5640d1SHerbert Xue time the map is injected.
5653*dc5640d1SHerbert Xue
5654*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
5655*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
5656*dc5640d1SHerbert Xue
5657*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
5658*dc5640d1SHerbert Xue to specify a binding scope.]]>
5659*dc5640d1SHerbert Xue      </doc>
5660*dc5640d1SHerbert Xue    </method>
5661*dc5640d1SHerbert Xue    <doc>
5662*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5663*dc5640d1SHerbert Xue a complete map. MapBinder is intended for use in your application's module:
5664*dc5640d1SHerbert Xue <pre><code>
5665*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
5666*dc5640d1SHerbert Xue   protected void configure() {
5667*dc5640d1SHerbert Xue     MapBinder&lt;String, Snack&gt; mapbinder
5668*dc5640d1SHerbert Xue         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5669*dc5640d1SHerbert Xue     mapbinder.addBinding("twix").toInstance(new Twix());
5670*dc5640d1SHerbert Xue     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5671*dc5640d1SHerbert Xue     mapbinder.addBinding("skittles").to(Skittles.class);
5672*dc5640d1SHerbert Xue   }
5673*dc5640d1SHerbert Xue }</code></pre>
5674*dc5640d1SHerbert Xue
5675*dc5640d1SHerbert Xue <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5676*dc5640d1SHerbert Xue injected:
5677*dc5640d1SHerbert Xue <pre><code>
5678*dc5640d1SHerbert Xue class SnackMachine {
5679*dc5640d1SHerbert Xue   {@literal @}Inject
5680*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5681*dc5640d1SHerbert Xue }</code></pre>
5682*dc5640d1SHerbert Xue
5683*dc5640d1SHerbert Xue <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5684*dc5640d1SHerbert Xue {@code Map<K, Provider<V>>} for lazy value provision:
5685*dc5640d1SHerbert Xue <pre><code>
5686*dc5640d1SHerbert Xue class SnackMachine {
5687*dc5640d1SHerbert Xue   {@literal @}Inject
5688*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5689*dc5640d1SHerbert Xue }</code></pre>
5690*dc5640d1SHerbert Xue
5691*dc5640d1SHerbert Xue <p>Contributing mapbindings from different modules is supported. For example,
5692*dc5640d1SHerbert Xue it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5693*dc5640d1SHerbert Xue create their own {@code MapBinder<String, Snack>}, and to each contribute
5694*dc5640d1SHerbert Xue bindings to the snacks map. When that map is injected, it will contain
5695*dc5640d1SHerbert Xue entries from both modules.
5696*dc5640d1SHerbert Xue
5697*dc5640d1SHerbert Xue <p>The map's iteration order is consistent with the binding order. This is
5698*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
5699*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
5700*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
5701*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
5702*dc5640d1SHerbert Xue
5703*dc5640d1SHerbert Xue <p>The map is unmodifiable.  Elements can only be added to the map by
5704*dc5640d1SHerbert Xue configuring the MapBinder.  Elements can never be removed from the map.
5705*dc5640d1SHerbert Xue
5706*dc5640d1SHerbert Xue <p>Values are resolved at map injection time. If a value is bound to a
5707*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the map is
5708*dc5640d1SHerbert Xue injected (unless the binding is also scoped, or a map of providers is injected).
5709*dc5640d1SHerbert Xue
5710*dc5640d1SHerbert Xue <p>Annotations are used to create different maps of the same key/value
5711*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent map.
5712*dc5640d1SHerbert Xue
5713*dc5640d1SHerbert Xue <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5714*dc5640d1SHerbert Xue once, map injection will fail. However, use {@link #permitDuplicates()} in
5715*dc5640d1SHerbert Xue order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5716*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>} will be added.
5717*dc5640d1SHerbert Xue
5718*dc5640d1SHerbert Xue <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5719*dc5640d1SHerbert Xue throw an unchecked exception.
5720*dc5640d1SHerbert Xue
5721*dc5640d1SHerbert Xue <p><strong>Values must be non-null to use map injection.</strong> If any
5722*dc5640d1SHerbert Xue value is null, map injection will fail (although injecting a map of providers
5723*dc5640d1SHerbert Xue will not).
5724*dc5640d1SHerbert Xue
5725*dc5640d1SHerbert Xue @author [email protected] (David P. Baker)]]>
5726*dc5640d1SHerbert Xue    </doc>
5727*dc5640d1SHerbert Xue  </class>
5728*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MapBinder -->
5729*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5730*dc5640d1SHerbert Xue  <interface name="MapBinderBinding"    abstract="true"
5731*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5732*dc5640d1SHerbert Xue    deprecated="not deprecated">
5733*dc5640d1SHerbert Xue    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5734*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5735*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5736*dc5640d1SHerbert Xue      deprecated="not deprecated">
5737*dc5640d1SHerbert Xue      <doc>
5738*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the map.]]>
5739*dc5640d1SHerbert Xue      </doc>
5740*dc5640d1SHerbert Xue    </method>
5741*dc5640d1SHerbert Xue    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5742*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5743*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5744*dc5640d1SHerbert Xue      deprecated="not deprecated">
5745*dc5640d1SHerbert Xue      <doc>
5746*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5747*dc5640d1SHerbert Xue <p>
5748*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5749*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5750*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
5751*dc5640d1SHerbert Xue      </doc>
5752*dc5640d1SHerbert Xue    </method>
5753*dc5640d1SHerbert Xue    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5754*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5755*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5756*dc5640d1SHerbert Xue      deprecated="not deprecated">
5757*dc5640d1SHerbert Xue      <doc>
5758*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the values of the map.
5759*dc5640d1SHerbert Xue <p>
5760*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5761*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5762*dc5640d1SHerbert Xue <code>TypeLiteral&lt;Snack></code>.]]>
5763*dc5640d1SHerbert Xue      </doc>
5764*dc5640d1SHerbert Xue    </method>
5765*dc5640d1SHerbert Xue    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5766*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5767*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5768*dc5640d1SHerbert Xue      deprecated="not deprecated">
5769*dc5640d1SHerbert Xue      <doc>
5770*dc5640d1SHerbert Xue      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5771*dc5640d1SHerbert Xue to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5772*dc5640d1SHerbert Xue This is only supported on bindings returned from an injector. This will throw
5773*dc5640d1SHerbert Xue {@link UnsupportedOperationException} if it is called on an element retrieved from
5774*dc5640d1SHerbert Xue {@link Elements#getElements}.
5775*dc5640d1SHerbert Xue <p>
5776*dc5640d1SHerbert Xue The elements will always match the type Map's generic type. For example, if getMapKey returns a
5777*dc5640d1SHerbert Xue key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5778*dc5640d1SHerbert Xue <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5779*dc5640d1SHerbert Xue      </doc>
5780*dc5640d1SHerbert Xue    </method>
5781*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
5782*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5783*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5784*dc5640d1SHerbert Xue      deprecated="not deprecated">
5785*dc5640d1SHerbert Xue      <doc>
5786*dc5640d1SHerbert Xue      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5787*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5788*dc5640d1SHerbert Xue MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5789*dc5640d1SHerbert Xue      </doc>
5790*dc5640d1SHerbert Xue    </method>
5791*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
5792*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5793*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5794*dc5640d1SHerbert Xue      deprecated="not deprecated">
5795*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
5796*dc5640d1SHerbert Xue      <doc>
5797*dc5640d1SHerbert Xue      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5798*dc5640d1SHerbert Xue given Element in order to support building and injecting the map. This will work for
5799*dc5640d1SHerbert Xue MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5800*dc5640d1SHerbert Xue only necessary if you are working with elements retrieved from modules (without an Injector),
5801*dc5640d1SHerbert Xue otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5802*dc5640d1SHerbert Xue <p>
5803*dc5640d1SHerbert Xue If you need to introspect the details of the map, such as the keys, values or if it permits
5804*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
5805*dc5640d1SHerbert Xue {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5806*dc5640d1SHerbert Xue      </doc>
5807*dc5640d1SHerbert Xue    </method>
5808*dc5640d1SHerbert Xue    <doc>
5809*dc5640d1SHerbert Xue    <![CDATA[A binding for a MapBinder.
5810*dc5640d1SHerbert Xue <p>
5811*dc5640d1SHerbert Xue Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5812*dc5640d1SHerbert Xue &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5813*dc5640d1SHerbert Xue Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5814*dc5640d1SHerbert Xue MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5815*dc5640d1SHerbert Xue bindings can be validated to be derived from this MapBinderBinding using
5816*dc5640d1SHerbert Xue {@link #containsElement(Element)}.
5817*dc5640d1SHerbert Xue
5818*dc5640d1SHerbert Xue @param <T> The fully qualified type of the map, including Map. For example:
5819*dc5640d1SHerbert Xue          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5820*dc5640d1SHerbert Xue
5821*dc5640d1SHerbert Xue @since 3.0
5822*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
5823*dc5640d1SHerbert Xue    </doc>
5824*dc5640d1SHerbert Xue  </interface>
5825*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5826*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.Multibinder -->
5827*dc5640d1SHerbert Xue  <class name="Multibinder" extends="java.lang.Object"
5828*dc5640d1SHerbert Xue    abstract="true"
5829*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5830*dc5640d1SHerbert Xue    deprecated="not deprecated">
5831*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5832*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5833*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5834*dc5640d1SHerbert Xue      deprecated="not deprecated">
5835*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5836*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5837*dc5640d1SHerbert Xue      <doc>
5838*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5839*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5840*dc5640d1SHerbert Xue      </doc>
5841*dc5640d1SHerbert Xue    </method>
5842*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5843*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5844*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5845*dc5640d1SHerbert Xue      deprecated="not deprecated">
5846*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5847*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5848*dc5640d1SHerbert Xue      <doc>
5849*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5850*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5851*dc5640d1SHerbert Xue      </doc>
5852*dc5640d1SHerbert Xue    </method>
5853*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5854*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5855*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5856*dc5640d1SHerbert Xue      deprecated="not deprecated">
5857*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5858*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5859*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5860*dc5640d1SHerbert Xue      <doc>
5861*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5862*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5863*dc5640d1SHerbert Xue      </doc>
5864*dc5640d1SHerbert Xue    </method>
5865*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5866*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5867*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5868*dc5640d1SHerbert Xue      deprecated="not deprecated">
5869*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5870*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5871*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5872*dc5640d1SHerbert Xue      <doc>
5873*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5874*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5875*dc5640d1SHerbert Xue      </doc>
5876*dc5640d1SHerbert Xue    </method>
5877*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5878*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5879*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5880*dc5640d1SHerbert Xue      deprecated="not deprecated">
5881*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5882*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5883*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5884*dc5640d1SHerbert Xue      <doc>
5885*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5886*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5887*dc5640d1SHerbert Xue      </doc>
5888*dc5640d1SHerbert Xue    </method>
5889*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5890*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5891*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5892*dc5640d1SHerbert Xue      deprecated="not deprecated">
5893*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5894*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5895*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5896*dc5640d1SHerbert Xue      <doc>
5897*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5898*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5899*dc5640d1SHerbert Xue      </doc>
5900*dc5640d1SHerbert Xue    </method>
5901*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5902*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5903*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5904*dc5640d1SHerbert Xue      deprecated="not deprecated">
5905*dc5640d1SHerbert Xue      <doc>
5906*dc5640d1SHerbert Xue      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5907*dc5640d1SHerbert Xue bound, the one that gets included is arbitrary. When multiple modules contribute elements to
5908*dc5640d1SHerbert Xue the set, this configuration option impacts all of them.
5909*dc5640d1SHerbert Xue
5910*dc5640d1SHerbert Xue @return this multibinder
5911*dc5640d1SHerbert Xue @since 3.0]]>
5912*dc5640d1SHerbert Xue      </doc>
5913*dc5640d1SHerbert Xue    </method>
5914*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
5915*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5916*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5917*dc5640d1SHerbert Xue      deprecated="not deprecated">
5918*dc5640d1SHerbert Xue      <doc>
5919*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new element in the set. Each
5920*dc5640d1SHerbert Xue bound element must have a distinct value. Bound providers will be
5921*dc5640d1SHerbert Xue evaluated each time the set is injected.
5922*dc5640d1SHerbert Xue
5923*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
5924*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
5925*dc5640d1SHerbert Xue
5926*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
5927*dc5640d1SHerbert Xue to specify a binding scope.]]>
5928*dc5640d1SHerbert Xue      </doc>
5929*dc5640d1SHerbert Xue    </method>
5930*dc5640d1SHerbert Xue    <doc>
5931*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple values separately, only to later inject them as a
5932*dc5640d1SHerbert Xue complete collection. Multibinder is intended for use in your application's
5933*dc5640d1SHerbert Xue module:
5934*dc5640d1SHerbert Xue <pre><code>
5935*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
5936*dc5640d1SHerbert Xue   protected void configure() {
5937*dc5640d1SHerbert Xue     Multibinder&lt;Snack&gt; multibinder
5938*dc5640d1SHerbert Xue         = Multibinder.newSetBinder(binder(), Snack.class);
5939*dc5640d1SHerbert Xue     multibinder.addBinding().toInstance(new Twix());
5940*dc5640d1SHerbert Xue     multibinder.addBinding().toProvider(SnickersProvider.class);
5941*dc5640d1SHerbert Xue     multibinder.addBinding().to(Skittles.class);
5942*dc5640d1SHerbert Xue   }
5943*dc5640d1SHerbert Xue }</code></pre>
5944*dc5640d1SHerbert Xue
5945*dc5640d1SHerbert Xue <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
5946*dc5640d1SHerbert Xue <pre><code>
5947*dc5640d1SHerbert Xue class SnackMachine {
5948*dc5640d1SHerbert Xue   {@literal @}Inject
5949*dc5640d1SHerbert Xue   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
5950*dc5640d1SHerbert Xue }</code></pre>
5951*dc5640d1SHerbert Xue
5952*dc5640d1SHerbert Xue <p>Contributing multibindings from different modules is supported. For
5953*dc5640d1SHerbert Xue example, it is okay to have both {@code CandyModule} and {@code ChipsModule}
5954*dc5640d1SHerbert Xue to both create their own {@code Multibinder<Snack>}, and to each contribute
5955*dc5640d1SHerbert Xue bindings to the set of snacks. When that set is injected, it will contain
5956*dc5640d1SHerbert Xue elements from both modules.
5957*dc5640d1SHerbert Xue
5958*dc5640d1SHerbert Xue <p>The set's iteration order is consistent with the binding order. This is
5959*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
5960*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
5961*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
5962*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
5963*dc5640d1SHerbert Xue
5964*dc5640d1SHerbert Xue <p>The set is unmodifiable.  Elements can only be added to the set by
5965*dc5640d1SHerbert Xue configuring the multibinder.  Elements can never be removed from the set.
5966*dc5640d1SHerbert Xue
5967*dc5640d1SHerbert Xue <p>Elements are resolved at set injection time. If an element is bound to a
5968*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the set is
5969*dc5640d1SHerbert Xue injected (unless the binding is also scoped).
5970*dc5640d1SHerbert Xue
5971*dc5640d1SHerbert Xue <p>Annotations are be used to create different sets of the same element
5972*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent collection of
5973*dc5640d1SHerbert Xue elements.
5974*dc5640d1SHerbert Xue
5975*dc5640d1SHerbert Xue <p><strong>Elements must be distinct.</strong> If multiple bound elements
5976*dc5640d1SHerbert Xue have the same value, set injection will fail.
5977*dc5640d1SHerbert Xue
5978*dc5640d1SHerbert Xue <p><strong>Elements must be non-null.</strong> If any set element is null,
5979*dc5640d1SHerbert Xue set injection will fail.
5980*dc5640d1SHerbert Xue
5981*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
5982*dc5640d1SHerbert Xue    </doc>
5983*dc5640d1SHerbert Xue  </class>
5984*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.Multibinder -->
5985*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
5986*dc5640d1SHerbert Xue  <interface name="MultibinderBinding"    abstract="true"
5987*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5988*dc5640d1SHerbert Xue    deprecated="not deprecated">
5989*dc5640d1SHerbert Xue    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
5990*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5991*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5992*dc5640d1SHerbert Xue      deprecated="not deprecated">
5993*dc5640d1SHerbert Xue      <doc>
5994*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the set.]]>
5995*dc5640d1SHerbert Xue      </doc>
5996*dc5640d1SHerbert Xue    </method>
5997*dc5640d1SHerbert Xue    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5998*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5999*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6000*dc5640d1SHerbert Xue      deprecated="not deprecated">
6001*dc5640d1SHerbert Xue      <doc>
6002*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6003*dc5640d1SHerbert Xue <p>
6004*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6005*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a
6006*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
6007*dc5640d1SHerbert Xue      </doc>
6008*dc5640d1SHerbert Xue    </method>
6009*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6010*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6011*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6012*dc5640d1SHerbert Xue      deprecated="not deprecated">
6013*dc5640d1SHerbert Xue      <doc>
6014*dc5640d1SHerbert Xue      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6015*dc5640d1SHerbert Xue injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6016*dc5640d1SHerbert Xue retrieved from {@link Elements#getElements}.
6017*dc5640d1SHerbert Xue <p>
6018*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6019*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a list of type
6020*dc5640d1SHerbert Xue <code>List&lt;Binding&lt;String>></code>.]]>
6021*dc5640d1SHerbert Xue      </doc>
6022*dc5640d1SHerbert Xue    </method>
6023*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
6024*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6025*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6026*dc5640d1SHerbert Xue      deprecated="not deprecated">
6027*dc5640d1SHerbert Xue      <doc>
6028*dc5640d1SHerbert Xue      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6029*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6030*dc5640d1SHerbert Xue MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6031*dc5640d1SHerbert Xue      </doc>
6032*dc5640d1SHerbert Xue    </method>
6033*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
6034*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6035*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6036*dc5640d1SHerbert Xue      deprecated="not deprecated">
6037*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
6038*dc5640d1SHerbert Xue      <doc>
6039*dc5640d1SHerbert Xue      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6040*dc5640d1SHerbert Xue derive the elements of the set and other bindings that Multibinder uses internally. This will
6041*dc5640d1SHerbert Xue work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6042*dc5640d1SHerbert Xue Usually this is only necessary if you are working with elements retrieved from modules (without
6043*dc5640d1SHerbert Xue an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6044*dc5640d1SHerbert Xue <p>
6045*dc5640d1SHerbert Xue If you need to introspect the details of the set, such as the values or if it permits
6046*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
6047*dc5640d1SHerbert Xue {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6048*dc5640d1SHerbert Xue      </doc>
6049*dc5640d1SHerbert Xue    </method>
6050*dc5640d1SHerbert Xue    <doc>
6051*dc5640d1SHerbert Xue    <![CDATA[A binding for a Multibinder.
6052*dc5640d1SHerbert Xue
6053*dc5640d1SHerbert Xue @param <T> The fully qualified type of the set, including Set. For example:
6054*dc5640d1SHerbert Xue          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6055*dc5640d1SHerbert Xue
6056*dc5640d1SHerbert Xue @since 3.0
6057*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6058*dc5640d1SHerbert Xue    </doc>
6059*dc5640d1SHerbert Xue  </interface>
6060*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6061*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6062*dc5640d1SHerbert Xue  <interface name="MultibindingsTargetVisitor"    abstract="true"
6063*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6064*dc5640d1SHerbert Xue    deprecated="not deprecated">
6065*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6066*dc5640d1SHerbert Xue    <method name="visit" return="V"
6067*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6068*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6069*dc5640d1SHerbert Xue      deprecated="not deprecated">
6070*dc5640d1SHerbert Xue      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6071*dc5640d1SHerbert Xue      <doc>
6072*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6073*dc5640d1SHerbert Xue      </doc>
6074*dc5640d1SHerbert Xue    </method>
6075*dc5640d1SHerbert Xue    <method name="visit" return="V"
6076*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6077*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6078*dc5640d1SHerbert Xue      deprecated="not deprecated">
6079*dc5640d1SHerbert Xue      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6080*dc5640d1SHerbert Xue      <doc>
6081*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6082*dc5640d1SHerbert Xue      </doc>
6083*dc5640d1SHerbert Xue    </method>
6084*dc5640d1SHerbert Xue    <doc>
6085*dc5640d1SHerbert Xue    <![CDATA[A visitor for the multibinder extension.
6086*dc5640d1SHerbert Xue <p>
6087*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6088*dc5640d1SHerbert Xue {@link Multibinder} or {@link MapBinder} will be visited through this interface.
6089*dc5640d1SHerbert Xue
6090*dc5640d1SHerbert Xue @since 3.0
6091*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6092*dc5640d1SHerbert Xue    </doc>
6093*dc5640d1SHerbert Xue  </interface>
6094*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6095*dc5640d1SHerbert Xue</package>
6096*dc5640d1SHerbert Xue<package name="com.google.inject.name">
6097*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Named -->
6098*dc5640d1SHerbert Xue  <class name="Named"    abstract="true"
6099*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6100*dc5640d1SHerbert Xue    deprecated="not deprecated">
6101*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6102*dc5640d1SHerbert Xue    <doc>
6103*dc5640d1SHerbert Xue    <![CDATA[Annotates named things.
6104*dc5640d1SHerbert Xue
6105*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6106*dc5640d1SHerbert Xue    </doc>
6107*dc5640d1SHerbert Xue  </class>
6108*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Named -->
6109*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Names -->
6110*dc5640d1SHerbert Xue  <class name="Names" extends="java.lang.Object"
6111*dc5640d1SHerbert Xue    abstract="false"
6112*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6113*dc5640d1SHerbert Xue    deprecated="not deprecated">
6114*dc5640d1SHerbert Xue    <method name="named" return="com.google.inject.name.Named"
6115*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6116*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6117*dc5640d1SHerbert Xue      deprecated="not deprecated">
6118*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
6119*dc5640d1SHerbert Xue      <doc>
6120*dc5640d1SHerbert Xue      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6121*dc5640d1SHerbert Xue      </doc>
6122*dc5640d1SHerbert Xue    </method>
6123*dc5640d1SHerbert Xue    <method name="bindProperties"
6124*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6125*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6126*dc5640d1SHerbert Xue      deprecated="not deprecated">
6127*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6128*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6129*dc5640d1SHerbert Xue      <doc>
6130*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6131*dc5640d1SHerbert Xue {@code properties}.]]>
6132*dc5640d1SHerbert Xue      </doc>
6133*dc5640d1SHerbert Xue    </method>
6134*dc5640d1SHerbert Xue    <method name="bindProperties"
6135*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6136*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6137*dc5640d1SHerbert Xue      deprecated="not deprecated">
6138*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6139*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Properties"/>
6140*dc5640d1SHerbert Xue      <doc>
6141*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6142*dc5640d1SHerbert Xue method binds all properties including those inherited from
6143*dc5640d1SHerbert Xue {@link Properties#defaults defaults}.]]>
6144*dc5640d1SHerbert Xue      </doc>
6145*dc5640d1SHerbert Xue    </method>
6146*dc5640d1SHerbert Xue    <doc>
6147*dc5640d1SHerbert Xue    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6148*dc5640d1SHerbert Xue
6149*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6150*dc5640d1SHerbert Xue    </doc>
6151*dc5640d1SHerbert Xue  </class>
6152*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Names -->
6153*dc5640d1SHerbert Xue</package>
6154*dc5640d1SHerbert Xue<package name="com.google.inject.persist">
6155*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistFilter -->
6156*dc5640d1SHerbert Xue  <class name="PersistFilter" extends="java.lang.Object"
6157*dc5640d1SHerbert Xue    abstract="false"
6158*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6159*dc5640d1SHerbert Xue    deprecated="not deprecated">
6160*dc5640d1SHerbert Xue    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6161*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6162*dc5640d1SHerbert Xue      deprecated="not deprecated">
6163*dc5640d1SHerbert Xue    </constructor>
6164*dc5640d1SHerbert Xue    <method name="init"
6165*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6166*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6167*dc5640d1SHerbert Xue      deprecated="not deprecated">
6168*dc5640d1SHerbert Xue      <param name="filterConfig" type="FilterConfig"/>
6169*dc5640d1SHerbert Xue      <exception name="ServletException" type="ServletException"/>
6170*dc5640d1SHerbert Xue    </method>
6171*dc5640d1SHerbert Xue    <method name="destroy"
6172*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6173*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6174*dc5640d1SHerbert Xue      deprecated="not deprecated">
6175*dc5640d1SHerbert Xue    </method>
6176*dc5640d1SHerbert Xue    <method name="doFilter"
6177*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6178*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6179*dc5640d1SHerbert Xue      deprecated="not deprecated">
6180*dc5640d1SHerbert Xue      <param name="servletRequest" type="ServletRequest"/>
6181*dc5640d1SHerbert Xue      <param name="servletResponse" type="ServletResponse"/>
6182*dc5640d1SHerbert Xue      <param name="filterChain" type="FilterChain"/>
6183*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
6184*dc5640d1SHerbert Xue      <exception name="ServletException" type="ServletException"/>
6185*dc5640d1SHerbert Xue    </method>
6186*dc5640d1SHerbert Xue    <doc>
6187*dc5640d1SHerbert Xue    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6188*dc5640d1SHerbert Xue guice-persist manage the lifecycle of active units of work.
6189*dc5640d1SHerbert Xue The filter automatically starts and stops the relevant {@link PersistService}
6190*dc5640d1SHerbert Xue upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6191*dc5640d1SHerbert Xue {@link javax.servlet.Filter#destroy()} respectively.
6192*dc5640d1SHerbert Xue
6193*dc5640d1SHerbert Xue <p> To be able to use the open session-in-view pattern (i.e. work per request),
6194*dc5640d1SHerbert Xue register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6195*dc5640d1SHerbert Xue important that you register this filter before any other filter.
6196*dc5640d1SHerbert Xue
6197*dc5640d1SHerbert Xue For multiple providers, you should register this filter once per provider, inside
6198*dc5640d1SHerbert Xue a private module for each persist module installed (this must be the same private
6199*dc5640d1SHerbert Xue module where the specific persist module is itself installed).
6200*dc5640d1SHerbert Xue
6201*dc5640d1SHerbert Xue <p>
6202*dc5640d1SHerbert Xue Example configuration:
6203*dc5640d1SHerbert Xue <pre>{@code
6204*dc5640d1SHerbert Xue  public class MyModule extends ServletModule {
6205*dc5640d1SHerbert Xue    public void configureServlets() {
6206*dc5640d1SHerbert Xue      filter("/*").through(PersistFilter.class);
6207*dc5640d1SHerbert Xue
6208*dc5640d1SHerbert Xue      serve("/index.html").with(MyHtmlServlet.class);
6209*dc5640d1SHerbert Xue      // Etc.
6210*dc5640d1SHerbert Xue    }
6211*dc5640d1SHerbert Xue  }
6212*dc5640d1SHerbert Xue }</pre>
6213*dc5640d1SHerbert Xue <p>
6214*dc5640d1SHerbert Xue This filter is thread safe and allows you to create injectors concurrently
6215*dc5640d1SHerbert Xue and deploy multiple guice-persist modules within the same injector, or even
6216*dc5640d1SHerbert Xue multiple injectors with persist modules withing the same JVM or web app.
6217*dc5640d1SHerbert Xue <p>
6218*dc5640d1SHerbert Xue This filter requires the Guice Servlet extension.
6219*dc5640d1SHerbert Xue
6220*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6221*dc5640d1SHerbert Xue    </doc>
6222*dc5640d1SHerbert Xue  </class>
6223*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistFilter -->
6224*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistModule -->
6225*dc5640d1SHerbert Xue  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6226*dc5640d1SHerbert Xue    abstract="true"
6227*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6228*dc5640d1SHerbert Xue    deprecated="not deprecated">
6229*dc5640d1SHerbert Xue    <constructor name="PersistModule"
6230*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6231*dc5640d1SHerbert Xue      deprecated="not deprecated">
6232*dc5640d1SHerbert Xue    </constructor>
6233*dc5640d1SHerbert Xue    <method name="configure"
6234*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6235*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6236*dc5640d1SHerbert Xue      deprecated="not deprecated">
6237*dc5640d1SHerbert Xue    </method>
6238*dc5640d1SHerbert Xue    <method name="configurePersistence"
6239*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6240*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6241*dc5640d1SHerbert Xue      deprecated="not deprecated">
6242*dc5640d1SHerbert Xue    </method>
6243*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6244*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6245*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6246*dc5640d1SHerbert Xue      deprecated="not deprecated">
6247*dc5640d1SHerbert Xue    </method>
6248*dc5640d1SHerbert Xue    <doc>
6249*dc5640d1SHerbert Xue    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6250*dc5640d1SHerbert Xue providers.
6251*dc5640d1SHerbert Xue
6252*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6253*dc5640d1SHerbert Xue    </doc>
6254*dc5640d1SHerbert Xue  </class>
6255*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistModule -->
6256*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.PersistService -->
6257*dc5640d1SHerbert Xue  <interface name="PersistService"    abstract="true"
6258*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6259*dc5640d1SHerbert Xue    deprecated="not deprecated">
6260*dc5640d1SHerbert Xue    <method name="start"
6261*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6262*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6263*dc5640d1SHerbert Xue      deprecated="not deprecated">
6264*dc5640d1SHerbert Xue      <doc>
6265*dc5640d1SHerbert Xue      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6266*dc5640d1SHerbert Xue use. For instance, with JPA, it creates an EntityManagerFactory and may
6267*dc5640d1SHerbert Xue open connection pools. This method must be called by your code prior to
6268*dc5640d1SHerbert Xue using any guice-persist or JPA artifacts. If already started,
6269*dc5640d1SHerbert Xue calling this method does nothing, if already stopped, it also does
6270*dc5640d1SHerbert Xue nothing.]]>
6271*dc5640d1SHerbert Xue      </doc>
6272*dc5640d1SHerbert Xue    </method>
6273*dc5640d1SHerbert Xue    <method name="stop"
6274*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6275*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6276*dc5640d1SHerbert Xue      deprecated="not deprecated">
6277*dc5640d1SHerbert Xue      <doc>
6278*dc5640d1SHerbert Xue      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6279*dc5640d1SHerbert Xue closes the {@code EntityManagerFactory}. If already stopped, calling this
6280*dc5640d1SHerbert Xue method does nothing. If not yet started, it also does nothing.]]>
6281*dc5640d1SHerbert Xue      </doc>
6282*dc5640d1SHerbert Xue    </method>
6283*dc5640d1SHerbert Xue    <doc>
6284*dc5640d1SHerbert Xue    <![CDATA[Persistence provider service. Use this to manage the overall
6285*dc5640d1SHerbert Xue startup and stop of the persistence module(s).
6286*dc5640d1SHerbert Xue
6287*dc5640d1SHerbert Xue TODO(dhanji): Integrate with Service API when appropriate.
6288*dc5640d1SHerbert Xue
6289*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6290*dc5640d1SHerbert Xue    </doc>
6291*dc5640d1SHerbert Xue  </interface>
6292*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.PersistService -->
6293*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.Transactional -->
6294*dc5640d1SHerbert Xue  <class name="Transactional"    abstract="true"
6295*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6296*dc5640d1SHerbert Xue    deprecated="not deprecated">
6297*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6298*dc5640d1SHerbert Xue    <doc>
6299*dc5640d1SHerbert Xue    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6300*dc5640d1SHerbert Xue Consult the documentation on http://code.google.com/p/google-guice for detailed semantics.
6301*dc5640d1SHerbert Xue Marking a method {@code @Transactional} will start a new transaction before the method
6302*dc5640d1SHerbert Xue executes and commit it after the method returns.
6303*dc5640d1SHerbert Xue <p>
6304*dc5640d1SHerbert Xue If the method throws an exception, the transaction will be rolled back <em>unless</em>
6305*dc5640d1SHerbert Xue you have specifically requested not to in the {@link #ignore()} clause.
6306*dc5640d1SHerbert Xue <p>
6307*dc5640d1SHerbert Xue Similarly, the set of exceptions that will trigger a rollback can be defined in
6308*dc5640d1SHerbert Xue the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6309*dc5640d1SHerbert Xue rollback.
6310*dc5640d1SHerbert Xue
6311*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6312*dc5640d1SHerbert Xue    </doc>
6313*dc5640d1SHerbert Xue  </class>
6314*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.Transactional -->
6315*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.UnitOfWork -->
6316*dc5640d1SHerbert Xue  <interface name="UnitOfWork"    abstract="true"
6317*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6318*dc5640d1SHerbert Xue    deprecated="not deprecated">
6319*dc5640d1SHerbert Xue    <method name="begin"
6320*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6321*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6322*dc5640d1SHerbert Xue      deprecated="not deprecated">
6323*dc5640d1SHerbert Xue      <doc>
6324*dc5640d1SHerbert Xue      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6325*dc5640d1SHerbert Xue is already one open, the invocation will do nothing. In this way, you can define arbitrary
6326*dc5640d1SHerbert Xue units-of-work that nest within one another safely.
6327*dc5640d1SHerbert Xue
6328*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6329*dc5640d1SHerbert Xue      </doc>
6330*dc5640d1SHerbert Xue    </method>
6331*dc5640d1SHerbert Xue    <method name="end"
6332*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6333*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6334*dc5640d1SHerbert Xue      deprecated="not deprecated">
6335*dc5640d1SHerbert Xue      <doc>
6336*dc5640d1SHerbert Xue      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6337*dc5640d1SHerbert Xue layer to close. If there is no Unit of work open, then the call returns silently. You can
6338*dc5640d1SHerbert Xue safely invoke end() repeatedly.
6339*dc5640d1SHerbert Xue <p>
6340*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6341*dc5640d1SHerbert Xue      </doc>
6342*dc5640d1SHerbert Xue    </method>
6343*dc5640d1SHerbert Xue    <doc>
6344*dc5640d1SHerbert Xue    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6345*dc5640d1SHerbert Xue work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6346*dc5640d1SHerbert Xue of work is required. Starting and ending a unit of work directly corresponds to opening and
6347*dc5640d1SHerbert Xue closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6348*dc5640d1SHerbert Xue <p> The
6349*dc5640d1SHerbert Xue Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6350*dc5640d1SHerbert Xue end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6351*dc5640d1SHerbert Xue behind thread-locality of Unit of Work semantics).
6352*dc5640d1SHerbert Xue
6353*dc5640d1SHerbert Xue <ul>
6354*dc5640d1SHerbert Xue   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6355*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6356*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6357*dc5640d1SHerbert Xue       background or bootstrap thread) is probably a good use case.</li>
6358*dc5640d1SHerbert Xue  </ul>
6359*dc5640d1SHerbert Xue
6360*dc5640d1SHerbert Xue @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6361*dc5640d1SHerbert Xue    </doc>
6362*dc5640d1SHerbert Xue  </interface>
6363*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.UnitOfWork -->
6364*dc5640d1SHerbert Xue</package>
6365*dc5640d1SHerbert Xue<package name="com.google.inject.persist.finder">
6366*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6367*dc5640d1SHerbert Xue  <class name="DynamicFinder" extends="java.lang.Object"
6368*dc5640d1SHerbert Xue    abstract="false"
6369*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6370*dc5640d1SHerbert Xue    deprecated="not deprecated">
6371*dc5640d1SHerbert Xue    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6373*dc5640d1SHerbert Xue      deprecated="not deprecated">
6374*dc5640d1SHerbert Xue    </constructor>
6375*dc5640d1SHerbert Xue    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6376*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6377*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6378*dc5640d1SHerbert Xue      deprecated="not deprecated">
6379*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
6380*dc5640d1SHerbert Xue      <doc>
6381*dc5640d1SHerbert Xue      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6382*dc5640d1SHerbert Xue
6383*dc5640d1SHerbert Xue @param method a method you want to test as a dynamic finder]]>
6384*dc5640d1SHerbert Xue      </doc>
6385*dc5640d1SHerbert Xue    </method>
6386*dc5640d1SHerbert Xue    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6387*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6388*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6389*dc5640d1SHerbert Xue      deprecated="not deprecated">
6390*dc5640d1SHerbert Xue    </method>
6391*dc5640d1SHerbert Xue    <doc>
6392*dc5640d1SHerbert Xue    <![CDATA[Utility that helps you introspect dynamic finder methods.
6393*dc5640d1SHerbert Xue
6394*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6395*dc5640d1SHerbert Xue    </doc>
6396*dc5640d1SHerbert Xue  </class>
6397*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6398*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.Finder -->
6399*dc5640d1SHerbert Xue  <class name="Finder"    abstract="true"
6400*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6401*dc5640d1SHerbert Xue    deprecated="not deprecated">
6402*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6403*dc5640d1SHerbert Xue    <doc>
6404*dc5640d1SHerbert Xue    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6405*dc5640d1SHerbert Xue specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6406*dc5640d1SHerbert Xue
6407*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6408*dc5640d1SHerbert Xue    </doc>
6409*dc5640d1SHerbert Xue  </class>
6410*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.Finder -->
6411*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.FirstResult -->
6412*dc5640d1SHerbert Xue  <class name="FirstResult"    abstract="true"
6413*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6414*dc5640d1SHerbert Xue    deprecated="not deprecated">
6415*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6416*dc5640d1SHerbert Xue    <doc>
6417*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6418*dc5640d1SHerbert Xue the index of the first result in the result set you are interested in.
6419*dc5640d1SHerbert Xue Useful for paging result sets. Complemented by {@link MaxResults}.
6420*dc5640d1SHerbert Xue
6421*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6422*dc5640d1SHerbert Xue    </doc>
6423*dc5640d1SHerbert Xue  </class>
6424*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.FirstResult -->
6425*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.MaxResults -->
6426*dc5640d1SHerbert Xue  <class name="MaxResults"    abstract="true"
6427*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6428*dc5640d1SHerbert Xue    deprecated="not deprecated">
6429*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6430*dc5640d1SHerbert Xue    <doc>
6431*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6432*dc5640d1SHerbert Xue the maximum size of returned result window. Usefule for paging result sets.
6433*dc5640d1SHerbert Xue Complement of {@link FirstResult}.
6434*dc5640d1SHerbert Xue
6435*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6436*dc5640d1SHerbert Xue    </doc>
6437*dc5640d1SHerbert Xue  </class>
6438*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.MaxResults -->
6439*dc5640d1SHerbert Xue</package>
6440*dc5640d1SHerbert Xue<package name="com.google.inject.persist.jpa">
6441*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6442*dc5640d1SHerbert Xue  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6443*dc5640d1SHerbert Xue    abstract="false"
6444*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6445*dc5640d1SHerbert Xue    deprecated="not deprecated">
6446*dc5640d1SHerbert Xue    <constructor name="JpaPersistModule" type="java.lang.String"
6447*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6448*dc5640d1SHerbert Xue      deprecated="not deprecated">
6449*dc5640d1SHerbert Xue    </constructor>
6450*dc5640d1SHerbert Xue    <method name="configurePersistence"
6451*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6452*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6453*dc5640d1SHerbert Xue      deprecated="not deprecated">
6454*dc5640d1SHerbert Xue    </method>
6455*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6456*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6457*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6458*dc5640d1SHerbert Xue      deprecated="not deprecated">
6459*dc5640d1SHerbert Xue    </method>
6460*dc5640d1SHerbert Xue    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6461*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6462*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6463*dc5640d1SHerbert Xue      deprecated="not deprecated">
6464*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Properties"/>
6465*dc5640d1SHerbert Xue      <doc>
6466*dc5640d1SHerbert Xue      <![CDATA[Configures the JPA persistence provider with a set of properties.
6467*dc5640d1SHerbert Xue
6468*dc5640d1SHerbert Xue @param properties A set of name value pairs that configure a JPA persistence
6469*dc5640d1SHerbert Xue provider as per the specification.]]>
6470*dc5640d1SHerbert Xue      </doc>
6471*dc5640d1SHerbert Xue    </method>
6472*dc5640d1SHerbert Xue    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6473*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6474*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6475*dc5640d1SHerbert Xue      deprecated="not deprecated">
6476*dc5640d1SHerbert Xue      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6477*dc5640d1SHerbert Xue      <doc>
6478*dc5640d1SHerbert Xue      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6479*dc5640d1SHerbert Xue
6480*dc5640d1SHerbert Xue @param iface Any interface type whose methods are all dynamic finders.]]>
6481*dc5640d1SHerbert Xue      </doc>
6482*dc5640d1SHerbert Xue    </method>
6483*dc5640d1SHerbert Xue    <doc>
6484*dc5640d1SHerbert Xue    <![CDATA[JPA provider for guice persist.
6485*dc5640d1SHerbert Xue
6486*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6487*dc5640d1SHerbert Xue    </doc>
6488*dc5640d1SHerbert Xue  </class>
6489*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6490*dc5640d1SHerbert Xue</package>
6491*dc5640d1SHerbert Xue<package name="com.google.inject.servlet">
6492*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceFilter -->
6493*dc5640d1SHerbert Xue  <class name="GuiceFilter" extends="java.lang.Object"
6494*dc5640d1SHerbert Xue    abstract="false"
6495*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6496*dc5640d1SHerbert Xue    deprecated="not deprecated">
6497*dc5640d1SHerbert Xue    <constructor name="GuiceFilter"
6498*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6499*dc5640d1SHerbert Xue      deprecated="not deprecated">
6500*dc5640d1SHerbert Xue    </constructor>
6501*dc5640d1SHerbert Xue    <method name="doFilter"
6502*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6503*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6504*dc5640d1SHerbert Xue      deprecated="not deprecated">
6505*dc5640d1SHerbert Xue      <param name="servletRequest" type="ServletRequest"/>
6506*dc5640d1SHerbert Xue      <param name="servletResponse" type="ServletResponse"/>
6507*dc5640d1SHerbert Xue      <param name="filterChain" type="FilterChain"/>
6508*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
6509*dc5640d1SHerbert Xue      <exception name="ServletException" type="ServletException"/>
6510*dc5640d1SHerbert Xue    </method>
6511*dc5640d1SHerbert Xue    <method name="init"
6512*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6513*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6514*dc5640d1SHerbert Xue      deprecated="not deprecated">
6515*dc5640d1SHerbert Xue      <param name="filterConfig" type="FilterConfig"/>
6516*dc5640d1SHerbert Xue      <exception name="ServletException" type="ServletException"/>
6517*dc5640d1SHerbert Xue    </method>
6518*dc5640d1SHerbert Xue    <method name="destroy"
6519*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6520*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6521*dc5640d1SHerbert Xue      deprecated="not deprecated">
6522*dc5640d1SHerbert Xue    </method>
6523*dc5640d1SHerbert Xue    <doc>
6524*dc5640d1SHerbert Xue    <![CDATA[<p>
6525*dc5640d1SHerbert Xue Apply this filter in web.xml above all other filters (typically), to all requests where you plan
6526*dc5640d1SHerbert Xue  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
6527*dc5640d1SHerbert Xue  and servlets:
6528*dc5640d1SHerbert Xue  <pre>
6529*dc5640d1SHerbert Xue  &lt;filter&gt;
6530*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6531*dc5640d1SHerbert Xue    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
6532*dc5640d1SHerbert Xue  &lt;/filter&gt;
6533*dc5640d1SHerbert Xue
6534*dc5640d1SHerbert Xue  &lt;filter-mapping&gt;
6535*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6536*dc5640d1SHerbert Xue    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
6537*dc5640d1SHerbert Xue  &lt;/filter-mapping&gt;
6538*dc5640d1SHerbert Xue  </pre>
6539*dc5640d1SHerbert Xue
6540*dc5640d1SHerbert Xue This filter must appear before every filter that makes use of Guice injection or servlet
6541*dc5640d1SHerbert Xue scopes functionality. Typically, you will only register this filter in web.xml and register
6542*dc5640d1SHerbert Xue any other filters (and servlets) using a {@link ServletModule}.
6543*dc5640d1SHerbert Xue
6544*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
6545*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6546*dc5640d1SHerbert Xue    </doc>
6547*dc5640d1SHerbert Xue  </class>
6548*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceFilter -->
6549*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
6550*dc5640d1SHerbert Xue  <class name="GuiceServletContextListener" extends="java.lang.Object"
6551*dc5640d1SHerbert Xue    abstract="true"
6552*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6553*dc5640d1SHerbert Xue    deprecated="not deprecated">
6554*dc5640d1SHerbert Xue    <constructor name="GuiceServletContextListener"
6555*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6556*dc5640d1SHerbert Xue      deprecated="not deprecated">
6557*dc5640d1SHerbert Xue    </constructor>
6558*dc5640d1SHerbert Xue    <method name="contextInitialized"
6559*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6560*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6561*dc5640d1SHerbert Xue      deprecated="not deprecated">
6562*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="ServletContextEvent"/>
6563*dc5640d1SHerbert Xue    </method>
6564*dc5640d1SHerbert Xue    <method name="contextDestroyed"
6565*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6566*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6567*dc5640d1SHerbert Xue      deprecated="not deprecated">
6568*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="ServletContextEvent"/>
6569*dc5640d1SHerbert Xue    </method>
6570*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
6571*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6572*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6573*dc5640d1SHerbert Xue      deprecated="not deprecated">
6574*dc5640d1SHerbert Xue      <doc>
6575*dc5640d1SHerbert Xue      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
6576*dc5640d1SHerbert Xue injector.]]>
6577*dc5640d1SHerbert Xue      </doc>
6578*dc5640d1SHerbert Xue    </method>
6579*dc5640d1SHerbert Xue    <doc>
6580*dc5640d1SHerbert Xue    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
6581*dc5640d1SHerbert Xue class as a logical place to create and configure your injector. This will ensure the injector
6582*dc5640d1SHerbert Xue is created when the web application is deployed.
6583*dc5640d1SHerbert Xue
6584*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
6585*dc5640d1SHerbert Xue @since 2.0]]>
6586*dc5640d1SHerbert Xue    </doc>
6587*dc5640d1SHerbert Xue  </class>
6588*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
6589*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
6590*dc5640d1SHerbert Xue  <interface name="InstanceFilterBinding"    abstract="true"
6591*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6592*dc5640d1SHerbert Xue    deprecated="not deprecated">
6593*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6594*dc5640d1SHerbert Xue    <method name="getFilterInstance" return="Filter"
6595*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6596*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6597*dc5640d1SHerbert Xue      deprecated="not deprecated">
6598*dc5640d1SHerbert Xue      <doc>
6599*dc5640d1SHerbert Xue      <![CDATA[Returns the filter instance that will be used.]]>
6600*dc5640d1SHerbert Xue      </doc>
6601*dc5640d1SHerbert Xue    </method>
6602*dc5640d1SHerbert Xue    <doc>
6603*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a filter.
6604*dc5640d1SHerbert Xue
6605*dc5640d1SHerbert Xue @author [email protected]
6606*dc5640d1SHerbert Xue @since 3.0]]>
6607*dc5640d1SHerbert Xue    </doc>
6608*dc5640d1SHerbert Xue  </interface>
6609*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
6610*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
6611*dc5640d1SHerbert Xue  <interface name="InstanceServletBinding"    abstract="true"
6612*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6613*dc5640d1SHerbert Xue    deprecated="not deprecated">
6614*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6615*dc5640d1SHerbert Xue    <method name="getServletInstance" return="HttpServlet"
6616*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6617*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6618*dc5640d1SHerbert Xue      deprecated="not deprecated">
6619*dc5640d1SHerbert Xue      <doc>
6620*dc5640d1SHerbert Xue      <![CDATA[Returns the servlet instance that will be used.]]>
6621*dc5640d1SHerbert Xue      </doc>
6622*dc5640d1SHerbert Xue    </method>
6623*dc5640d1SHerbert Xue    <doc>
6624*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a servlet.
6625*dc5640d1SHerbert Xue
6626*dc5640d1SHerbert Xue @author [email protected]
6627*dc5640d1SHerbert Xue @since 3.0]]>
6628*dc5640d1SHerbert Xue    </doc>
6629*dc5640d1SHerbert Xue  </interface>
6630*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
6631*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
6632*dc5640d1SHerbert Xue  <interface name="LinkedFilterBinding"    abstract="true"
6633*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6634*dc5640d1SHerbert Xue    deprecated="not deprecated">
6635*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6636*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends Filter&gt;"
6637*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6638*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6639*dc5640d1SHerbert Xue      deprecated="not deprecated">
6640*dc5640d1SHerbert Xue      <doc>
6641*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the filter instance.]]>
6642*dc5640d1SHerbert Xue      </doc>
6643*dc5640d1SHerbert Xue    </method>
6644*dc5640d1SHerbert Xue    <doc>
6645*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a filter.
6646*dc5640d1SHerbert Xue
6647*dc5640d1SHerbert Xue @author [email protected]
6648*dc5640d1SHerbert Xue @since 3.0]]>
6649*dc5640d1SHerbert Xue    </doc>
6650*dc5640d1SHerbert Xue  </interface>
6651*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
6652*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
6653*dc5640d1SHerbert Xue  <interface name="LinkedServletBinding"    abstract="true"
6654*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6655*dc5640d1SHerbert Xue    deprecated="not deprecated">
6656*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6657*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends HttpServlet&gt;"
6658*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6659*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6660*dc5640d1SHerbert Xue      deprecated="not deprecated">
6661*dc5640d1SHerbert Xue      <doc>
6662*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the servlet instance.]]>
6663*dc5640d1SHerbert Xue      </doc>
6664*dc5640d1SHerbert Xue    </method>
6665*dc5640d1SHerbert Xue    <doc>
6666*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a servlet.
6667*dc5640d1SHerbert Xue
6668*dc5640d1SHerbert Xue @author [email protected]
6669*dc5640d1SHerbert Xue @since 3.0]]>
6670*dc5640d1SHerbert Xue    </doc>
6671*dc5640d1SHerbert Xue  </interface>
6672*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
6673*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestParameters -->
6674*dc5640d1SHerbert Xue  <class name="RequestParameters"    abstract="true"
6675*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6676*dc5640d1SHerbert Xue    deprecated="not deprecated">
6677*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6678*dc5640d1SHerbert Xue    <doc>
6679*dc5640d1SHerbert Xue    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
6680*dc5640d1SHerbert Xue when you want the HTTP request parameter map to be injected.
6681*dc5640d1SHerbert Xue
6682*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6683*dc5640d1SHerbert Xue    </doc>
6684*dc5640d1SHerbert Xue  </class>
6685*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestParameters -->
6686*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestScoped -->
6687*dc5640d1SHerbert Xue  <class name="RequestScoped"    abstract="true"
6688*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6689*dc5640d1SHerbert Xue    deprecated="not deprecated">
6690*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6691*dc5640d1SHerbert Xue    <doc>
6692*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per request.
6693*dc5640d1SHerbert Xue
6694*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6695*dc5640d1SHerbert Xue    </doc>
6696*dc5640d1SHerbert Xue  </class>
6697*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestScoped -->
6698*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletModule -->
6699*dc5640d1SHerbert Xue  <class name="ServletModule" extends="com.google.inject.AbstractModule"
6700*dc5640d1SHerbert Xue    abstract="false"
6701*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6702*dc5640d1SHerbert Xue    deprecated="not deprecated">
6703*dc5640d1SHerbert Xue    <constructor name="ServletModule"
6704*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6705*dc5640d1SHerbert Xue      deprecated="not deprecated">
6706*dc5640d1SHerbert Xue    </constructor>
6707*dc5640d1SHerbert Xue    <method name="configure"
6708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6709*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6710*dc5640d1SHerbert Xue      deprecated="not deprecated">
6711*dc5640d1SHerbert Xue    </method>
6712*dc5640d1SHerbert Xue    <method name="configureServlets"
6713*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6714*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6715*dc5640d1SHerbert Xue      deprecated="not deprecated">
6716*dc5640d1SHerbert Xue      <doc>
6717*dc5640d1SHerbert Xue      <![CDATA[<h3>Servlet Mapping EDSL</h3>
6718*dc5640d1SHerbert Xue
6719*dc5640d1SHerbert Xue <p> Part of the EDSL builder language for configuring servlets
6720*dc5640d1SHerbert Xue and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
6721*dc5640d1SHerbert Xue Filters and servlets are configured here using simple java method calls. Here is a typical
6722*dc5640d1SHerbert Xue example of registering a filter when creating your Guice injector:
6723*dc5640d1SHerbert Xue
6724*dc5640d1SHerbert Xue <pre>
6725*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
6726*dc5640d1SHerbert Xue
6727*dc5640d1SHerbert Xue     {@literal @}Override
6728*dc5640d1SHerbert Xue     protected void configureServlets() {
6729*dc5640d1SHerbert Xue       <b>serve("*.html").with(MyServlet.class)</b>
6730*dc5640d1SHerbert Xue     }
6731*dc5640d1SHerbert Xue   }
6732*dc5640d1SHerbert Xue </pre>
6733*dc5640d1SHerbert Xue
6734*dc5640d1SHerbert Xue This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
6735*dc5640d1SHerbert Xue any web pages ending in {@code .html}. You can also use a path-style syntax to register
6736*dc5640d1SHerbert Xue servlets:
6737*dc5640d1SHerbert Xue
6738*dc5640d1SHerbert Xue <pre>
6739*dc5640d1SHerbert Xue       <b>serve("/my/*").with(MyServlet.class)</b>
6740*dc5640d1SHerbert Xue </pre>
6741*dc5640d1SHerbert Xue
6742*dc5640d1SHerbert Xue Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
6743*dc5640d1SHerbert Xue directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
6744*dc5640d1SHerbert Xue your module. Mapping a servlet that is bound under any other scope is an error.
6745*dc5640d1SHerbert Xue
6746*dc5640d1SHerbert Xue <p>
6747*dc5640d1SHerbert Xue <h4>Dispatch Order</h4>
6748*dc5640d1SHerbert Xue You are free to register as many servlets and filters as you like this way. They will
6749*dc5640d1SHerbert Xue be compared and dispatched in the order in which the filter methods are called:
6750*dc5640d1SHerbert Xue
6751*dc5640d1SHerbert Xue <pre>
6752*dc5640d1SHerbert Xue
6753*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
6754*dc5640d1SHerbert Xue
6755*dc5640d1SHerbert Xue     {@literal @}Override
6756*dc5640d1SHerbert Xue     protected void configureServlets() {
6757*dc5640d1SHerbert Xue       filter("/*").through(MyFilter.class);
6758*dc5640d1SHerbert Xue       filter("*.css").through(MyCssFilter.class);
6759*dc5640d1SHerbert Xue       filter("*.jpg").through(new MyJpgFilter());
6760*dc5640d1SHerbert Xue       // etc..
6761*dc5640d1SHerbert Xue
6762*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
6763*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
6764*dc5640d1SHerbert Xue       serve("*.jpg").with(new MyServlet());
6765*dc5640d1SHerbert Xue       // etc..
6766*dc5640d1SHerbert Xue      }
6767*dc5640d1SHerbert Xue    }
6768*dc5640d1SHerbert Xue </pre>
6769*dc5640d1SHerbert Xue This will traverse down the list of rules in lexical order. For example, a url
6770*dc5640d1SHerbert Xue  "{@code /my/file.js}" (after it runs through the matching filters) will first
6771*dc5640d1SHerbert Xue  be compared against the servlet mapping:
6772*dc5640d1SHerbert Xue
6773*dc5640d1SHerbert Xue <pre>
6774*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
6775*dc5640d1SHerbert Xue </pre>
6776*dc5640d1SHerbert Xue And failing that, it will descend to the next servlet mapping:
6777*dc5640d1SHerbert Xue
6778*dc5640d1SHerbert Xue <pre>
6779*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
6780*dc5640d1SHerbert Xue </pre>
6781*dc5640d1SHerbert Xue
6782*dc5640d1SHerbert Xue Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
6783*dc5640d1SHerbert Xue two mapping rules can also be written in more compact form using varargs syntax:
6784*dc5640d1SHerbert Xue
6785*dc5640d1SHerbert Xue <pre>
6786*dc5640d1SHerbert Xue       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
6787*dc5640d1SHerbert Xue </pre>
6788*dc5640d1SHerbert Xue
6789*dc5640d1SHerbert Xue This way you can map several URI patterns to the same servlet. A similar syntax is
6790*dc5640d1SHerbert Xue also available for filter mappings.
6791*dc5640d1SHerbert Xue
6792*dc5640d1SHerbert Xue <p>
6793*dc5640d1SHerbert Xue <h4>Regular Expressions</h4>
6794*dc5640d1SHerbert Xue You can also map servlets (or filters) to URIs using regular expressions:
6795*dc5640d1SHerbert Xue <pre>
6796*dc5640d1SHerbert Xue    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
6797*dc5640d1SHerbert Xue </pre>
6798*dc5640d1SHerbert Xue
6799*dc5640d1SHerbert Xue This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
6800*dc5640d1SHerbert Xue <ul>
6801*dc5640d1SHerbert Xue <li>http://www.google.com/ajax.html</li>
6802*dc5640d1SHerbert Xue <li>http://www.google.com/content/ajax/index</li>
6803*dc5640d1SHerbert Xue <li>http://www.google.com/it/is_totally_ajaxian</li>
6804*dc5640d1SHerbert Xue </ul>
6805*dc5640d1SHerbert Xue
6806*dc5640d1SHerbert Xue
6807*dc5640d1SHerbert Xue <h3>Initialization Parameters</h3>
6808*dc5640d1SHerbert Xue
6809*dc5640d1SHerbert Xue Servlets (and filters) allow you to pass in init params
6810*dc5640d1SHerbert Xue using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
6811*dc5640d1SHerbert Xue Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
6812*dc5640d1SHerbert Xue name/value pairs. For example, to initialize {@code MyServlet} with two parameters
6813*dc5640d1SHerbert Xue ({@code name="Dhanji", site="google.com"}) you could write:
6814*dc5640d1SHerbert Xue
6815*dc5640d1SHerbert Xue <pre>
6816*dc5640d1SHerbert Xue  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
6817*dc5640d1SHerbert Xue  params.put("name", "Dhanji");
6818*dc5640d1SHerbert Xue  params.put("site", "google.com");
6819*dc5640d1SHerbert Xue
6820*dc5640d1SHerbert Xue  ...
6821*dc5640d1SHerbert Xue      serve("/*").with(MyServlet.class, <b>params</b>)
6822*dc5640d1SHerbert Xue </pre>
6823*dc5640d1SHerbert Xue
6824*dc5640d1SHerbert Xue <p>
6825*dc5640d1SHerbert Xue <h3>Binding Keys</h3>
6826*dc5640d1SHerbert Xue
6827*dc5640d1SHerbert Xue You can also bind keys rather than classes. This lets you hide
6828*dc5640d1SHerbert Xue implementations with package-local visbility and expose them using
6829*dc5640d1SHerbert Xue only a Guice module and an annotation:
6830*dc5640d1SHerbert Xue
6831*dc5640d1SHerbert Xue <pre>
6832*dc5640d1SHerbert Xue  ...
6833*dc5640d1SHerbert Xue      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
6834*dc5640d1SHerbert Xue </pre>
6835*dc5640d1SHerbert Xue
6836*dc5640d1SHerbert Xue Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
6837*dc5640d1SHerbert Xue custom binding annotation. Elsewhere (in one of your own modules) you can bind this
6838*dc5640d1SHerbert Xue filter's implementation:
6839*dc5640d1SHerbert Xue
6840*dc5640d1SHerbert Xue <pre>
6841*dc5640d1SHerbert Xue   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
6842*dc5640d1SHerbert Xue </pre>
6843*dc5640d1SHerbert Xue
6844*dc5640d1SHerbert Xue See {@link com.google.inject.Binder} for more information on binding syntax.
6845*dc5640d1SHerbert Xue
6846*dc5640d1SHerbert Xue <p>
6847*dc5640d1SHerbert Xue <h3>Multiple Modules</h3>
6848*dc5640d1SHerbert Xue
6849*dc5640d1SHerbert Xue It is sometimes useful to capture servlet and filter mappings from multiple different
6850*dc5640d1SHerbert Xue modules. This is essential if you want to package and offer drop-in Guice plugins that
6851*dc5640d1SHerbert Xue provide servlet functionality.
6852*dc5640d1SHerbert Xue
6853*dc5640d1SHerbert Xue <p>
6854*dc5640d1SHerbert Xue Guice Servlet allows you to register several instances of {@code ServletModule} to your
6855*dc5640d1SHerbert Xue injector. The order in which these modules are installed determines the dispatch order
6856*dc5640d1SHerbert Xue of filters and the precedence order of servlets. For example, if you had two servlet modules,
6857*dc5640d1SHerbert Xue {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
6858*dc5640d1SHerbert Xue to the same URI pattern, {@code "/*"}:
6859*dc5640d1SHerbert Xue
6860*dc5640d1SHerbert Xue <p>
6861*dc5640d1SHerbert Xue In {@code RpcModule}:
6862*dc5640d1SHerbert Xue <pre>
6863*dc5640d1SHerbert Xue     filter("/*").through(RpcFilter.class);
6864*dc5640d1SHerbert Xue </pre>
6865*dc5640d1SHerbert Xue
6866*dc5640d1SHerbert Xue In {@code WebServiceModule}:
6867*dc5640d1SHerbert Xue <pre>
6868*dc5640d1SHerbert Xue     filter("/*").through(WebServiceFilter.class);
6869*dc5640d1SHerbert Xue </pre>
6870*dc5640d1SHerbert Xue
6871*dc5640d1SHerbert Xue Then the order in which these filters are dispatched is determined by the order in which
6872*dc5640d1SHerbert Xue the modules are installed:
6873*dc5640d1SHerbert Xue
6874*dc5640d1SHerbert Xue <pre>
6875*dc5640d1SHerbert Xue   <b>install(new WebServiceModule());</b>
6876*dc5640d1SHerbert Xue   install(new RpcModule());
6877*dc5640d1SHerbert Xue </pre>
6878*dc5640d1SHerbert Xue
6879*dc5640d1SHerbert Xue In the case shown above {@code WebServiceFilter} will run first.
6880*dc5640d1SHerbert Xue
6881*dc5640d1SHerbert Xue @since 2.0]]>
6882*dc5640d1SHerbert Xue      </doc>
6883*dc5640d1SHerbert Xue    </method>
6884*dc5640d1SHerbert Xue    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6885*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6886*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6887*dc5640d1SHerbert Xue      deprecated="not deprecated">
6888*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
6889*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
6890*dc5640d1SHerbert Xue      <doc>
6891*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6892*dc5640d1SHerbert Xue @since 2.0]]>
6893*dc5640d1SHerbert Xue      </doc>
6894*dc5640d1SHerbert Xue    </method>
6895*dc5640d1SHerbert Xue    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6896*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6897*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6898*dc5640d1SHerbert Xue      deprecated="not deprecated">
6899*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
6900*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
6901*dc5640d1SHerbert Xue      <doc>
6902*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
6903*dc5640d1SHerbert Xue @since 2.0]]>
6904*dc5640d1SHerbert Xue      </doc>
6905*dc5640d1SHerbert Xue    </method>
6906*dc5640d1SHerbert Xue    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6907*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6908*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6909*dc5640d1SHerbert Xue      deprecated="not deprecated">
6910*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
6911*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
6912*dc5640d1SHerbert Xue      <doc>
6913*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6914*dc5640d1SHerbert Xue @since 2.0]]>
6915*dc5640d1SHerbert Xue      </doc>
6916*dc5640d1SHerbert Xue    </method>
6917*dc5640d1SHerbert Xue    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6918*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6919*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6920*dc5640d1SHerbert Xue      deprecated="not deprecated">
6921*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
6922*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
6923*dc5640d1SHerbert Xue      <doc>
6924*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
6925*dc5640d1SHerbert Xue @since 2.0]]>
6926*dc5640d1SHerbert Xue      </doc>
6927*dc5640d1SHerbert Xue    </method>
6928*dc5640d1SHerbert Xue    <method name="getServletContext" return="ServletContext"
6929*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6930*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6931*dc5640d1SHerbert Xue      deprecated="not deprecated">
6932*dc5640d1SHerbert Xue      <doc>
6933*dc5640d1SHerbert Xue      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
6934*dc5640d1SHerbert Xue create your injector. Otherwise, it returns null.
6935*dc5640d1SHerbert Xue @return The current servlet context.
6936*dc5640d1SHerbert Xue @since 3.0]]>
6937*dc5640d1SHerbert Xue      </doc>
6938*dc5640d1SHerbert Xue    </method>
6939*dc5640d1SHerbert Xue    <doc>
6940*dc5640d1SHerbert Xue    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
6941*dc5640d1SHerbert Xue objects so you can inject the request, response, session, etc.
6942*dc5640d1SHerbert Xue
6943*dc5640d1SHerbert Xue <p>
6944*dc5640d1SHerbert Xue You should subclass this module to register servlets and
6945*dc5640d1SHerbert Xue filters in the {@link #configureServlets()} method.
6946*dc5640d1SHerbert Xue
6947*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
6948*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6949*dc5640d1SHerbert Xue    </doc>
6950*dc5640d1SHerbert Xue  </class>
6951*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletModule -->
6952*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
6953*dc5640d1SHerbert Xue  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
6954*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
6955*dc5640d1SHerbert Xue    deprecated="not deprecated">
6956*dc5640d1SHerbert Xue    <method name="through"
6957*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6958*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6959*dc5640d1SHerbert Xue      deprecated="not deprecated">
6960*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6961*dc5640d1SHerbert Xue    </method>
6962*dc5640d1SHerbert Xue    <method name="through"
6963*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6964*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6965*dc5640d1SHerbert Xue      deprecated="not deprecated">
6966*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6967*dc5640d1SHerbert Xue    </method>
6968*dc5640d1SHerbert Xue    <method name="through"
6969*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6971*dc5640d1SHerbert Xue      deprecated="not deprecated">
6972*dc5640d1SHerbert Xue      <param name="filter" type="Filter"/>
6973*dc5640d1SHerbert Xue      <doc>
6974*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
6975*dc5640d1SHerbert Xue      </doc>
6976*dc5640d1SHerbert Xue    </method>
6977*dc5640d1SHerbert Xue    <method name="through"
6978*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6979*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6980*dc5640d1SHerbert Xue      deprecated="not deprecated">
6981*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6982*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6983*dc5640d1SHerbert Xue    </method>
6984*dc5640d1SHerbert Xue    <method name="through"
6985*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6986*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6987*dc5640d1SHerbert Xue      deprecated="not deprecated">
6988*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6989*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6990*dc5640d1SHerbert Xue    </method>
6991*dc5640d1SHerbert Xue    <method name="through"
6992*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6993*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6994*dc5640d1SHerbert Xue      deprecated="not deprecated">
6995*dc5640d1SHerbert Xue      <param name="filter" type="Filter"/>
6996*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6997*dc5640d1SHerbert Xue      <doc>
6998*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
6999*dc5640d1SHerbert Xue      </doc>
7000*dc5640d1SHerbert Xue    </method>
7001*dc5640d1SHerbert Xue    <doc>
7002*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7003*dc5640d1SHerbert Xue
7004*dc5640d1SHerbert Xue @since 2.0]]>
7005*dc5640d1SHerbert Xue    </doc>
7006*dc5640d1SHerbert Xue  </interface>
7007*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7008*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7009*dc5640d1SHerbert Xue  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7010*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7011*dc5640d1SHerbert Xue    deprecated="not deprecated">
7012*dc5640d1SHerbert Xue    <method name="with"
7013*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7014*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7015*dc5640d1SHerbert Xue      deprecated="not deprecated">
7016*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
7017*dc5640d1SHerbert Xue    </method>
7018*dc5640d1SHerbert Xue    <method name="with"
7019*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7020*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7021*dc5640d1SHerbert Xue      deprecated="not deprecated">
7022*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
7023*dc5640d1SHerbert Xue    </method>
7024*dc5640d1SHerbert Xue    <method name="with"
7025*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7026*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7027*dc5640d1SHerbert Xue      deprecated="not deprecated">
7028*dc5640d1SHerbert Xue      <param name="servlet" type="HttpServlet"/>
7029*dc5640d1SHerbert Xue      <doc>
7030*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7031*dc5640d1SHerbert Xue      </doc>
7032*dc5640d1SHerbert Xue    </method>
7033*dc5640d1SHerbert Xue    <method name="with"
7034*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7035*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7036*dc5640d1SHerbert Xue      deprecated="not deprecated">
7037*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
7038*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7039*dc5640d1SHerbert Xue    </method>
7040*dc5640d1SHerbert Xue    <method name="with"
7041*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7042*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7043*dc5640d1SHerbert Xue      deprecated="not deprecated">
7044*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
7045*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7046*dc5640d1SHerbert Xue    </method>
7047*dc5640d1SHerbert Xue    <method name="with"
7048*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7049*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7050*dc5640d1SHerbert Xue      deprecated="not deprecated">
7051*dc5640d1SHerbert Xue      <param name="servlet" type="HttpServlet"/>
7052*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7053*dc5640d1SHerbert Xue      <doc>
7054*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7055*dc5640d1SHerbert Xue      </doc>
7056*dc5640d1SHerbert Xue    </method>
7057*dc5640d1SHerbert Xue    <doc>
7058*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7059*dc5640d1SHerbert Xue
7060*dc5640d1SHerbert Xue @since 2.0]]>
7061*dc5640d1SHerbert Xue    </doc>
7062*dc5640d1SHerbert Xue  </interface>
7063*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7064*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7065*dc5640d1SHerbert Xue  <interface name="ServletModuleBinding"    abstract="true"
7066*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7067*dc5640d1SHerbert Xue    deprecated="not deprecated">
7068*dc5640d1SHerbert Xue    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7069*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7070*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7071*dc5640d1SHerbert Xue      deprecated="not deprecated">
7072*dc5640d1SHerbert Xue      <doc>
7073*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern type that this binding was created with.]]>
7074*dc5640d1SHerbert Xue      </doc>
7075*dc5640d1SHerbert Xue    </method>
7076*dc5640d1SHerbert Xue    <method name="getPattern" return="java.lang.String"
7077*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7078*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7079*dc5640d1SHerbert Xue      deprecated="not deprecated">
7080*dc5640d1SHerbert Xue      <doc>
7081*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern used to match against the binding.]]>
7082*dc5640d1SHerbert Xue      </doc>
7083*dc5640d1SHerbert Xue    </method>
7084*dc5640d1SHerbert Xue    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7085*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7086*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7087*dc5640d1SHerbert Xue      deprecated="not deprecated">
7088*dc5640d1SHerbert Xue      <doc>
7089*dc5640d1SHerbert Xue      <![CDATA[Returns any context params supplied when creating the binding.]]>
7090*dc5640d1SHerbert Xue      </doc>
7091*dc5640d1SHerbert Xue    </method>
7092*dc5640d1SHerbert Xue    <method name="matchesUri" return="boolean"
7093*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7094*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7095*dc5640d1SHerbert Xue      deprecated="not deprecated">
7096*dc5640d1SHerbert Xue      <param name="uri" type="java.lang.String"/>
7097*dc5640d1SHerbert Xue      <doc>
7098*dc5640d1SHerbert Xue      <![CDATA[Returns true if the given URI will match this binding.]]>
7099*dc5640d1SHerbert Xue      </doc>
7100*dc5640d1SHerbert Xue    </method>
7101*dc5640d1SHerbert Xue    <doc>
7102*dc5640d1SHerbert Xue    <![CDATA[A binding created by {@link ServletModule}.
7103*dc5640d1SHerbert Xue
7104*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
7105*dc5640d1SHerbert Xue @since 3.0]]>
7106*dc5640d1SHerbert Xue    </doc>
7107*dc5640d1SHerbert Xue  </interface>
7108*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7109*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7110*dc5640d1SHerbert Xue  <interface name="ServletModuleTargetVisitor"    abstract="true"
7111*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7112*dc5640d1SHerbert Xue    deprecated="not deprecated">
7113*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7114*dc5640d1SHerbert Xue    <method name="visit" return="V"
7115*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7116*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7117*dc5640d1SHerbert Xue      deprecated="not deprecated">
7118*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7119*dc5640d1SHerbert Xue      <doc>
7120*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7121*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7122*dc5640d1SHerbert Xue
7123*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7124*dc5640d1SHerbert Xue      </doc>
7125*dc5640d1SHerbert Xue    </method>
7126*dc5640d1SHerbert Xue    <method name="visit" return="V"
7127*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7128*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7129*dc5640d1SHerbert Xue      deprecated="not deprecated">
7130*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7131*dc5640d1SHerbert Xue      <doc>
7132*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7133*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7134*dc5640d1SHerbert Xue
7135*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7136*dc5640d1SHerbert Xue      </doc>
7137*dc5640d1SHerbert Xue    </method>
7138*dc5640d1SHerbert Xue    <method name="visit" return="V"
7139*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7140*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7141*dc5640d1SHerbert Xue      deprecated="not deprecated">
7142*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7143*dc5640d1SHerbert Xue      <doc>
7144*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7145*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7146*dc5640d1SHerbert Xue
7147*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7148*dc5640d1SHerbert Xue      </doc>
7149*dc5640d1SHerbert Xue    </method>
7150*dc5640d1SHerbert Xue    <method name="visit" return="V"
7151*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7152*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7153*dc5640d1SHerbert Xue      deprecated="not deprecated">
7154*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7155*dc5640d1SHerbert Xue      <doc>
7156*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7157*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7158*dc5640d1SHerbert Xue
7159*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7160*dc5640d1SHerbert Xue      </doc>
7161*dc5640d1SHerbert Xue    </method>
7162*dc5640d1SHerbert Xue    <doc>
7163*dc5640d1SHerbert Xue    <![CDATA[A visitor for the servlet extension.
7164*dc5640d1SHerbert Xue
7165*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7166*dc5640d1SHerbert Xue {@link ServletModule} will be visited through this interface.
7167*dc5640d1SHerbert Xue
7168*dc5640d1SHerbert Xue @since 3.0
7169*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
7170*dc5640d1SHerbert Xue    </doc>
7171*dc5640d1SHerbert Xue  </interface>
7172*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7173*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletScopes -->
7174*dc5640d1SHerbert Xue  <class name="ServletScopes" extends="java.lang.Object"
7175*dc5640d1SHerbert Xue    abstract="false"
7176*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7177*dc5640d1SHerbert Xue    deprecated="not deprecated">
7178*dc5640d1SHerbert Xue    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7179*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7180*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7181*dc5640d1SHerbert Xue      deprecated="not deprecated">
7182*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7183*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7184*dc5640d1SHerbert Xue      <doc>
7185*dc5640d1SHerbert Xue      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7186*dc5640d1SHerbert Xue HTTP request in another thread. This acts as a way of transporting
7187*dc5640d1SHerbert Xue request context data from the request processing thread to to worker
7188*dc5640d1SHerbert Xue threads.
7189*dc5640d1SHerbert Xue <p>
7190*dc5640d1SHerbert Xue There are some limitations:
7191*dc5640d1SHerbert Xue <ul>
7192*dc5640d1SHerbert Xue   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7193*dc5640d1SHerbert Xue      transported.</li>
7194*dc5640d1SHerbert Xue   <li>State changes to the HttpServletRequest after this method is called
7195*dc5640d1SHerbert Xue      will not be seen in the continued thread.</li>
7196*dc5640d1SHerbert Xue   <li>Only the HttpServletRequest, ServletContext and request parameter
7197*dc5640d1SHerbert Xue      map are available in the continued thread. The response and session
7198*dc5640d1SHerbert Xue      are not available.</li>
7199*dc5640d1SHerbert Xue </ul>
7200*dc5640d1SHerbert Xue
7201*dc5640d1SHerbert Xue @param callable code to be executed in another thread, which depends on
7202*dc5640d1SHerbert Xue     the request scope.
7203*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7204*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7205*dc5640d1SHerbert Xue     the value.
7206*dc5640d1SHerbert Xue @return a callable that will invoke the given callable, making the request
7207*dc5640d1SHerbert Xue     context available to it.
7208*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7209*dc5640d1SHerbert Xue     thread, or if the request has completed.
7210*dc5640d1SHerbert Xue
7211*dc5640d1SHerbert Xue @since 3.0]]>
7212*dc5640d1SHerbert Xue      </doc>
7213*dc5640d1SHerbert Xue    </method>
7214*dc5640d1SHerbert Xue    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7215*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7216*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7217*dc5640d1SHerbert Xue      deprecated="not deprecated">
7218*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7219*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7220*dc5640d1SHerbert Xue      <doc>
7221*dc5640d1SHerbert Xue      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7222*dc5640d1SHerbert Xue as the HTTP request scope, but is used if no HTTP request scope is in
7223*dc5640d1SHerbert Xue progress. In this way, keys can be scoped as @RequestScoped and exist
7224*dc5640d1SHerbert Xue in non-HTTP requests (for example: RPC requests) as well as in HTTP
7225*dc5640d1SHerbert Xue request threads.
7226*dc5640d1SHerbert Xue
7227*dc5640d1SHerbert Xue @param callable code to be executed which depends on the request scope.
7228*dc5640d1SHerbert Xue     Typically in another thread, but not necessarily so.
7229*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7230*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7231*dc5640d1SHerbert Xue     the value.
7232*dc5640d1SHerbert Xue @return a callable that when called will run inside the a request scope
7233*dc5640d1SHerbert Xue     that exposes the instances in the {@code seedMap} as scoped keys.
7234*dc5640d1SHerbert Xue @since 3.0]]>
7235*dc5640d1SHerbert Xue      </doc>
7236*dc5640d1SHerbert Xue    </method>
7237*dc5640d1SHerbert Xue    <field name="REQUEST" type="com.google.inject.Scope"
7238*dc5640d1SHerbert Xue      transient="false" volatile="false"
7239*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7240*dc5640d1SHerbert Xue      deprecated="not deprecated">
7241*dc5640d1SHerbert Xue      <doc>
7242*dc5640d1SHerbert Xue      <![CDATA[HTTP servlet request scope.]]>
7243*dc5640d1SHerbert Xue      </doc>
7244*dc5640d1SHerbert Xue    </field>
7245*dc5640d1SHerbert Xue    <field name="SESSION" type="com.google.inject.Scope"
7246*dc5640d1SHerbert Xue      transient="false" volatile="false"
7247*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7248*dc5640d1SHerbert Xue      deprecated="not deprecated">
7249*dc5640d1SHerbert Xue      <doc>
7250*dc5640d1SHerbert Xue      <![CDATA[HTTP session scope.]]>
7251*dc5640d1SHerbert Xue      </doc>
7252*dc5640d1SHerbert Xue    </field>
7253*dc5640d1SHerbert Xue    <doc>
7254*dc5640d1SHerbert Xue    <![CDATA[Servlet scopes.
7255*dc5640d1SHerbert Xue
7256*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7257*dc5640d1SHerbert Xue    </doc>
7258*dc5640d1SHerbert Xue  </class>
7259*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletScopes -->
7260*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.SessionScoped -->
7261*dc5640d1SHerbert Xue  <class name="SessionScoped"    abstract="true"
7262*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7263*dc5640d1SHerbert Xue    deprecated="not deprecated">
7264*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7265*dc5640d1SHerbert Xue    <doc>
7266*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per session.
7267*dc5640d1SHerbert Xue
7268*dc5640d1SHerbert Xue @see com.google.inject.Scopes#SINGLETON
7269*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7270*dc5640d1SHerbert Xue    </doc>
7271*dc5640d1SHerbert Xue  </class>
7272*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.SessionScoped -->
7273*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.UriPatternType -->
7274*dc5640d1SHerbert Xue  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7275*dc5640d1SHerbert Xue    abstract="false"
7276*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7277*dc5640d1SHerbert Xue    deprecated="not deprecated">
7278*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7279*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7280*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7281*dc5640d1SHerbert Xue      deprecated="not deprecated">
7282*dc5640d1SHerbert Xue    </method>
7283*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7284*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7285*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7286*dc5640d1SHerbert Xue      deprecated="not deprecated">
7287*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
7288*dc5640d1SHerbert Xue    </method>
7289*dc5640d1SHerbert Xue    <doc>
7290*dc5640d1SHerbert Xue    <![CDATA[An enumeration of the available URI-pattern matching styles
7291*dc5640d1SHerbert Xue
7292*dc5640d1SHerbert Xue @since 3.0]]>
7293*dc5640d1SHerbert Xue    </doc>
7294*dc5640d1SHerbert Xue  </class>
7295*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.UriPatternType -->
7296*dc5640d1SHerbert Xue</package>
7297*dc5640d1SHerbert Xue<package name="com.google.inject.spi">
7298*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
7299*dc5640d1SHerbert Xue  <interface name="BindingScopingVisitor"    abstract="true"
7300*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7301*dc5640d1SHerbert Xue    deprecated="not deprecated">
7302*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
7303*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7304*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7305*dc5640d1SHerbert Xue      deprecated="not deprecated">
7306*dc5640d1SHerbert Xue      <doc>
7307*dc5640d1SHerbert Xue      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
7308*dc5640d1SHerbert Xue injector bindings.]]>
7309*dc5640d1SHerbert Xue      </doc>
7310*dc5640d1SHerbert Xue    </method>
7311*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
7312*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7313*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7314*dc5640d1SHerbert Xue      deprecated="not deprecated">
7315*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
7316*dc5640d1SHerbert Xue      <doc>
7317*dc5640d1SHerbert Xue      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
7318*dc5640d1SHerbert Xue      </doc>
7319*dc5640d1SHerbert Xue    </method>
7320*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
7321*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7322*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7323*dc5640d1SHerbert Xue      deprecated="not deprecated">
7324*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7325*dc5640d1SHerbert Xue      <doc>
7326*dc5640d1SHerbert Xue      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
7327*dc5640d1SHerbert Xue that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
7328*dc5640d1SHerbert Xue Scope) Binder.bindScope()}.]]>
7329*dc5640d1SHerbert Xue      </doc>
7330*dc5640d1SHerbert Xue    </method>
7331*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
7332*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7333*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7334*dc5640d1SHerbert Xue      deprecated="not deprecated">
7335*dc5640d1SHerbert Xue      <doc>
7336*dc5640d1SHerbert Xue      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
7337*dc5640d1SHerbert Xue injector should use scoping annotations to find a scope. On an injector, it indicates that
7338*dc5640d1SHerbert Xue no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
7339*dc5640d1SHerbert Xue is linked to a scoped binding.]]>
7340*dc5640d1SHerbert Xue      </doc>
7341*dc5640d1SHerbert Xue    </method>
7342*dc5640d1SHerbert Xue    <doc>
7343*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to scope an injection.
7344*dc5640d1SHerbert Xue
7345*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7346*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7347*dc5640d1SHerbert Xue @since 2.0]]>
7348*dc5640d1SHerbert Xue    </doc>
7349*dc5640d1SHerbert Xue  </interface>
7350*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
7351*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
7352*dc5640d1SHerbert Xue  <interface name="BindingTargetVisitor"    abstract="true"
7353*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7354*dc5640d1SHerbert Xue    deprecated="not deprecated">
7355*dc5640d1SHerbert Xue    <method name="visit" return="V"
7356*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7357*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7358*dc5640d1SHerbert Xue      deprecated="not deprecated">
7359*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7360*dc5640d1SHerbert Xue      <doc>
7361*dc5640d1SHerbert Xue      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
7362*dc5640d1SHerbert Xue found in both module and injector bindings.]]>
7363*dc5640d1SHerbert Xue      </doc>
7364*dc5640d1SHerbert Xue    </method>
7365*dc5640d1SHerbert Xue    <method name="visit" return="V"
7366*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7367*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7368*dc5640d1SHerbert Xue      deprecated="not deprecated">
7369*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7370*dc5640d1SHerbert Xue      <doc>
7371*dc5640d1SHerbert Xue      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
7372*dc5640d1SHerbert Xue injections. This target is found in both module and injector bindings.]]>
7373*dc5640d1SHerbert Xue      </doc>
7374*dc5640d1SHerbert Xue    </method>
7375*dc5640d1SHerbert Xue    <method name="visit" return="V"
7376*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7377*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7378*dc5640d1SHerbert Xue      deprecated="not deprecated">
7379*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7380*dc5640d1SHerbert Xue      <doc>
7381*dc5640d1SHerbert Xue      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
7382*dc5640d1SHerbert Xue that provider's {@code get} method is invoked. This target is found in both module and injector
7383*dc5640d1SHerbert Xue bindings.]]>
7384*dc5640d1SHerbert Xue      </doc>
7385*dc5640d1SHerbert Xue    </method>
7386*dc5640d1SHerbert Xue    <method name="visit" return="V"
7387*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7388*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7389*dc5640d1SHerbert Xue      deprecated="not deprecated">
7390*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7391*dc5640d1SHerbert Xue      <doc>
7392*dc5640d1SHerbert Xue      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
7393*dc5640d1SHerbert Xue target is found in both module and injector bindings.]]>
7394*dc5640d1SHerbert Xue      </doc>
7395*dc5640d1SHerbert Xue    </method>
7396*dc5640d1SHerbert Xue    <method name="visit" return="V"
7397*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7398*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7399*dc5640d1SHerbert Xue      deprecated="not deprecated">
7400*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7401*dc5640d1SHerbert Xue      <doc>
7402*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
7403*dc5640d1SHerbert Xue found in injector bindings.]]>
7404*dc5640d1SHerbert Xue      </doc>
7405*dc5640d1SHerbert Xue    </method>
7406*dc5640d1SHerbert Xue    <method name="visit" return="V"
7407*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7408*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7409*dc5640d1SHerbert Xue      deprecated="not deprecated">
7410*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7411*dc5640d1SHerbert Xue      <doc>
7412*dc5640d1SHerbert Xue      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
7413*dc5640d1SHerbert Xue that the injector should use its implicit binding strategies to resolve injections.]]>
7414*dc5640d1SHerbert Xue      </doc>
7415*dc5640d1SHerbert Xue    </method>
7416*dc5640d1SHerbert Xue    <method name="visit" return="V"
7417*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7418*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7419*dc5640d1SHerbert Xue      deprecated="not deprecated">
7420*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7421*dc5640d1SHerbert Xue      <doc>
7422*dc5640d1SHerbert Xue      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
7423*dc5640d1SHerbert Xue {@code constructor}. This target is found only on injector bindings.]]>
7424*dc5640d1SHerbert Xue      </doc>
7425*dc5640d1SHerbert Xue    </method>
7426*dc5640d1SHerbert Xue    <method name="visit" return="V"
7427*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7428*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7429*dc5640d1SHerbert Xue      deprecated="not deprecated">
7430*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7431*dc5640d1SHerbert Xue      <doc>
7432*dc5640d1SHerbert Xue      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
7433*dc5640d1SHerbert Xue has the same binding annotation but a different type. This target is found only on injector
7434*dc5640d1SHerbert Xue bindings.]]>
7435*dc5640d1SHerbert Xue      </doc>
7436*dc5640d1SHerbert Xue    </method>
7437*dc5640d1SHerbert Xue    <method name="visit" return="V"
7438*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7439*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7440*dc5640d1SHerbert Xue      deprecated="not deprecated">
7441*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7442*dc5640d1SHerbert Xue      <doc>
7443*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
7444*dc5640d1SHerbert Xue provided type. This target is found only on injector bindings.]]>
7445*dc5640d1SHerbert Xue      </doc>
7446*dc5640d1SHerbert Xue    </method>
7447*dc5640d1SHerbert Xue    <doc>
7448*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
7449*dc5640d1SHerbert Xue
7450*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7451*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7452*dc5640d1SHerbert Xue @since 2.0]]>
7453*dc5640d1SHerbert Xue    </doc>
7454*dc5640d1SHerbert Xue  </interface>
7455*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
7456*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConstructorBinding -->
7457*dc5640d1SHerbert Xue  <interface name="ConstructorBinding"    abstract="true"
7458*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7459*dc5640d1SHerbert Xue    deprecated="not deprecated">
7460*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7461*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
7462*dc5640d1SHerbert Xue    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
7463*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7464*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7465*dc5640d1SHerbert Xue      deprecated="not deprecated">
7466*dc5640d1SHerbert Xue      <doc>
7467*dc5640d1SHerbert Xue      <![CDATA[Gets the constructor this binding injects.]]>
7468*dc5640d1SHerbert Xue      </doc>
7469*dc5640d1SHerbert Xue    </method>
7470*dc5640d1SHerbert Xue    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
7471*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7472*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7473*dc5640d1SHerbert Xue      deprecated="not deprecated">
7474*dc5640d1SHerbert Xue      <doc>
7475*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
7476*dc5640d1SHerbert Xue
7477*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
7478*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
7479*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
7480*dc5640d1SHerbert Xue      </doc>
7481*dc5640d1SHerbert Xue    </method>
7482*dc5640d1SHerbert Xue    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
7483*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7484*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7485*dc5640d1SHerbert Xue      deprecated="not deprecated">
7486*dc5640d1SHerbert Xue      <doc>
7487*dc5640d1SHerbert Xue      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
7488*dc5640d1SHerbert Xue
7489*dc5640d1SHerbert Xue @return a possibly empty map]]>
7490*dc5640d1SHerbert Xue      </doc>
7491*dc5640d1SHerbert Xue    </method>
7492*dc5640d1SHerbert Xue    <doc>
7493*dc5640d1SHerbert Xue    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
7494*dc5640d1SHerbert Xue instantiated by invoking the constructor.
7495*dc5640d1SHerbert Xue
7496*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7497*dc5640d1SHerbert Xue @since 2.0]]>
7498*dc5640d1SHerbert Xue    </doc>
7499*dc5640d1SHerbert Xue  </interface>
7500*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConstructorBinding -->
7501*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
7502*dc5640d1SHerbert Xue  <interface name="ConvertedConstantBinding"    abstract="true"
7503*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7504*dc5640d1SHerbert Xue    deprecated="not deprecated">
7505*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7506*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
7507*dc5640d1SHerbert Xue    <method name="getValue" return="T"
7508*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7509*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7510*dc5640d1SHerbert Xue      deprecated="not deprecated">
7511*dc5640d1SHerbert Xue      <doc>
7512*dc5640d1SHerbert Xue      <![CDATA[Returns the converted value.]]>
7513*dc5640d1SHerbert Xue      </doc>
7514*dc5640d1SHerbert Xue    </method>
7515*dc5640d1SHerbert Xue    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
7516*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7517*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7518*dc5640d1SHerbert Xue      deprecated="not deprecated">
7519*dc5640d1SHerbert Xue      <doc>
7520*dc5640d1SHerbert Xue      <![CDATA[Returns the type converter binding used to convert the constant.
7521*dc5640d1SHerbert Xue
7522*dc5640d1SHerbert Xue @since 3.0]]>
7523*dc5640d1SHerbert Xue      </doc>
7524*dc5640d1SHerbert Xue    </method>
7525*dc5640d1SHerbert Xue    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
7526*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7527*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7528*dc5640d1SHerbert Xue      deprecated="not deprecated">
7529*dc5640d1SHerbert Xue      <doc>
7530*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the source binding. That binding can e retrieved from an injector using
7531*dc5640d1SHerbert Xue {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
7532*dc5640d1SHerbert Xue      </doc>
7533*dc5640d1SHerbert Xue    </method>
7534*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7535*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7536*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7537*dc5640d1SHerbert Xue      deprecated="not deprecated">
7538*dc5640d1SHerbert Xue      <doc>
7539*dc5640d1SHerbert Xue      <![CDATA[Returns a singleton set containing only the converted key.]]>
7540*dc5640d1SHerbert Xue      </doc>
7541*dc5640d1SHerbert Xue    </method>
7542*dc5640d1SHerbert Xue    <doc>
7543*dc5640d1SHerbert Xue    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
7544*dc5640d1SHerbert Xue binding annotation but a different type.
7545*dc5640d1SHerbert Xue
7546*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7547*dc5640d1SHerbert Xue @since 2.0]]>
7548*dc5640d1SHerbert Xue    </doc>
7549*dc5640d1SHerbert Xue  </interface>
7550*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
7551*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
7552*dc5640d1SHerbert Xue  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
7553*dc5640d1SHerbert Xue    abstract="false"
7554*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7555*dc5640d1SHerbert Xue    deprecated="not deprecated">
7556*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
7557*dc5640d1SHerbert Xue    <constructor name="DefaultBindingScopingVisitor"
7558*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7559*dc5640d1SHerbert Xue      deprecated="not deprecated">
7560*dc5640d1SHerbert Xue    </constructor>
7561*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
7562*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7563*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7564*dc5640d1SHerbert Xue      deprecated="not deprecated">
7565*dc5640d1SHerbert Xue      <doc>
7566*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7567*dc5640d1SHerbert Xue      </doc>
7568*dc5640d1SHerbert Xue    </method>
7569*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
7570*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7571*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7572*dc5640d1SHerbert Xue      deprecated="not deprecated">
7573*dc5640d1SHerbert Xue    </method>
7574*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
7575*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7576*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7577*dc5640d1SHerbert Xue      deprecated="not deprecated">
7578*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
7579*dc5640d1SHerbert Xue    </method>
7580*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
7581*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7582*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7583*dc5640d1SHerbert Xue      deprecated="not deprecated">
7584*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7585*dc5640d1SHerbert Xue    </method>
7586*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
7587*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7588*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7589*dc5640d1SHerbert Xue      deprecated="not deprecated">
7590*dc5640d1SHerbert Xue    </method>
7591*dc5640d1SHerbert Xue    <doc>
7592*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7593*dc5640d1SHerbert Xue {@link #visitOther()}, returning its result.
7594*dc5640d1SHerbert Xue
7595*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7596*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7597*dc5640d1SHerbert Xue
7598*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7599*dc5640d1SHerbert Xue @since 2.0]]>
7600*dc5640d1SHerbert Xue    </doc>
7601*dc5640d1SHerbert Xue  </class>
7602*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
7603*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
7604*dc5640d1SHerbert Xue  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
7605*dc5640d1SHerbert Xue    abstract="true"
7606*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7607*dc5640d1SHerbert Xue    deprecated="not deprecated">
7608*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7609*dc5640d1SHerbert Xue    <constructor name="DefaultBindingTargetVisitor"
7610*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7611*dc5640d1SHerbert Xue      deprecated="not deprecated">
7612*dc5640d1SHerbert Xue    </constructor>
7613*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
7614*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7615*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7616*dc5640d1SHerbert Xue      deprecated="not deprecated">
7617*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
7618*dc5640d1SHerbert Xue      <doc>
7619*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7620*dc5640d1SHerbert Xue      </doc>
7621*dc5640d1SHerbert Xue    </method>
7622*dc5640d1SHerbert Xue    <method name="visit" return="V"
7623*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7624*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7625*dc5640d1SHerbert Xue      deprecated="not deprecated">
7626*dc5640d1SHerbert Xue      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7627*dc5640d1SHerbert Xue    </method>
7628*dc5640d1SHerbert Xue    <method name="visit" return="V"
7629*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7630*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7631*dc5640d1SHerbert Xue      deprecated="not deprecated">
7632*dc5640d1SHerbert Xue      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7633*dc5640d1SHerbert Xue    </method>
7634*dc5640d1SHerbert Xue    <method name="visit" return="V"
7635*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7636*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7637*dc5640d1SHerbert Xue      deprecated="not deprecated">
7638*dc5640d1SHerbert Xue      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7639*dc5640d1SHerbert Xue    </method>
7640*dc5640d1SHerbert Xue    <method name="visit" return="V"
7641*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7642*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7643*dc5640d1SHerbert Xue      deprecated="not deprecated">
7644*dc5640d1SHerbert Xue      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7645*dc5640d1SHerbert Xue    </method>
7646*dc5640d1SHerbert Xue    <method name="visit" return="V"
7647*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7648*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7649*dc5640d1SHerbert Xue      deprecated="not deprecated">
7650*dc5640d1SHerbert Xue      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7651*dc5640d1SHerbert Xue    </method>
7652*dc5640d1SHerbert Xue    <method name="visit" return="V"
7653*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7654*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7655*dc5640d1SHerbert Xue      deprecated="not deprecated">
7656*dc5640d1SHerbert Xue      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7657*dc5640d1SHerbert Xue    </method>
7658*dc5640d1SHerbert Xue    <method name="visit" return="V"
7659*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7660*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7661*dc5640d1SHerbert Xue      deprecated="not deprecated">
7662*dc5640d1SHerbert Xue      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7663*dc5640d1SHerbert Xue    </method>
7664*dc5640d1SHerbert Xue    <method name="visit" return="V"
7665*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7666*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7667*dc5640d1SHerbert Xue      deprecated="not deprecated">
7668*dc5640d1SHerbert Xue      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7669*dc5640d1SHerbert Xue    </method>
7670*dc5640d1SHerbert Xue    <method name="visit" return="V"
7671*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7672*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7673*dc5640d1SHerbert Xue      deprecated="not deprecated">
7674*dc5640d1SHerbert Xue      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7675*dc5640d1SHerbert Xue    </method>
7676*dc5640d1SHerbert Xue    <doc>
7677*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
7678*dc5640d1SHerbert Xue #visitOther(Binding)}, returning its result.
7679*dc5640d1SHerbert Xue
7680*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7681*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7682*dc5640d1SHerbert Xue
7683*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7684*dc5640d1SHerbert Xue @since 2.0]]>
7685*dc5640d1SHerbert Xue    </doc>
7686*dc5640d1SHerbert Xue  </class>
7687*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
7688*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
7689*dc5640d1SHerbert Xue  <class name="DefaultElementVisitor" extends="java.lang.Object"
7690*dc5640d1SHerbert Xue    abstract="true"
7691*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7692*dc5640d1SHerbert Xue    deprecated="not deprecated">
7693*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
7694*dc5640d1SHerbert Xue    <constructor name="DefaultElementVisitor"
7695*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7696*dc5640d1SHerbert Xue      deprecated="not deprecated">
7697*dc5640d1SHerbert Xue    </constructor>
7698*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
7699*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7700*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7701*dc5640d1SHerbert Xue      deprecated="not deprecated">
7702*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
7703*dc5640d1SHerbert Xue      <doc>
7704*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7705*dc5640d1SHerbert Xue      </doc>
7706*dc5640d1SHerbert Xue    </method>
7707*dc5640d1SHerbert Xue    <method name="visit" return="V"
7708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7709*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7710*dc5640d1SHerbert Xue      deprecated="not deprecated">
7711*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
7712*dc5640d1SHerbert Xue    </method>
7713*dc5640d1SHerbert Xue    <method name="visit" return="V"
7714*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7715*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7716*dc5640d1SHerbert Xue      deprecated="not deprecated">
7717*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
7718*dc5640d1SHerbert Xue    </method>
7719*dc5640d1SHerbert Xue    <method name="visit" return="V"
7720*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7721*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7722*dc5640d1SHerbert Xue      deprecated="not deprecated">
7723*dc5640d1SHerbert Xue      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
7724*dc5640d1SHerbert Xue    </method>
7725*dc5640d1SHerbert Xue    <method name="visit" return="V"
7726*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7727*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7728*dc5640d1SHerbert Xue      deprecated="not deprecated">
7729*dc5640d1SHerbert Xue      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
7730*dc5640d1SHerbert Xue    </method>
7731*dc5640d1SHerbert Xue    <method name="visit" return="V"
7732*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7733*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7734*dc5640d1SHerbert Xue      deprecated="not deprecated">
7735*dc5640d1SHerbert Xue      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
7736*dc5640d1SHerbert Xue    </method>
7737*dc5640d1SHerbert Xue    <method name="visit" return="V"
7738*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7739*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7740*dc5640d1SHerbert Xue      deprecated="not deprecated">
7741*dc5640d1SHerbert Xue      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
7742*dc5640d1SHerbert Xue    </method>
7743*dc5640d1SHerbert Xue    <method name="visit" return="V"
7744*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7745*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7746*dc5640d1SHerbert Xue      deprecated="not deprecated">
7747*dc5640d1SHerbert Xue      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
7748*dc5640d1SHerbert Xue    </method>
7749*dc5640d1SHerbert Xue    <method name="visit" return="V"
7750*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7751*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7752*dc5640d1SHerbert Xue      deprecated="not deprecated">
7753*dc5640d1SHerbert Xue      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
7754*dc5640d1SHerbert Xue    </method>
7755*dc5640d1SHerbert Xue    <method name="visit" return="V"
7756*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7757*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7758*dc5640d1SHerbert Xue      deprecated="not deprecated">
7759*dc5640d1SHerbert Xue      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
7760*dc5640d1SHerbert Xue    </method>
7761*dc5640d1SHerbert Xue    <method name="visit" return="V"
7762*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7763*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7764*dc5640d1SHerbert Xue      deprecated="not deprecated">
7765*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
7766*dc5640d1SHerbert Xue    </method>
7767*dc5640d1SHerbert Xue    <method name="visit" return="V"
7768*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7769*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7770*dc5640d1SHerbert Xue      deprecated="not deprecated">
7771*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
7772*dc5640d1SHerbert Xue    </method>
7773*dc5640d1SHerbert Xue    <method name="visit" return="V"
7774*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7775*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7776*dc5640d1SHerbert Xue      deprecated="not deprecated">
7777*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
7778*dc5640d1SHerbert Xue    </method>
7779*dc5640d1SHerbert Xue    <method name="visit" return="V"
7780*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7781*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7782*dc5640d1SHerbert Xue      deprecated="not deprecated">
7783*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
7784*dc5640d1SHerbert Xue    </method>
7785*dc5640d1SHerbert Xue    <doc>
7786*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7787*dc5640d1SHerbert Xue {@link #visitOther(Element)}, returning its result.
7788*dc5640d1SHerbert Xue
7789*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7790*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7791*dc5640d1SHerbert Xue
7792*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
7793*dc5640d1SHerbert Xue @since 2.0]]>
7794*dc5640d1SHerbert Xue    </doc>
7795*dc5640d1SHerbert Xue  </class>
7796*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
7797*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Dependency -->
7798*dc5640d1SHerbert Xue  <class name="Dependency" extends="java.lang.Object"
7799*dc5640d1SHerbert Xue    abstract="false"
7800*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7801*dc5640d1SHerbert Xue    deprecated="not deprecated">
7802*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
7803*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7804*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7805*dc5640d1SHerbert Xue      deprecated="not deprecated">
7806*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
7807*dc5640d1SHerbert Xue      <doc>
7808*dc5640d1SHerbert Xue      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
7809*dc5640d1SHerbert Xue nullable.]]>
7810*dc5640d1SHerbert Xue      </doc>
7811*dc5640d1SHerbert Xue    </method>
7812*dc5640d1SHerbert Xue    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7813*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7814*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7815*dc5640d1SHerbert Xue      deprecated="not deprecated">
7816*dc5640d1SHerbert Xue      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
7817*dc5640d1SHerbert Xue      <doc>
7818*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies from the given injection points.]]>
7819*dc5640d1SHerbert Xue      </doc>
7820*dc5640d1SHerbert Xue    </method>
7821*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
7822*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7823*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7824*dc5640d1SHerbert Xue      deprecated="not deprecated">
7825*dc5640d1SHerbert Xue      <doc>
7826*dc5640d1SHerbert Xue      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
7827*dc5640d1SHerbert Xue      </doc>
7828*dc5640d1SHerbert Xue    </method>
7829*dc5640d1SHerbert Xue    <method name="isNullable" return="boolean"
7830*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7832*dc5640d1SHerbert Xue      deprecated="not deprecated">
7833*dc5640d1SHerbert Xue      <doc>
7834*dc5640d1SHerbert Xue      <![CDATA[Returns true if null is a legal value for this dependency.]]>
7835*dc5640d1SHerbert Xue      </doc>
7836*dc5640d1SHerbert Xue    </method>
7837*dc5640d1SHerbert Xue    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
7838*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7839*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7840*dc5640d1SHerbert Xue      deprecated="not deprecated">
7841*dc5640d1SHerbert Xue      <doc>
7842*dc5640d1SHerbert Xue      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
7843*dc5640d1SHerbert Xue attached to a particular injection point.]]>
7844*dc5640d1SHerbert Xue      </doc>
7845*dc5640d1SHerbert Xue    </method>
7846*dc5640d1SHerbert Xue    <method name="getParameterIndex" return="int"
7847*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7848*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7849*dc5640d1SHerbert Xue      deprecated="not deprecated">
7850*dc5640d1SHerbert Xue      <doc>
7851*dc5640d1SHerbert Xue      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
7852*dc5640d1SHerbert Xue this dependency does not belong to a parameter list. Only method and constuctor dependencies
7853*dc5640d1SHerbert Xue are elements in a parameter list.]]>
7854*dc5640d1SHerbert Xue      </doc>
7855*dc5640d1SHerbert Xue    </method>
7856*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
7857*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7858*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7859*dc5640d1SHerbert Xue      deprecated="not deprecated">
7860*dc5640d1SHerbert Xue    </method>
7861*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
7862*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7863*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7864*dc5640d1SHerbert Xue      deprecated="not deprecated">
7865*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
7866*dc5640d1SHerbert Xue    </method>
7867*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
7868*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7870*dc5640d1SHerbert Xue      deprecated="not deprecated">
7871*dc5640d1SHerbert Xue    </method>
7872*dc5640d1SHerbert Xue    <doc>
7873*dc5640d1SHerbert Xue    <![CDATA[A variable that can be resolved by an injector.
7874*dc5640d1SHerbert Xue
7875*dc5640d1SHerbert Xue <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
7876*dc5640d1SHerbert Xue that's attached to a constructor, method or field.
7877*dc5640d1SHerbert Xue
7878*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7879*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7880*dc5640d1SHerbert Xue @since 2.0]]>
7881*dc5640d1SHerbert Xue    </doc>
7882*dc5640d1SHerbert Xue  </class>
7883*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Dependency -->
7884*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
7885*dc5640d1SHerbert Xue  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
7886*dc5640d1SHerbert Xue    abstract="false"
7887*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7888*dc5640d1SHerbert Xue    deprecated="not deprecated">
7889*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
7890*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
7891*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7892*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7893*dc5640d1SHerbert Xue      deprecated="not deprecated">
7894*dc5640d1SHerbert Xue    </method>
7895*dc5640d1SHerbert Xue    <method name="applyTo"
7896*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7897*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7898*dc5640d1SHerbert Xue      deprecated="not deprecated">
7899*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
7900*dc5640d1SHerbert Xue    </method>
7901*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
7902*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7903*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7904*dc5640d1SHerbert Xue      deprecated="not deprecated">
7905*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7906*dc5640d1SHerbert Xue    </method>
7907*dc5640d1SHerbert Xue    <doc>
7908*dc5640d1SHerbert Xue    <![CDATA[A request to disable circular proxies.
7909*dc5640d1SHerbert Xue
7910*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
7911*dc5640d1SHerbert Xue @since 3.0]]>
7912*dc5640d1SHerbert Xue    </doc>
7913*dc5640d1SHerbert Xue  </class>
7914*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
7915*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.Element -->
7916*dc5640d1SHerbert Xue  <interface name="Element"    abstract="true"
7917*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7918*dc5640d1SHerbert Xue    deprecated="not deprecated">
7919*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
7920*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7921*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7922*dc5640d1SHerbert Xue      deprecated="not deprecated">
7923*dc5640d1SHerbert Xue      <doc>
7924*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
7925*dc5640d1SHerbert Xue configured. Used by Guice in the production of descriptive error messages.
7926*dc5640d1SHerbert Xue
7927*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
7928*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
7929*dc5640d1SHerbert Xue unfamiliar.]]>
7930*dc5640d1SHerbert Xue      </doc>
7931*dc5640d1SHerbert Xue    </method>
7932*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
7933*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7934*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7935*dc5640d1SHerbert Xue      deprecated="not deprecated">
7936*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7937*dc5640d1SHerbert Xue      <doc>
7938*dc5640d1SHerbert Xue      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
7939*dc5640d1SHerbert Xue
7940*dc5640d1SHerbert Xue @param visitor to call back on]]>
7941*dc5640d1SHerbert Xue      </doc>
7942*dc5640d1SHerbert Xue    </method>
7943*dc5640d1SHerbert Xue    <method name="applyTo"
7944*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7945*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7946*dc5640d1SHerbert Xue      deprecated="not deprecated">
7947*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
7948*dc5640d1SHerbert Xue      <doc>
7949*dc5640d1SHerbert Xue      <![CDATA[Writes this module element to the given binder (optional operation).
7950*dc5640d1SHerbert Xue
7951*dc5640d1SHerbert Xue @param binder to apply configuration element to
7952*dc5640d1SHerbert Xue @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
7953*dc5640d1SHerbert Xue     element.]]>
7954*dc5640d1SHerbert Xue      </doc>
7955*dc5640d1SHerbert Xue    </method>
7956*dc5640d1SHerbert Xue    <doc>
7957*dc5640d1SHerbert Xue    <![CDATA[A core component of a module or injector.
7958*dc5640d1SHerbert Xue
7959*dc5640d1SHerbert Xue <p>The elements of a module can be inspected, validated and rewritten. Use {@link
7960*dc5640d1SHerbert Xue Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
7961*dc5640d1SHerbert Xue from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
7962*dc5640d1SHerbert Xue This can be used for static analysis and generation of Guice modules.
7963*dc5640d1SHerbert Xue
7964*dc5640d1SHerbert Xue <p>The elements of an injector can be inspected and exercised. Use {@link
7965*dc5640d1SHerbert Xue com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
7966*dc5640d1SHerbert Xue
7967*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
7968*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7969*dc5640d1SHerbert Xue @since 2.0]]>
7970*dc5640d1SHerbert Xue    </doc>
7971*dc5640d1SHerbert Xue  </interface>
7972*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.Element -->
7973*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Elements -->
7974*dc5640d1SHerbert Xue  <class name="Elements" extends="java.lang.Object"
7975*dc5640d1SHerbert Xue    abstract="false"
7976*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7977*dc5640d1SHerbert Xue    deprecated="not deprecated">
7978*dc5640d1SHerbert Xue    <constructor name="Elements"
7979*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7980*dc5640d1SHerbert Xue      deprecated="not deprecated">
7981*dc5640d1SHerbert Xue    </constructor>
7982*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
7983*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7984*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7985*dc5640d1SHerbert Xue      deprecated="not deprecated">
7986*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
7987*dc5640d1SHerbert Xue      <doc>
7988*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
7989*dc5640d1SHerbert Xue      </doc>
7990*dc5640d1SHerbert Xue    </method>
7991*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
7992*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7993*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7994*dc5640d1SHerbert Xue      deprecated="not deprecated">
7995*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
7996*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
7997*dc5640d1SHerbert Xue      <doc>
7998*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
7999*dc5640d1SHerbert Xue      </doc>
8000*dc5640d1SHerbert Xue    </method>
8001*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8002*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8003*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8004*dc5640d1SHerbert Xue      deprecated="not deprecated">
8005*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8006*dc5640d1SHerbert Xue      <doc>
8007*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8008*dc5640d1SHerbert Xue      </doc>
8009*dc5640d1SHerbert Xue    </method>
8010*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8011*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8012*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8013*dc5640d1SHerbert Xue      deprecated="not deprecated">
8014*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
8015*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8016*dc5640d1SHerbert Xue      <doc>
8017*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8018*dc5640d1SHerbert Xue      </doc>
8019*dc5640d1SHerbert Xue    </method>
8020*dc5640d1SHerbert Xue    <method name="getModule" return="com.google.inject.Module"
8021*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8022*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8023*dc5640d1SHerbert Xue      deprecated="not deprecated">
8024*dc5640d1SHerbert Xue      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8025*dc5640d1SHerbert Xue      <doc>
8026*dc5640d1SHerbert Xue      <![CDATA[Returns the module composed of {@code elements}.]]>
8027*dc5640d1SHerbert Xue      </doc>
8028*dc5640d1SHerbert Xue    </method>
8029*dc5640d1SHerbert Xue    <doc>
8030*dc5640d1SHerbert Xue    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8031*dc5640d1SHerbert Xue Element#applyTo(Binder) rewritten}.
8032*dc5640d1SHerbert Xue
8033*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8034*dc5640d1SHerbert Xue @since 2.0]]>
8035*dc5640d1SHerbert Xue    </doc>
8036*dc5640d1SHerbert Xue  </class>
8037*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Elements -->
8038*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ElementVisitor -->
8039*dc5640d1SHerbert Xue  <interface name="ElementVisitor"    abstract="true"
8040*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8041*dc5640d1SHerbert Xue    deprecated="not deprecated">
8042*dc5640d1SHerbert Xue    <method name="visit" return="V"
8043*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8044*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8045*dc5640d1SHerbert Xue      deprecated="not deprecated">
8046*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8047*dc5640d1SHerbert Xue      <doc>
8048*dc5640d1SHerbert Xue      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8049*dc5640d1SHerbert Xue instances of the type.]]>
8050*dc5640d1SHerbert Xue      </doc>
8051*dc5640d1SHerbert Xue    </method>
8052*dc5640d1SHerbert Xue    <method name="visit" return="V"
8053*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8054*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8055*dc5640d1SHerbert Xue      deprecated="not deprecated">
8056*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8057*dc5640d1SHerbert Xue      <doc>
8058*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8059*dc5640d1SHerbert Xue      </doc>
8060*dc5640d1SHerbert Xue    </method>
8061*dc5640d1SHerbert Xue    <method name="visit" return="V"
8062*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8063*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8064*dc5640d1SHerbert Xue      deprecated="not deprecated">
8065*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8066*dc5640d1SHerbert Xue      <doc>
8067*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8068*dc5640d1SHerbert Xue      </doc>
8069*dc5640d1SHerbert Xue    </method>
8070*dc5640d1SHerbert Xue    <method name="visit" return="V"
8071*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8072*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8073*dc5640d1SHerbert Xue      deprecated="not deprecated">
8074*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8075*dc5640d1SHerbert Xue      <doc>
8076*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of type converters for matching target types.]]>
8077*dc5640d1SHerbert Xue      </doc>
8078*dc5640d1SHerbert Xue    </method>
8079*dc5640d1SHerbert Xue    <method name="visit" return="V"
8080*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8081*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8082*dc5640d1SHerbert Xue      deprecated="not deprecated">
8083*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8084*dc5640d1SHerbert Xue      <doc>
8085*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8086*dc5640d1SHerbert Xue      </doc>
8087*dc5640d1SHerbert Xue    </method>
8088*dc5640d1SHerbert Xue    <method name="visit" return="V"
8089*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8090*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8091*dc5640d1SHerbert Xue      deprecated="not deprecated">
8092*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8093*dc5640d1SHerbert Xue      <doc>
8094*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8095*dc5640d1SHerbert Xue      </doc>
8096*dc5640d1SHerbert Xue    </method>
8097*dc5640d1SHerbert Xue    <method name="visit" return="V"
8098*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8099*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8100*dc5640d1SHerbert Xue      deprecated="not deprecated">
8101*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8102*dc5640d1SHerbert Xue      <doc>
8103*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the provider for a type.]]>
8104*dc5640d1SHerbert Xue      </doc>
8105*dc5640d1SHerbert Xue    </method>
8106*dc5640d1SHerbert Xue    <method name="visit" return="V"
8107*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8108*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8109*dc5640d1SHerbert Xue      deprecated="not deprecated">
8110*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8111*dc5640d1SHerbert Xue      <doc>
8112*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the members injector.]]>
8113*dc5640d1SHerbert Xue      </doc>
8114*dc5640d1SHerbert Xue    </method>
8115*dc5640d1SHerbert Xue    <method name="visit" return="V"
8116*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8117*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8118*dc5640d1SHerbert Xue      deprecated="not deprecated">
8119*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
8120*dc5640d1SHerbert Xue      <doc>
8121*dc5640d1SHerbert Xue      <![CDATA[Visit an error message and the context in which it occured.]]>
8122*dc5640d1SHerbert Xue      </doc>
8123*dc5640d1SHerbert Xue    </method>
8124*dc5640d1SHerbert Xue    <method name="visit" return="V"
8125*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8126*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8127*dc5640d1SHerbert Xue      deprecated="not deprecated">
8128*dc5640d1SHerbert Xue      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
8129*dc5640d1SHerbert Xue      <doc>
8130*dc5640d1SHerbert Xue      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
8131*dc5640d1SHerbert Xue private binder}.]]>
8132*dc5640d1SHerbert Xue      </doc>
8133*dc5640d1SHerbert Xue    </method>
8134*dc5640d1SHerbert Xue    <method name="visit" return="V"
8135*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8136*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8137*dc5640d1SHerbert Xue      deprecated="not deprecated">
8138*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8139*dc5640d1SHerbert Xue      <doc>
8140*dc5640d1SHerbert Xue      <![CDATA[Visit an injectable type listener binding.]]>
8141*dc5640d1SHerbert Xue      </doc>
8142*dc5640d1SHerbert Xue    </method>
8143*dc5640d1SHerbert Xue    <method name="visit" return="V"
8144*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8145*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8146*dc5640d1SHerbert Xue      deprecated="not deprecated">
8147*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8148*dc5640d1SHerbert Xue      <doc>
8149*dc5640d1SHerbert Xue      <![CDATA[Visit a require explicit bindings command.
8150*dc5640d1SHerbert Xue
8151*dc5640d1SHerbert Xue @since 3.0]]>
8152*dc5640d1SHerbert Xue      </doc>
8153*dc5640d1SHerbert Xue    </method>
8154*dc5640d1SHerbert Xue    <method name="visit" return="V"
8155*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8156*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8157*dc5640d1SHerbert Xue      deprecated="not deprecated">
8158*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8159*dc5640d1SHerbert Xue      <doc>
8160*dc5640d1SHerbert Xue      <![CDATA[Visit a disable circular proxies command.
8161*dc5640d1SHerbert Xue
8162*dc5640d1SHerbert Xue @since 3.0]]>
8163*dc5640d1SHerbert Xue      </doc>
8164*dc5640d1SHerbert Xue    </method>
8165*dc5640d1SHerbert Xue    <doc>
8166*dc5640d1SHerbert Xue    <![CDATA[Visit elements.
8167*dc5640d1SHerbert Xue
8168*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8169*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8170*dc5640d1SHerbert Xue
8171*dc5640d1SHerbert Xue @since 2.0]]>
8172*dc5640d1SHerbert Xue    </doc>
8173*dc5640d1SHerbert Xue  </interface>
8174*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ElementVisitor -->
8175*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ExposedBinding -->
8176*dc5640d1SHerbert Xue  <interface name="ExposedBinding"    abstract="true"
8177*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8178*dc5640d1SHerbert Xue    deprecated="not deprecated">
8179*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8180*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8181*dc5640d1SHerbert Xue    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
8182*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8183*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8184*dc5640d1SHerbert Xue      deprecated="not deprecated">
8185*dc5640d1SHerbert Xue      <doc>
8186*dc5640d1SHerbert Xue      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
8187*dc5640d1SHerbert Xue      </doc>
8188*dc5640d1SHerbert Xue    </method>
8189*dc5640d1SHerbert Xue    <method name="applyTo"
8190*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8191*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8192*dc5640d1SHerbert Xue      deprecated="not deprecated">
8193*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8194*dc5640d1SHerbert Xue      <doc>
8195*dc5640d1SHerbert Xue      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
8196*dc5640d1SHerbert Xue      </doc>
8197*dc5640d1SHerbert Xue    </method>
8198*dc5640d1SHerbert Xue    <doc>
8199*dc5640d1SHerbert Xue    <![CDATA[A binding to a key exposed from an enclosed private environment.
8200*dc5640d1SHerbert Xue
8201*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8202*dc5640d1SHerbert Xue @since 2.0]]>
8203*dc5640d1SHerbert Xue    </doc>
8204*dc5640d1SHerbert Xue  </interface>
8205*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ExposedBinding -->
8206*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.HasDependencies -->
8207*dc5640d1SHerbert Xue  <interface name="HasDependencies"    abstract="true"
8208*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8209*dc5640d1SHerbert Xue    deprecated="not deprecated">
8210*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8211*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8212*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8213*dc5640d1SHerbert Xue      deprecated="not deprecated">
8214*dc5640d1SHerbert Xue      <doc>
8215*dc5640d1SHerbert Xue      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
8216*dc5640d1SHerbert Xue known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
8217*dc5640d1SHerbert Xue included in the returned set.
8218*dc5640d1SHerbert Xue
8219*dc5640d1SHerbert Xue @return a possibly empty set]]>
8220*dc5640d1SHerbert Xue      </doc>
8221*dc5640d1SHerbert Xue    </method>
8222*dc5640d1SHerbert Xue    <doc>
8223*dc5640d1SHerbert Xue    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
8224*dc5640d1SHerbert Xue providers} and instances that expose their dependencies explicitly.
8225*dc5640d1SHerbert Xue
8226*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8227*dc5640d1SHerbert Xue @since 2.0]]>
8228*dc5640d1SHerbert Xue    </doc>
8229*dc5640d1SHerbert Xue  </interface>
8230*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.HasDependencies -->
8231*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InjectionListener -->
8232*dc5640d1SHerbert Xue  <interface name="InjectionListener"    abstract="true"
8233*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8234*dc5640d1SHerbert Xue    deprecated="not deprecated">
8235*dc5640d1SHerbert Xue    <method name="afterInjection"
8236*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8237*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8238*dc5640d1SHerbert Xue      deprecated="not deprecated">
8239*dc5640d1SHerbert Xue      <param name="injectee" type="I"/>
8240*dc5640d1SHerbert Xue      <doc>
8241*dc5640d1SHerbert Xue      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
8242*dc5640d1SHerbert Xue
8243*dc5640d1SHerbert Xue @param injectee instance that Guice injected dependencies into]]>
8244*dc5640d1SHerbert Xue      </doc>
8245*dc5640d1SHerbert Xue    </method>
8246*dc5640d1SHerbert Xue    <doc>
8247*dc5640d1SHerbert Xue    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
8248*dc5640d1SHerbert Xue injections, post-injection initialization, and more.
8249*dc5640d1SHerbert Xue
8250*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8251*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8252*dc5640d1SHerbert Xue @since 2.0]]>
8253*dc5640d1SHerbert Xue    </doc>
8254*dc5640d1SHerbert Xue  </interface>
8255*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InjectionListener -->
8256*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionPoint -->
8257*dc5640d1SHerbert Xue  <class name="InjectionPoint" extends="java.lang.Object"
8258*dc5640d1SHerbert Xue    abstract="false"
8259*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8260*dc5640d1SHerbert Xue    deprecated="not deprecated">
8261*dc5640d1SHerbert Xue    <method name="getMember" return="java.lang.reflect.Member"
8262*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8263*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8264*dc5640d1SHerbert Xue      deprecated="not deprecated">
8265*dc5640d1SHerbert Xue      <doc>
8266*dc5640d1SHerbert Xue      <![CDATA[Returns the injected constructor, field, or method.]]>
8267*dc5640d1SHerbert Xue      </doc>
8268*dc5640d1SHerbert Xue    </method>
8269*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8270*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8271*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8272*dc5640d1SHerbert Xue      deprecated="not deprecated">
8273*dc5640d1SHerbert Xue      <doc>
8274*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
8275*dc5640d1SHerbert Xue constructor, the dependencies will correspond to that member's parameters. Field injection
8276*dc5640d1SHerbert Xue points always have a single dependency for the field itself.
8277*dc5640d1SHerbert Xue
8278*dc5640d1SHerbert Xue @return a possibly-empty list]]>
8279*dc5640d1SHerbert Xue      </doc>
8280*dc5640d1SHerbert Xue    </method>
8281*dc5640d1SHerbert Xue    <method name="isOptional" return="boolean"
8282*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8283*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8284*dc5640d1SHerbert Xue      deprecated="not deprecated">
8285*dc5640d1SHerbert Xue      <doc>
8286*dc5640d1SHerbert Xue      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
8287*dc5640d1SHerbert Xue for all required dependencies. Both explicit bindings (as specified in a module), and implicit
8288*dc5640d1SHerbert Xue bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
8289*dc5640d1SHerbert Xue constructors etc.) may be used to satisfy optional injection points.]]>
8290*dc5640d1SHerbert Xue      </doc>
8291*dc5640d1SHerbert Xue    </method>
8292*dc5640d1SHerbert Xue    <method name="isToolable" return="boolean"
8293*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8294*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8295*dc5640d1SHerbert Xue      deprecated="not deprecated">
8296*dc5640d1SHerbert Xue      <doc>
8297*dc5640d1SHerbert Xue      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
8298*dc5640d1SHerbert Xue
8299*dc5640d1SHerbert Xue @since 3.0]]>
8300*dc5640d1SHerbert Xue      </doc>
8301*dc5640d1SHerbert Xue    </method>
8302*dc5640d1SHerbert Xue    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
8303*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8304*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8305*dc5640d1SHerbert Xue      deprecated="not deprecated">
8306*dc5640d1SHerbert Xue      <doc>
8307*dc5640d1SHerbert Xue      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
8308*dc5640d1SHerbert Xue parameterized type, the result will include more type information than the member's {@link
8309*dc5640d1SHerbert Xue Member#getDeclaringClass() raw declaring class}.
8310*dc5640d1SHerbert Xue
8311*dc5640d1SHerbert Xue @since 3.0]]>
8312*dc5640d1SHerbert Xue      </doc>
8313*dc5640d1SHerbert Xue    </method>
8314*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
8315*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8316*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8317*dc5640d1SHerbert Xue      deprecated="not deprecated">
8318*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
8319*dc5640d1SHerbert Xue    </method>
8320*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
8321*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8322*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8323*dc5640d1SHerbert Xue      deprecated="not deprecated">
8324*dc5640d1SHerbert Xue    </method>
8325*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8326*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8327*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8328*dc5640d1SHerbert Xue      deprecated="not deprecated">
8329*dc5640d1SHerbert Xue    </method>
8330*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8331*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8332*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8333*dc5640d1SHerbert Xue      deprecated="not deprecated">
8334*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8335*dc5640d1SHerbert Xue      <doc>
8336*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
8337*dc5640d1SHerbert Xue constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
8338*dc5640d1SHerbert Xue type literal.
8339*dc5640d1SHerbert Xue
8340*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
8341*dc5640d1SHerbert Xue
8342*dc5640d1SHerbert Xue @since 3.0]]>
8343*dc5640d1SHerbert Xue      </doc>
8344*dc5640d1SHerbert Xue    </method>
8345*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8346*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8347*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8348*dc5640d1SHerbert Xue      deprecated="not deprecated">
8349*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8350*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
8351*dc5640d1SHerbert Xue      <doc>
8352*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
8353*dc5640d1SHerbert Xue
8354*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
8355*dc5640d1SHerbert Xue @param type the concrete type that defines {@code constructor}.
8356*dc5640d1SHerbert Xue
8357*dc5640d1SHerbert Xue @since 3.0]]>
8358*dc5640d1SHerbert Xue      </doc>
8359*dc5640d1SHerbert Xue    </method>
8360*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8361*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8362*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8363*dc5640d1SHerbert Xue      deprecated="not deprecated">
8364*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8365*dc5640d1SHerbert Xue      <doc>
8366*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8367*dc5640d1SHerbert Xue
8368*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8369*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
8370*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
8371*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
8372*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
8373*dc5640d1SHerbert Xue      </doc>
8374*dc5640d1SHerbert Xue    </method>
8375*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8376*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8377*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8378*dc5640d1SHerbert Xue      deprecated="not deprecated">
8379*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8380*dc5640d1SHerbert Xue      <doc>
8381*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8382*dc5640d1SHerbert Xue
8383*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8384*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
8385*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
8386*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
8387*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
8388*dc5640d1SHerbert Xue      </doc>
8389*dc5640d1SHerbert Xue    </method>
8390*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8391*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8392*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8393*dc5640d1SHerbert Xue      deprecated="not deprecated">
8394*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8395*dc5640d1SHerbert Xue      <doc>
8396*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
8397*dc5640d1SHerbert Xue
8398*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8399*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8400*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8401*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8402*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
8403*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8404*dc5640d1SHerbert Xue      of the valid injection points.]]>
8405*dc5640d1SHerbert Xue      </doc>
8406*dc5640d1SHerbert Xue    </method>
8407*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8408*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8409*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8410*dc5640d1SHerbert Xue      deprecated="not deprecated">
8411*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8412*dc5640d1SHerbert Xue      <doc>
8413*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
8414*dc5640d1SHerbert Xue
8415*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8416*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8417*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8418*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8419*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
8420*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8421*dc5640d1SHerbert Xue      of the valid injection points.]]>
8422*dc5640d1SHerbert Xue      </doc>
8423*dc5640d1SHerbert Xue    </method>
8424*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8425*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8426*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8427*dc5640d1SHerbert Xue      deprecated="not deprecated">
8428*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8429*dc5640d1SHerbert Xue      <doc>
8430*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
8431*dc5640d1SHerbert Xue
8432*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8433*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8434*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8435*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8436*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
8437*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8438*dc5640d1SHerbert Xue      of the valid injection points.]]>
8439*dc5640d1SHerbert Xue      </doc>
8440*dc5640d1SHerbert Xue    </method>
8441*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8442*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8443*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8444*dc5640d1SHerbert Xue      deprecated="not deprecated">
8445*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8446*dc5640d1SHerbert Xue      <doc>
8447*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
8448*dc5640d1SHerbert Xue
8449*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8450*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8451*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8452*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8453*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
8454*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8455*dc5640d1SHerbert Xue      of the valid injection points.]]>
8456*dc5640d1SHerbert Xue      </doc>
8457*dc5640d1SHerbert Xue    </method>
8458*dc5640d1SHerbert Xue    <doc>
8459*dc5640d1SHerbert Xue    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
8460*dc5640d1SHerbert Xue {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
8461*dc5640d1SHerbert Xue omit the annotation.
8462*dc5640d1SHerbert Xue
8463*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8464*dc5640d1SHerbert Xue @since 2.0]]>
8465*dc5640d1SHerbert Xue    </doc>
8466*dc5640d1SHerbert Xue  </class>
8467*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionPoint -->
8468*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionRequest -->
8469*dc5640d1SHerbert Xue  <class name="InjectionRequest" extends="java.lang.Object"
8470*dc5640d1SHerbert Xue    abstract="false"
8471*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8472*dc5640d1SHerbert Xue    deprecated="not deprecated">
8473*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8474*dc5640d1SHerbert Xue    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
8475*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8476*dc5640d1SHerbert Xue      deprecated="not deprecated">
8477*dc5640d1SHerbert Xue    </constructor>
8478*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8479*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8480*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8481*dc5640d1SHerbert Xue      deprecated="not deprecated">
8482*dc5640d1SHerbert Xue    </method>
8483*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
8484*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8485*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8486*dc5640d1SHerbert Xue      deprecated="not deprecated">
8487*dc5640d1SHerbert Xue    </method>
8488*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8489*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8490*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8491*dc5640d1SHerbert Xue      deprecated="not deprecated">
8492*dc5640d1SHerbert Xue    </method>
8493*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8494*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8495*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8496*dc5640d1SHerbert Xue      deprecated="not deprecated">
8497*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
8498*dc5640d1SHerbert Xue      <doc>
8499*dc5640d1SHerbert Xue      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
8500*dc5640d1SHerbert Xue this request.
8501*dc5640d1SHerbert Xue
8502*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8503*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8504*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8505*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on the class of {@code
8506*dc5640d1SHerbert Xue      instance}, such as a field with multiple binding annotations. The exception's {@link
8507*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8508*dc5640d1SHerbert Xue      of the valid injection points.]]>
8509*dc5640d1SHerbert Xue      </doc>
8510*dc5640d1SHerbert Xue    </method>
8511*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="R"
8512*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8513*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8514*dc5640d1SHerbert Xue      deprecated="not deprecated">
8515*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
8516*dc5640d1SHerbert Xue    </method>
8517*dc5640d1SHerbert Xue    <method name="applyTo"
8518*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8519*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8520*dc5640d1SHerbert Xue      deprecated="not deprecated">
8521*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8522*dc5640d1SHerbert Xue    </method>
8523*dc5640d1SHerbert Xue    <doc>
8524*dc5640d1SHerbert Xue    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
8525*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
8526*dc5640d1SHerbert Xue requestInjection()} statements:
8527*dc5640d1SHerbert Xue <pre>
8528*dc5640d1SHerbert Xue     requestInjection(serviceInstance);</pre>
8529*dc5640d1SHerbert Xue
8530*dc5640d1SHerbert Xue @author [email protected] (Mike Ward)
8531*dc5640d1SHerbert Xue @since 2.0]]>
8532*dc5640d1SHerbert Xue    </doc>
8533*dc5640d1SHerbert Xue  </class>
8534*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionRequest -->
8535*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InstanceBinding -->
8536*dc5640d1SHerbert Xue  <interface name="InstanceBinding"    abstract="true"
8537*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8538*dc5640d1SHerbert Xue    deprecated="not deprecated">
8539*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8540*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8541*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
8542*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8543*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8544*dc5640d1SHerbert Xue      deprecated="not deprecated">
8545*dc5640d1SHerbert Xue      <doc>
8546*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied instance.]]>
8547*dc5640d1SHerbert Xue      </doc>
8548*dc5640d1SHerbert Xue    </method>
8549*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8550*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8551*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8552*dc5640d1SHerbert Xue      deprecated="not deprecated">
8553*dc5640d1SHerbert Xue      <doc>
8554*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
8555*dc5640d1SHerbert Xue time only.
8556*dc5640d1SHerbert Xue
8557*dc5640d1SHerbert Xue @return a possibly empty set]]>
8558*dc5640d1SHerbert Xue      </doc>
8559*dc5640d1SHerbert Xue    </method>
8560*dc5640d1SHerbert Xue    <doc>
8561*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
8562*dc5640d1SHerbert Xue
8563*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8564*dc5640d1SHerbert Xue @since 2.0]]>
8565*dc5640d1SHerbert Xue    </doc>
8566*dc5640d1SHerbert Xue  </interface>
8567*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InstanceBinding -->
8568*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InterceptorBinding -->
8569*dc5640d1SHerbert Xue  <class name="InterceptorBinding" extends="java.lang.Object"
8570*dc5640d1SHerbert Xue    abstract="false"
8571*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8572*dc5640d1SHerbert Xue    deprecated="not deprecated">
8573*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8574*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8575*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8576*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8577*dc5640d1SHerbert Xue      deprecated="not deprecated">
8578*dc5640d1SHerbert Xue    </method>
8579*dc5640d1SHerbert Xue    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
8580*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8581*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8582*dc5640d1SHerbert Xue      deprecated="not deprecated">
8583*dc5640d1SHerbert Xue    </method>
8584*dc5640d1SHerbert Xue    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
8585*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8586*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8587*dc5640d1SHerbert Xue      deprecated="not deprecated">
8588*dc5640d1SHerbert Xue    </method>
8589*dc5640d1SHerbert Xue    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
8590*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8591*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8592*dc5640d1SHerbert Xue      deprecated="not deprecated">
8593*dc5640d1SHerbert Xue    </method>
8594*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8595*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8596*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8597*dc5640d1SHerbert Xue      deprecated="not deprecated">
8598*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8599*dc5640d1SHerbert Xue    </method>
8600*dc5640d1SHerbert Xue    <method name="applyTo"
8601*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8602*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8603*dc5640d1SHerbert Xue      deprecated="not deprecated">
8604*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8605*dc5640d1SHerbert Xue    </method>
8606*dc5640d1SHerbert Xue    <doc>
8607*dc5640d1SHerbert Xue    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
8608*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
8609*dc5640d1SHerbert Xue Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
8610*dc5640d1SHerbert Xue <pre>
8611*dc5640d1SHerbert Xue     bindInterceptor(Matchers.subclassesOf(MyAction.class),
8612*dc5640d1SHerbert Xue         Matchers.annotatedWith(Transactional.class),
8613*dc5640d1SHerbert Xue         new MyTransactionInterceptor());</pre>
8614*dc5640d1SHerbert Xue
8615*dc5640d1SHerbert Xue or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
8616*dc5640d1SHerbert Xue org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
8617*dc5640d1SHerbert Xue
8618*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8619*dc5640d1SHerbert Xue @since 2.0]]>
8620*dc5640d1SHerbert Xue    </doc>
8621*dc5640d1SHerbert Xue  </class>
8622*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InterceptorBinding -->
8623*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
8624*dc5640d1SHerbert Xue  <interface name="LinkedKeyBinding"    abstract="true"
8625*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8626*dc5640d1SHerbert Xue    deprecated="not deprecated">
8627*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8628*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
8629*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8630*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8631*dc5640d1SHerbert Xue      deprecated="not deprecated">
8632*dc5640d1SHerbert Xue      <doc>
8633*dc5640d1SHerbert Xue      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
8634*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8635*dc5640d1SHerbert Xue      </doc>
8636*dc5640d1SHerbert Xue    </method>
8637*dc5640d1SHerbert Xue    <doc>
8638*dc5640d1SHerbert Xue    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
8639*dc5640d1SHerbert Xue
8640*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8641*dc5640d1SHerbert Xue @since 2.0]]>
8642*dc5640d1SHerbert Xue    </doc>
8643*dc5640d1SHerbert Xue  </interface>
8644*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
8645*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
8646*dc5640d1SHerbert Xue  <class name="MembersInjectorLookup" extends="java.lang.Object"
8647*dc5640d1SHerbert Xue    abstract="false"
8648*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8649*dc5640d1SHerbert Xue    deprecated="not deprecated">
8650*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8651*dc5640d1SHerbert Xue    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
8652*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8653*dc5640d1SHerbert Xue      deprecated="not deprecated">
8654*dc5640d1SHerbert Xue    </constructor>
8655*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8656*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8657*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8658*dc5640d1SHerbert Xue      deprecated="not deprecated">
8659*dc5640d1SHerbert Xue    </method>
8660*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8661*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8662*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8663*dc5640d1SHerbert Xue      deprecated="not deprecated">
8664*dc5640d1SHerbert Xue      <doc>
8665*dc5640d1SHerbert Xue      <![CDATA[Gets the type containing the members to be injected.]]>
8666*dc5640d1SHerbert Xue      </doc>
8667*dc5640d1SHerbert Xue    </method>
8668*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8669*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8670*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8671*dc5640d1SHerbert Xue      deprecated="not deprecated">
8672*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8673*dc5640d1SHerbert Xue    </method>
8674*dc5640d1SHerbert Xue    <method name="initializeDelegate"
8675*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8676*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8677*dc5640d1SHerbert Xue      deprecated="not deprecated">
8678*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
8679*dc5640d1SHerbert Xue      <doc>
8680*dc5640d1SHerbert Xue      <![CDATA[Sets the actual members injector.
8681*dc5640d1SHerbert Xue
8682*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
8683*dc5640d1SHerbert Xue      </doc>
8684*dc5640d1SHerbert Xue    </method>
8685*dc5640d1SHerbert Xue    <method name="applyTo"
8686*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8687*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8688*dc5640d1SHerbert Xue      deprecated="not deprecated">
8689*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8690*dc5640d1SHerbert Xue    </method>
8691*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
8692*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8693*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8694*dc5640d1SHerbert Xue      deprecated="not deprecated">
8695*dc5640d1SHerbert Xue      <doc>
8696*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
8697*dc5640d1SHerbert Xue The delegate will be initialized when this element is processed, or otherwise used to create
8698*dc5640d1SHerbert Xue an injector.]]>
8699*dc5640d1SHerbert Xue      </doc>
8700*dc5640d1SHerbert Xue    </method>
8701*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
8702*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8703*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8704*dc5640d1SHerbert Xue      deprecated="not deprecated">
8705*dc5640d1SHerbert Xue      <doc>
8706*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
8707*dc5640d1SHerbert Xue initialized, which usually happens when the injector is created. The members injector will
8708*dc5640d1SHerbert Xue throw an {@code IllegalStateException} if you try to use it beforehand.]]>
8709*dc5640d1SHerbert Xue      </doc>
8710*dc5640d1SHerbert Xue    </method>
8711*dc5640d1SHerbert Xue    <doc>
8712*dc5640d1SHerbert Xue    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
8713*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
8714*dc5640d1SHerbert Xue <pre>
8715*dc5640d1SHerbert Xue     MembersInjector&lt;PaymentService&gt; membersInjector
8716*dc5640d1SHerbert Xue         = getMembersInjector(PaymentService.class);</pre>
8717*dc5640d1SHerbert Xue
8718*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8719*dc5640d1SHerbert Xue @since 2.0]]>
8720*dc5640d1SHerbert Xue    </doc>
8721*dc5640d1SHerbert Xue  </class>
8722*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
8723*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Message -->
8724*dc5640d1SHerbert Xue  <class name="Message" extends="java.lang.Object"
8725*dc5640d1SHerbert Xue    abstract="false"
8726*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8727*dc5640d1SHerbert Xue    deprecated="not deprecated">
8728*dc5640d1SHerbert Xue    <implements name="java.io.Serializable"/>
8729*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8730*dc5640d1SHerbert Xue    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
8731*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8732*dc5640d1SHerbert Xue      deprecated="not deprecated">
8733*dc5640d1SHerbert Xue      <doc>
8734*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
8735*dc5640d1SHerbert Xue      </doc>
8736*dc5640d1SHerbert Xue    </constructor>
8737*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.Object, java.lang.String"
8738*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8739*dc5640d1SHerbert Xue      deprecated="not deprecated">
8740*dc5640d1SHerbert Xue    </constructor>
8741*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.String"
8742*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8743*dc5640d1SHerbert Xue      deprecated="not deprecated">
8744*dc5640d1SHerbert Xue    </constructor>
8745*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
8746*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8747*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8748*dc5640d1SHerbert Xue      deprecated="not deprecated">
8749*dc5640d1SHerbert Xue    </method>
8750*dc5640d1SHerbert Xue    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
8751*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8752*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8753*dc5640d1SHerbert Xue      deprecated="not deprecated">
8754*dc5640d1SHerbert Xue      <doc>
8755*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
8756*dc5640d1SHerbert Xue      </doc>
8757*dc5640d1SHerbert Xue    </method>
8758*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
8759*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8760*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8761*dc5640d1SHerbert Xue      deprecated="not deprecated">
8762*dc5640d1SHerbert Xue      <doc>
8763*dc5640d1SHerbert Xue      <![CDATA[Gets the error message text.]]>
8764*dc5640d1SHerbert Xue      </doc>
8765*dc5640d1SHerbert Xue    </method>
8766*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8767*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8768*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8769*dc5640d1SHerbert Xue      deprecated="not deprecated">
8770*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8771*dc5640d1SHerbert Xue      <doc>
8772*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
8773*dc5640d1SHerbert Xue      </doc>
8774*dc5640d1SHerbert Xue    </method>
8775*dc5640d1SHerbert Xue    <method name="getCause" return="java.lang.Throwable"
8776*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8777*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8778*dc5640d1SHerbert Xue      deprecated="not deprecated">
8779*dc5640d1SHerbert Xue      <doc>
8780*dc5640d1SHerbert Xue      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
8781*dc5640d1SHerbert Xue message was not caused by a throwable.
8782*dc5640d1SHerbert Xue
8783*dc5640d1SHerbert Xue @since 2.0]]>
8784*dc5640d1SHerbert Xue      </doc>
8785*dc5640d1SHerbert Xue    </method>
8786*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8787*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8788*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8789*dc5640d1SHerbert Xue      deprecated="not deprecated">
8790*dc5640d1SHerbert Xue    </method>
8791*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
8792*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8793*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8794*dc5640d1SHerbert Xue      deprecated="not deprecated">
8795*dc5640d1SHerbert Xue    </method>
8796*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
8797*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8798*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8799*dc5640d1SHerbert Xue      deprecated="not deprecated">
8800*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
8801*dc5640d1SHerbert Xue    </method>
8802*dc5640d1SHerbert Xue    <method name="applyTo"
8803*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8804*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8805*dc5640d1SHerbert Xue      deprecated="not deprecated">
8806*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8807*dc5640d1SHerbert Xue      <doc>
8808*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
8809*dc5640d1SHerbert Xue      </doc>
8810*dc5640d1SHerbert Xue    </method>
8811*dc5640d1SHerbert Xue    <doc>
8812*dc5640d1SHerbert Xue    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
8813*dc5640d1SHerbert Xue Guice and its extensions. Messages can be created explicitly in a module using {@link
8814*dc5640d1SHerbert Xue com.google.inject.Binder#addError(Throwable) addError()} statements:
8815*dc5640d1SHerbert Xue <pre>
8816*dc5640d1SHerbert Xue     try {
8817*dc5640d1SHerbert Xue       bindPropertiesFromFile();
8818*dc5640d1SHerbert Xue     } catch (IOException e) {
8819*dc5640d1SHerbert Xue       addError(e);
8820*dc5640d1SHerbert Xue     }</pre>
8821*dc5640d1SHerbert Xue
8822*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
8823*dc5640d1SHerbert Xue    </doc>
8824*dc5640d1SHerbert Xue  </class>
8825*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Message -->
8826*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.PrivateElements -->
8827*dc5640d1SHerbert Xue  <interface name="PrivateElements"    abstract="true"
8828*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8829*dc5640d1SHerbert Xue    deprecated="not deprecated">
8830*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8831*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8832*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8833*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8834*dc5640d1SHerbert Xue      deprecated="not deprecated">
8835*dc5640d1SHerbert Xue      <doc>
8836*dc5640d1SHerbert Xue      <![CDATA[Returns the configuration information in this private environment.]]>
8837*dc5640d1SHerbert Xue      </doc>
8838*dc5640d1SHerbert Xue    </method>
8839*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
8840*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8841*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8842*dc5640d1SHerbert Xue      deprecated="not deprecated">
8843*dc5640d1SHerbert Xue      <doc>
8844*dc5640d1SHerbert Xue      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
8845*dc5640d1SHerbert Xue been used to create an injector.]]>
8846*dc5640d1SHerbert Xue      </doc>
8847*dc5640d1SHerbert Xue    </method>
8848*dc5640d1SHerbert Xue    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
8849*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8850*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8851*dc5640d1SHerbert Xue      deprecated="not deprecated">
8852*dc5640d1SHerbert Xue      <doc>
8853*dc5640d1SHerbert Xue      <![CDATA[Returns the unique exposed keys for these private elements.]]>
8854*dc5640d1SHerbert Xue      </doc>
8855*dc5640d1SHerbert Xue    </method>
8856*dc5640d1SHerbert Xue    <method name="getExposedSource" return="java.lang.Object"
8857*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8858*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8859*dc5640d1SHerbert Xue      deprecated="not deprecated">
8860*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
8861*dc5640d1SHerbert Xue      <doc>
8862*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
8863*dc5640d1SHerbert Xue exposed. Used by Guice in the production of descriptive error messages.
8864*dc5640d1SHerbert Xue
8865*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8866*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
8867*dc5640d1SHerbert Xue unfamiliar.
8868*dc5640d1SHerbert Xue
8869*dc5640d1SHerbert Xue @param key one of the keys exposed by this module.]]>
8870*dc5640d1SHerbert Xue      </doc>
8871*dc5640d1SHerbert Xue    </method>
8872*dc5640d1SHerbert Xue    <doc>
8873*dc5640d1SHerbert Xue    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
8874*dc5640d1SHerbert Xue default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
8875*dc5640d1SHerbert Xue
8876*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8877*dc5640d1SHerbert Xue @since 2.0]]>
8878*dc5640d1SHerbert Xue    </doc>
8879*dc5640d1SHerbert Xue  </interface>
8880*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.PrivateElements -->
8881*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderBinding -->
8882*dc5640d1SHerbert Xue  <interface name="ProviderBinding"    abstract="true"
8883*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8884*dc5640d1SHerbert Xue    deprecated="not deprecated">
8885*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8886*dc5640d1SHerbert Xue    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
8887*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8888*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8889*dc5640d1SHerbert Xue      deprecated="not deprecated">
8890*dc5640d1SHerbert Xue      <doc>
8891*dc5640d1SHerbert Xue      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
8892*dc5640d1SHerbert Xue can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
8893*dc5640d1SHerbert Xue Injector.getBinding(providedKey)}]]>
8894*dc5640d1SHerbert Xue      </doc>
8895*dc5640d1SHerbert Xue    </method>
8896*dc5640d1SHerbert Xue    <doc>
8897*dc5640d1SHerbert Xue    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
8898*dc5640d1SHerbert Xue is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
8899*dc5640d1SHerbert Xue
8900*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8901*dc5640d1SHerbert Xue @since 2.0]]>
8902*dc5640d1SHerbert Xue    </doc>
8903*dc5640d1SHerbert Xue  </interface>
8904*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderBinding -->
8905*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
8906*dc5640d1SHerbert Xue  <interface name="ProviderInstanceBinding"    abstract="true"
8907*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8908*dc5640d1SHerbert Xue    deprecated="not deprecated">
8909*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8910*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8911*dc5640d1SHerbert Xue    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
8912*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8913*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8914*dc5640d1SHerbert Xue      deprecated="not deprecated">
8915*dc5640d1SHerbert Xue      <doc>
8916*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied, unscoped provider.]]>
8917*dc5640d1SHerbert Xue      </doc>
8918*dc5640d1SHerbert Xue    </method>
8919*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8920*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8921*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8922*dc5640d1SHerbert Xue      deprecated="not deprecated">
8923*dc5640d1SHerbert Xue      <doc>
8924*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
8925*dc5640d1SHerbert Xue time only.
8926*dc5640d1SHerbert Xue
8927*dc5640d1SHerbert Xue @return a possibly empty set]]>
8928*dc5640d1SHerbert Xue      </doc>
8929*dc5640d1SHerbert Xue    </method>
8930*dc5640d1SHerbert Xue    <doc>
8931*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
8932*dc5640d1SHerbert Xue injections.
8933*dc5640d1SHerbert Xue
8934*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8935*dc5640d1SHerbert Xue @since 2.0]]>
8936*dc5640d1SHerbert Xue    </doc>
8937*dc5640d1SHerbert Xue  </interface>
8938*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
8939*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
8940*dc5640d1SHerbert Xue  <interface name="ProviderKeyBinding"    abstract="true"
8941*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8942*dc5640d1SHerbert Xue    deprecated="not deprecated">
8943*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8944*dc5640d1SHerbert Xue    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
8945*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8946*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8947*dc5640d1SHerbert Xue      deprecated="not deprecated">
8948*dc5640d1SHerbert Xue      <doc>
8949*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
8950*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key)
8951*dc5640d1SHerbert Xue Injector.getBinding(providerKey)}]]>
8952*dc5640d1SHerbert Xue      </doc>
8953*dc5640d1SHerbert Xue    </method>
8954*dc5640d1SHerbert Xue    <doc>
8955*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
8956*dc5640d1SHerbert Xue provider's {@code get} method is invoked.
8957*dc5640d1SHerbert Xue
8958*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8959*dc5640d1SHerbert Xue @since 2.0]]>
8960*dc5640d1SHerbert Xue    </doc>
8961*dc5640d1SHerbert Xue  </interface>
8962*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
8963*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProviderLookup -->
8964*dc5640d1SHerbert Xue  <class name="ProviderLookup" extends="java.lang.Object"
8965*dc5640d1SHerbert Xue    abstract="false"
8966*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8967*dc5640d1SHerbert Xue    deprecated="not deprecated">
8968*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8969*dc5640d1SHerbert Xue    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
8970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8971*dc5640d1SHerbert Xue      deprecated="not deprecated">
8972*dc5640d1SHerbert Xue    </constructor>
8973*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8974*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8975*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8976*dc5640d1SHerbert Xue      deprecated="not deprecated">
8977*dc5640d1SHerbert Xue    </method>
8978*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8979*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8980*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8981*dc5640d1SHerbert Xue      deprecated="not deprecated">
8982*dc5640d1SHerbert Xue    </method>
8983*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8984*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8985*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8986*dc5640d1SHerbert Xue      deprecated="not deprecated">
8987*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8988*dc5640d1SHerbert Xue    </method>
8989*dc5640d1SHerbert Xue    <method name="initializeDelegate"
8990*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8991*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8992*dc5640d1SHerbert Xue      deprecated="not deprecated">
8993*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
8994*dc5640d1SHerbert Xue      <doc>
8995*dc5640d1SHerbert Xue      <![CDATA[Sets the actual provider.
8996*dc5640d1SHerbert Xue
8997*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
8998*dc5640d1SHerbert Xue      </doc>
8999*dc5640d1SHerbert Xue    </method>
9000*dc5640d1SHerbert Xue    <method name="applyTo"
9001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9002*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9003*dc5640d1SHerbert Xue      deprecated="not deprecated">
9004*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9005*dc5640d1SHerbert Xue    </method>
9006*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
9007*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9008*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9009*dc5640d1SHerbert Xue      deprecated="not deprecated">
9010*dc5640d1SHerbert Xue      <doc>
9011*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
9012*dc5640d1SHerbert Xue will be initialized when this element is processed, or otherwise used to create an injector.]]>
9013*dc5640d1SHerbert Xue      </doc>
9014*dc5640d1SHerbert Xue    </method>
9015*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9016*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9017*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9018*dc5640d1SHerbert Xue      deprecated="not deprecated">
9019*dc5640d1SHerbert Xue      <doc>
9020*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
9021*dc5640d1SHerbert Xue which usually happens when the injector is created. The provider will throw an {@code
9022*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.]]>
9023*dc5640d1SHerbert Xue      </doc>
9024*dc5640d1SHerbert Xue    </method>
9025*dc5640d1SHerbert Xue    <doc>
9026*dc5640d1SHerbert Xue    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
9027*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
9028*dc5640d1SHerbert Xue <pre>
9029*dc5640d1SHerbert Xue     Provider&lt;PaymentService&gt; paymentServiceProvider
9030*dc5640d1SHerbert Xue         = getProvider(PaymentService.class);</pre>
9031*dc5640d1SHerbert Xue
9032*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9033*dc5640d1SHerbert Xue @since 2.0]]>
9034*dc5640d1SHerbert Xue    </doc>
9035*dc5640d1SHerbert Xue  </class>
9036*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProviderLookup -->
9037*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
9038*dc5640d1SHerbert Xue  <interface name="ProviderWithDependencies"    abstract="true"
9039*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9040*dc5640d1SHerbert Xue    deprecated="not deprecated">
9041*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9042*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9043*dc5640d1SHerbert Xue    <doc>
9044*dc5640d1SHerbert Xue    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
9045*dc5640d1SHerbert Xue aren't specified in injections, this interface should be used to expose all dependencies.
9046*dc5640d1SHerbert Xue
9047*dc5640d1SHerbert Xue @since 2.0]]>
9048*dc5640d1SHerbert Xue    </doc>
9049*dc5640d1SHerbert Xue  </interface>
9050*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
9051*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9052*dc5640d1SHerbert Xue  <interface name="ProviderWithExtensionVisitor"    abstract="true"
9053*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9054*dc5640d1SHerbert Xue    deprecated="not deprecated">
9055*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9056*dc5640d1SHerbert Xue    <method name="acceptExtensionVisitor" return="V"
9057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9058*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9059*dc5640d1SHerbert Xue      deprecated="not deprecated">
9060*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
9061*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
9062*dc5640d1SHerbert Xue      <doc>
9063*dc5640d1SHerbert Xue      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
9064*dc5640d1SHerbert Xue extension visitor, and if so, visit it using that method. If the visitor is
9065*dc5640d1SHerbert Xue not an instance of the custom extension visitor, this method <b>MUST</b>
9066*dc5640d1SHerbert Xue call visitor.visit(binding).
9067*dc5640d1SHerbert Xue <p>
9068*dc5640d1SHerbert Xue Due to issues with generics, the type parameters of this method do not
9069*dc5640d1SHerbert Xue relate to the type of the provider. In practice, the 'B' type will always
9070*dc5640d1SHerbert Xue be a supertype of 'T'.]]>
9071*dc5640d1SHerbert Xue      </doc>
9072*dc5640d1SHerbert Xue    </method>
9073*dc5640d1SHerbert Xue    <doc>
9074*dc5640d1SHerbert Xue    <![CDATA[A Provider that is part of an extension which supports a custom
9075*dc5640d1SHerbert Xue BindingTargetVisitor.
9076*dc5640d1SHerbert Xue <p>
9077*dc5640d1SHerbert Xue When an extension binds a provider instance, the provider can implement this
9078*dc5640d1SHerbert Xue interface to allow users using the
9079*dc5640d1SHerbert Xue {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
9080*dc5640d1SHerbert Xue custom visitor designed for that extension. A typical implementation within
9081*dc5640d1SHerbert Xue the extension would look like
9082*dc5640d1SHerbert Xue <pre>
9083*dc5640d1SHerbert Xue &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
9084*dc5640d1SHerbert Xue   if(visitor instanceof MyCustomExtensionVisitor) {
9085*dc5640d1SHerbert Xue     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
9086*dc5640d1SHerbert Xue   } else {
9087*dc5640d1SHerbert Xue     return visitor.visit(binding);
9088*dc5640d1SHerbert Xue   }
9089*dc5640d1SHerbert Xue }</pre>
9090*dc5640d1SHerbert Xue 'MyCustomExtensionVisitor' in the example above would be an interface the
9091*dc5640d1SHerbert Xue extension provides that users can implement in order to be notified of custom
9092*dc5640d1SHerbert Xue extension information. These visitor interfaces must extend from
9093*dc5640d1SHerbert Xue BindingTargetVisitor.
9094*dc5640d1SHerbert Xue
9095*dc5640d1SHerbert Xue @since 3.0
9096*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
9097*dc5640d1SHerbert Xue    </doc>
9098*dc5640d1SHerbert Xue  </interface>
9099*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9100*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
9101*dc5640d1SHerbert Xue  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
9102*dc5640d1SHerbert Xue    abstract="false"
9103*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9104*dc5640d1SHerbert Xue    deprecated="not deprecated">
9105*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9106*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9107*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9108*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9109*dc5640d1SHerbert Xue      deprecated="not deprecated">
9110*dc5640d1SHerbert Xue    </method>
9111*dc5640d1SHerbert Xue    <method name="applyTo"
9112*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9113*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9114*dc5640d1SHerbert Xue      deprecated="not deprecated">
9115*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9116*dc5640d1SHerbert Xue    </method>
9117*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9118*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9119*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9120*dc5640d1SHerbert Xue      deprecated="not deprecated">
9121*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9122*dc5640d1SHerbert Xue    </method>
9123*dc5640d1SHerbert Xue    <doc>
9124*dc5640d1SHerbert Xue    <![CDATA[A request to require explicit bindings.
9125*dc5640d1SHerbert Xue
9126*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
9127*dc5640d1SHerbert Xue @since 3.0]]>
9128*dc5640d1SHerbert Xue    </doc>
9129*dc5640d1SHerbert Xue  </class>
9130*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
9131*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ScopeBinding -->
9132*dc5640d1SHerbert Xue  <class name="ScopeBinding" extends="java.lang.Object"
9133*dc5640d1SHerbert Xue    abstract="false"
9134*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9135*dc5640d1SHerbert Xue    deprecated="not deprecated">
9136*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9137*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9138*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9139*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9140*dc5640d1SHerbert Xue      deprecated="not deprecated">
9141*dc5640d1SHerbert Xue    </method>
9142*dc5640d1SHerbert Xue    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
9143*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9144*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9145*dc5640d1SHerbert Xue      deprecated="not deprecated">
9146*dc5640d1SHerbert Xue    </method>
9147*dc5640d1SHerbert Xue    <method name="getScope" return="com.google.inject.Scope"
9148*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9149*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9150*dc5640d1SHerbert Xue      deprecated="not deprecated">
9151*dc5640d1SHerbert Xue    </method>
9152*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9153*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9154*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9155*dc5640d1SHerbert Xue      deprecated="not deprecated">
9156*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9157*dc5640d1SHerbert Xue    </method>
9158*dc5640d1SHerbert Xue    <method name="applyTo"
9159*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9160*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9161*dc5640d1SHerbert Xue      deprecated="not deprecated">
9162*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9163*dc5640d1SHerbert Xue    </method>
9164*dc5640d1SHerbert Xue    <doc>
9165*dc5640d1SHerbert Xue    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
9166*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
9167*dc5640d1SHerbert Xue statements:
9168*dc5640d1SHerbert Xue <pre>
9169*dc5640d1SHerbert Xue     Scope recordScope = new RecordScope();
9170*dc5640d1SHerbert Xue     bindScope(RecordScoped.class, new RecordScope());</pre>
9171*dc5640d1SHerbert Xue
9172*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9173*dc5640d1SHerbert Xue @since 2.0]]>
9174*dc5640d1SHerbert Xue    </doc>
9175*dc5640d1SHerbert Xue  </class>
9176*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ScopeBinding -->
9177*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
9178*dc5640d1SHerbert Xue  <class name="StaticInjectionRequest" extends="java.lang.Object"
9179*dc5640d1SHerbert Xue    abstract="false"
9180*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9181*dc5640d1SHerbert Xue    deprecated="not deprecated">
9182*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9183*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9184*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9185*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9186*dc5640d1SHerbert Xue      deprecated="not deprecated">
9187*dc5640d1SHerbert Xue    </method>
9188*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.Class&lt;?&gt;"
9189*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9190*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9191*dc5640d1SHerbert Xue      deprecated="not deprecated">
9192*dc5640d1SHerbert Xue    </method>
9193*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9194*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9195*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9196*dc5640d1SHerbert Xue      deprecated="not deprecated">
9197*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9198*dc5640d1SHerbert Xue      <doc>
9199*dc5640d1SHerbert Xue      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
9200*dc5640d1SHerbert Xue request.
9201*dc5640d1SHerbert Xue
9202*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9203*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9204*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9205*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9206*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9207*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9208*dc5640d1SHerbert Xue      of the valid injection points.]]>
9209*dc5640d1SHerbert Xue      </doc>
9210*dc5640d1SHerbert Xue    </method>
9211*dc5640d1SHerbert Xue    <method name="applyTo"
9212*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9213*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9214*dc5640d1SHerbert Xue      deprecated="not deprecated">
9215*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9216*dc5640d1SHerbert Xue    </method>
9217*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9218*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9219*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9220*dc5640d1SHerbert Xue      deprecated="not deprecated">
9221*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9222*dc5640d1SHerbert Xue    </method>
9223*dc5640d1SHerbert Xue    <doc>
9224*dc5640d1SHerbert Xue    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
9225*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
9226*dc5640d1SHerbert Xue requestStaticInjection()} statements:
9227*dc5640d1SHerbert Xue <pre>
9228*dc5640d1SHerbert Xue     requestStaticInjection(MyLegacyService.class);</pre>
9229*dc5640d1SHerbert Xue
9230*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9231*dc5640d1SHerbert Xue @since 2.0]]>
9232*dc5640d1SHerbert Xue    </doc>
9233*dc5640d1SHerbert Xue  </class>
9234*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
9235*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Toolable -->
9236*dc5640d1SHerbert Xue  <class name="Toolable"    abstract="true"
9237*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9238*dc5640d1SHerbert Xue    deprecated="not deprecated">
9239*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
9240*dc5640d1SHerbert Xue    <doc>
9241*dc5640d1SHerbert Xue    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
9242*dc5640d1SHerbert Xue This is typically useful for for extensions to Guice that perform additional validation in an
9243*dc5640d1SHerbert Xue injected method or field.  This only applies to objects that are already constructed when
9244*dc5640d1SHerbert Xue bindings are created (ie., something bound using {@link
9245*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
9246*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
9247*dc5640d1SHerbert Xue com.google.inject.Binder#requestInjection requestInjection}.
9248*dc5640d1SHerbert Xue
9249*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
9250*dc5640d1SHerbert Xue @since 3.0]]>
9251*dc5640d1SHerbert Xue    </doc>
9252*dc5640d1SHerbert Xue  </class>
9253*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Toolable -->
9254*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeConverter -->
9255*dc5640d1SHerbert Xue  <interface name="TypeConverter"    abstract="true"
9256*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9257*dc5640d1SHerbert Xue    deprecated="not deprecated">
9258*dc5640d1SHerbert Xue    <method name="convert" return="java.lang.Object"
9259*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9260*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9261*dc5640d1SHerbert Xue      deprecated="not deprecated">
9262*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
9263*dc5640d1SHerbert Xue      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9264*dc5640d1SHerbert Xue      <doc>
9265*dc5640d1SHerbert Xue      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
9266*dc5640d1SHerbert Xue      </doc>
9267*dc5640d1SHerbert Xue    </method>
9268*dc5640d1SHerbert Xue    <doc>
9269*dc5640d1SHerbert Xue    <![CDATA[Converts constant string values to a different type.
9270*dc5640d1SHerbert Xue
9271*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9272*dc5640d1SHerbert Xue @since 2.0]]>
9273*dc5640d1SHerbert Xue    </doc>
9274*dc5640d1SHerbert Xue  </interface>
9275*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeConverter -->
9276*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeConverterBinding -->
9277*dc5640d1SHerbert Xue  <class name="TypeConverterBinding" extends="java.lang.Object"
9278*dc5640d1SHerbert Xue    abstract="false"
9279*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9280*dc5640d1SHerbert Xue    deprecated="not deprecated">
9281*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9282*dc5640d1SHerbert Xue    <constructor name="TypeConverterBinding" type="java.lang.Object, com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;, com.google.inject.spi.TypeConverter"
9283*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9284*dc5640d1SHerbert Xue      deprecated="not deprecated">
9285*dc5640d1SHerbert Xue      <doc>
9286*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
9287*dc5640d1SHerbert Xue      </doc>
9288*dc5640d1SHerbert Xue    </constructor>
9289*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9290*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9291*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9292*dc5640d1SHerbert Xue      deprecated="not deprecated">
9293*dc5640d1SHerbert Xue    </method>
9294*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9295*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9296*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9297*dc5640d1SHerbert Xue      deprecated="not deprecated">
9298*dc5640d1SHerbert Xue    </method>
9299*dc5640d1SHerbert Xue    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
9300*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9301*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9302*dc5640d1SHerbert Xue      deprecated="not deprecated">
9303*dc5640d1SHerbert Xue    </method>
9304*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9305*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9306*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9307*dc5640d1SHerbert Xue      deprecated="not deprecated">
9308*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9309*dc5640d1SHerbert Xue    </method>
9310*dc5640d1SHerbert Xue    <method name="applyTo"
9311*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9312*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9313*dc5640d1SHerbert Xue      deprecated="not deprecated">
9314*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9315*dc5640d1SHerbert Xue    </method>
9316*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9317*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9318*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9319*dc5640d1SHerbert Xue      deprecated="not deprecated">
9320*dc5640d1SHerbert Xue    </method>
9321*dc5640d1SHerbert Xue    <doc>
9322*dc5640d1SHerbert Xue    <![CDATA[Registration of type converters for matching target types. Instances are created
9323*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
9324*dc5640d1SHerbert Xue TypeConverter) convertToTypes()} statements:
9325*dc5640d1SHerbert Xue <pre>
9326*dc5640d1SHerbert Xue     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
9327*dc5640d1SHerbert Xue
9328*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9329*dc5640d1SHerbert Xue @since 2.0]]>
9330*dc5640d1SHerbert Xue    </doc>
9331*dc5640d1SHerbert Xue  </class>
9332*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeConverterBinding -->
9333*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeEncounter -->
9334*dc5640d1SHerbert Xue  <interface name="TypeEncounter"    abstract="true"
9335*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9336*dc5640d1SHerbert Xue    deprecated="not deprecated">
9337*dc5640d1SHerbert Xue    <method name="addError"
9338*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9339*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9340*dc5640d1SHerbert Xue      deprecated="not deprecated">
9341*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
9342*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
9343*dc5640d1SHerbert Xue      <doc>
9344*dc5640d1SHerbert Xue      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
9345*dc5640d1SHerbert Xue time. Unlike throwing an exception, this enable us to continue configuring the Injector and
9346*dc5640d1SHerbert Xue discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
9347*dc5640d1SHerbert Xue into the message.]]>
9348*dc5640d1SHerbert Xue      </doc>
9349*dc5640d1SHerbert Xue    </method>
9350*dc5640d1SHerbert Xue    <method name="addError"
9351*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9352*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9353*dc5640d1SHerbert Xue      deprecated="not deprecated">
9354*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
9355*dc5640d1SHerbert Xue      <doc>
9356*dc5640d1SHerbert Xue      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
9357*dc5640d1SHerbert Xue message of which will be presented to the user at a later time. If your type listener calls
9358*dc5640d1SHerbert Xue something that you worry may fail, you should catch the exception and pass it to this method.]]>
9359*dc5640d1SHerbert Xue      </doc>
9360*dc5640d1SHerbert Xue    </method>
9361*dc5640d1SHerbert Xue    <method name="addError"
9362*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9363*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9364*dc5640d1SHerbert Xue      deprecated="not deprecated">
9365*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
9366*dc5640d1SHerbert Xue      <doc>
9367*dc5640d1SHerbert Xue      <![CDATA[Records an error message to be presented to the user at a later time.]]>
9368*dc5640d1SHerbert Xue      </doc>
9369*dc5640d1SHerbert Xue    </method>
9370*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9371*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9373*dc5640d1SHerbert Xue      deprecated="not deprecated">
9374*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9375*dc5640d1SHerbert Xue      <doc>
9376*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
9377*dc5640d1SHerbert Xue provider will not be valid until the injector has been created. The provider will throw an
9378*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
9379*dc5640d1SHerbert Xue      </doc>
9380*dc5640d1SHerbert Xue    </method>
9381*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9382*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9383*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9384*dc5640d1SHerbert Xue      deprecated="not deprecated">
9385*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9386*dc5640d1SHerbert Xue      <doc>
9387*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
9388*dc5640d1SHerbert Xue provider will not be valid until the injetor has been created. The provider will throw an
9389*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
9390*dc5640d1SHerbert Xue      </doc>
9391*dc5640d1SHerbert Xue    </method>
9392*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9393*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9394*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9395*dc5640d1SHerbert Xue      deprecated="not deprecated">
9396*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9397*dc5640d1SHerbert Xue      <doc>
9398*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9399*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
9400*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
9401*dc5640d1SHerbert Xue if you try to use it beforehand.
9402*dc5640d1SHerbert Xue
9403*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for]]>
9404*dc5640d1SHerbert Xue      </doc>
9405*dc5640d1SHerbert Xue    </method>
9406*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9407*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9408*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9409*dc5640d1SHerbert Xue      deprecated="not deprecated">
9410*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9411*dc5640d1SHerbert Xue      <doc>
9412*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9413*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
9414*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
9415*dc5640d1SHerbert Xue if you try to use it beforehand.
9416*dc5640d1SHerbert Xue
9417*dc5640d1SHerbert Xue @param type type to get members injector for]]>
9418*dc5640d1SHerbert Xue      </doc>
9419*dc5640d1SHerbert Xue    </method>
9420*dc5640d1SHerbert Xue    <method name="register"
9421*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9422*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9423*dc5640d1SHerbert Xue      deprecated="not deprecated">
9424*dc5640d1SHerbert Xue      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
9425*dc5640d1SHerbert Xue      <doc>
9426*dc5640d1SHerbert Xue      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
9427*dc5640d1SHerbert Xue performed its own injections on an instance of {@code I}.]]>
9428*dc5640d1SHerbert Xue      </doc>
9429*dc5640d1SHerbert Xue    </method>
9430*dc5640d1SHerbert Xue    <method name="register"
9431*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9432*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9433*dc5640d1SHerbert Xue      deprecated="not deprecated">
9434*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
9435*dc5640d1SHerbert Xue      <doc>
9436*dc5640d1SHerbert Xue      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
9437*dc5640d1SHerbert Xue injections have been performed on an instance of {@code I}.]]>
9438*dc5640d1SHerbert Xue      </doc>
9439*dc5640d1SHerbert Xue    </method>
9440*dc5640d1SHerbert Xue    <method name="bindInterceptor"
9441*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9442*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9443*dc5640d1SHerbert Xue      deprecated="not deprecated">
9444*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
9445*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
9446*dc5640d1SHerbert Xue      <doc>
9447*dc5640d1SHerbert Xue      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
9448*dc5640d1SHerbert Xue method is eligible for interception if:
9449*dc5640d1SHerbert Xue
9450*dc5640d1SHerbert Xue <ul>
9451*dc5640d1SHerbert Xue  <li>Guice created the instance the method is on</li>
9452*dc5640d1SHerbert Xue  <li>Neither the enclosing type nor the method is final</li>
9453*dc5640d1SHerbert Xue  <li>And the method is package-private or more accessible</li>
9454*dc5640d1SHerbert Xue </ul>
9455*dc5640d1SHerbert Xue
9456*dc5640d1SHerbert Xue @param methodMatcher matches methods the interceptor should apply to. For
9457*dc5640d1SHerbert Xue     example: {@code annotatedWith(Transactional.class)}.
9458*dc5640d1SHerbert Xue @param interceptors to bind]]>
9459*dc5640d1SHerbert Xue      </doc>
9460*dc5640d1SHerbert Xue    </method>
9461*dc5640d1SHerbert Xue    <doc>
9462*dc5640d1SHerbert Xue    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
9463*dc5640d1SHerbert Xue listeners and binding method interceptors for injectable type {@code I}. It is an error to use
9464*dc5640d1SHerbert Xue an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
9465*dc5640d1SHerbert Xue returned.
9466*dc5640d1SHerbert Xue
9467*dc5640d1SHerbert Xue @param <I> the injectable type encountered
9468*dc5640d1SHerbert Xue @since 2.0]]>
9469*dc5640d1SHerbert Xue    </doc>
9470*dc5640d1SHerbert Xue  </interface>
9471*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeEncounter -->
9472*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeListener -->
9473*dc5640d1SHerbert Xue  <interface name="TypeListener"    abstract="true"
9474*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9475*dc5640d1SHerbert Xue    deprecated="not deprecated">
9476*dc5640d1SHerbert Xue    <method name="hear"
9477*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9478*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9479*dc5640d1SHerbert Xue      deprecated="not deprecated">
9480*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
9481*dc5640d1SHerbert Xue      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
9482*dc5640d1SHerbert Xue      <doc>
9483*dc5640d1SHerbert Xue      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
9484*dc5640d1SHerbert Xue Called during injector creation (or afterwords if Guice encounters a type at run time and
9485*dc5640d1SHerbert Xue creates a JIT binding).
9486*dc5640d1SHerbert Xue
9487*dc5640d1SHerbert Xue @param type encountered by Guice
9488*dc5640d1SHerbert Xue @param encounter context of this encounter, enables reporting errors, registering injection
9489*dc5640d1SHerbert Xue     listeners and binding method interceptors for {@code type}.
9490*dc5640d1SHerbert Xue
9491*dc5640d1SHerbert Xue @param <I> the injectable type]]>
9492*dc5640d1SHerbert Xue      </doc>
9493*dc5640d1SHerbert Xue    </method>
9494*dc5640d1SHerbert Xue    <doc>
9495*dc5640d1SHerbert Xue    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
9496*dc5640d1SHerbert Xue one situation but only its methods and fields injected in another, Guice will notify this
9497*dc5640d1SHerbert Xue listener once.
9498*dc5640d1SHerbert Xue
9499*dc5640d1SHerbert Xue <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
9500*dc5640d1SHerbert Xue registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
9501*dc5640d1SHerbert Xue com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
9502*dc5640d1SHerbert Xue binding method interceptors}.
9503*dc5640d1SHerbert Xue
9504*dc5640d1SHerbert Xue @since 2.0]]>
9505*dc5640d1SHerbert Xue    </doc>
9506*dc5640d1SHerbert Xue  </interface>
9507*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeListener -->
9508*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeListenerBinding -->
9509*dc5640d1SHerbert Xue  <class name="TypeListenerBinding" extends="java.lang.Object"
9510*dc5640d1SHerbert Xue    abstract="false"
9511*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9512*dc5640d1SHerbert Xue    deprecated="not deprecated">
9513*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9514*dc5640d1SHerbert Xue    <method name="getListener" return="com.google.inject.spi.TypeListener"
9515*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9516*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9517*dc5640d1SHerbert Xue      deprecated="not deprecated">
9518*dc5640d1SHerbert Xue      <doc>
9519*dc5640d1SHerbert Xue      <![CDATA[Returns the registered listener.]]>
9520*dc5640d1SHerbert Xue      </doc>
9521*dc5640d1SHerbert Xue    </method>
9522*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9523*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9524*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9525*dc5640d1SHerbert Xue      deprecated="not deprecated">
9526*dc5640d1SHerbert Xue      <doc>
9527*dc5640d1SHerbert Xue      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
9528*dc5640d1SHerbert Xue      </doc>
9529*dc5640d1SHerbert Xue    </method>
9530*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9531*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9532*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9533*dc5640d1SHerbert Xue      deprecated="not deprecated">
9534*dc5640d1SHerbert Xue    </method>
9535*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9536*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9537*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9538*dc5640d1SHerbert Xue      deprecated="not deprecated">
9539*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9540*dc5640d1SHerbert Xue    </method>
9541*dc5640d1SHerbert Xue    <method name="applyTo"
9542*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9543*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9544*dc5640d1SHerbert Xue      deprecated="not deprecated">
9545*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9546*dc5640d1SHerbert Xue    </method>
9547*dc5640d1SHerbert Xue    <doc>
9548*dc5640d1SHerbert Xue    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
9549*dc5640d1SHerbert Xue a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
9550*dc5640d1SHerbert Xue
9551*dc5640d1SHerbert Xue <pre>
9552*dc5640d1SHerbert Xue     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
9553*dc5640d1SHerbert Xue
9554*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9555*dc5640d1SHerbert Xue @since 2.0]]>
9556*dc5640d1SHerbert Xue    </doc>
9557*dc5640d1SHerbert Xue  </class>
9558*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeListenerBinding -->
9559*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.UntargettedBinding -->
9560*dc5640d1SHerbert Xue  <interface name="UntargettedBinding"    abstract="true"
9561*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9562*dc5640d1SHerbert Xue    deprecated="not deprecated">
9563*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9564*dc5640d1SHerbert Xue    <doc>
9565*dc5640d1SHerbert Xue    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
9566*dc5640d1SHerbert Xue strategies to resolve injections.
9567*dc5640d1SHerbert Xue
9568*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9569*dc5640d1SHerbert Xue @since 2.0]]>
9570*dc5640d1SHerbert Xue    </doc>
9571*dc5640d1SHerbert Xue  </interface>
9572*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.UntargettedBinding -->
9573*dc5640d1SHerbert Xue</package>
9574*dc5640d1SHerbert Xue<package name="com.google.inject.spring">
9575*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spring.SpringIntegration -->
9576*dc5640d1SHerbert Xue  <class name="SpringIntegration" extends="java.lang.Object"
9577*dc5640d1SHerbert Xue    abstract="false"
9578*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9579*dc5640d1SHerbert Xue    deprecated="not deprecated">
9580*dc5640d1SHerbert Xue    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
9581*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9582*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9583*dc5640d1SHerbert Xue      deprecated="not deprecated">
9584*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9585*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
9586*dc5640d1SHerbert Xue      <doc>
9587*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
9588*dc5640d1SHerbert Xue Expects a binding to {@link
9589*dc5640d1SHerbert Xue org.springframework.beans.factory.BeanFactory}. Example usage:
9590*dc5640d1SHerbert Xue
9591*dc5640d1SHerbert Xue <pre>
9592*dc5640d1SHerbert Xue bind(DataSource.class)
9593*dc5640d1SHerbert Xue   .toProvider(fromSpring(DataSource.class, "dataSource"));
9594*dc5640d1SHerbert Xue </pre>]]>
9595*dc5640d1SHerbert Xue      </doc>
9596*dc5640d1SHerbert Xue    </method>
9597*dc5640d1SHerbert Xue    <method name="bindAll"
9598*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9599*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9600*dc5640d1SHerbert Xue      deprecated="not deprecated">
9601*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9602*dc5640d1SHerbert Xue      <param name="beanFactory" type="ListableBeanFactory"/>
9603*dc5640d1SHerbert Xue      <doc>
9604*dc5640d1SHerbert Xue      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
9605*dc5640d1SHerbert Xue named "foo", this method creates a binding to the bean's type and
9606*dc5640d1SHerbert Xue {@code @Named("foo")}.
9607*dc5640d1SHerbert Xue
9608*dc5640d1SHerbert Xue @see com.google.inject.name.Named
9609*dc5640d1SHerbert Xue @see com.google.inject.name.Names#named(String)]]>
9610*dc5640d1SHerbert Xue      </doc>
9611*dc5640d1SHerbert Xue    </method>
9612*dc5640d1SHerbert Xue    <doc>
9613*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with Spring.
9614*dc5640d1SHerbert Xue
9615*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
9616*dc5640d1SHerbert Xue    </doc>
9617*dc5640d1SHerbert Xue  </class>
9618*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spring.SpringIntegration -->
9619*dc5640d1SHerbert Xue</package>
9620*dc5640d1SHerbert Xue<package name="com.google.inject.struts2">
9621*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
9622*dc5640d1SHerbert Xue  <class name="GuiceObjectFactory" extends="ObjectFactory"
9623*dc5640d1SHerbert Xue    abstract="false"
9624*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9625*dc5640d1SHerbert Xue    deprecated="Use {@link com.google.inject.servlet.Struts2Factory} instead.">
9626*dc5640d1SHerbert Xue    <constructor name="GuiceObjectFactory"
9627*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9628*dc5640d1SHerbert Xue      deprecated="not deprecated">
9629*dc5640d1SHerbert Xue    </constructor>
9630*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
9631*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9632*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9633*dc5640d1SHerbert Xue      deprecated="not deprecated">
9634*dc5640d1SHerbert Xue    </method>
9635*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class"
9636*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9637*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9638*dc5640d1SHerbert Xue      deprecated="not deprecated">
9639*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
9640*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
9641*dc5640d1SHerbert Xue    </method>
9642*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
9643*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9644*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9645*dc5640d1SHerbert Xue      deprecated="not deprecated">
9646*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
9647*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map"/>
9648*dc5640d1SHerbert Xue    </method>
9649*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="Interceptor"
9650*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9651*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9652*dc5640d1SHerbert Xue      deprecated="not deprecated">
9653*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="InterceptorConfig"/>
9654*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
9655*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="ConfigurationException"/>
9656*dc5640d1SHerbert Xue    </method>
9657*dc5640d1SHerbert Xue    <doc>
9658*dc5640d1SHerbert Xue    <![CDATA[@deprecated Use {@link com.google.inject.servlet.Struts2Factory} instead.]]>
9659*dc5640d1SHerbert Xue    </doc>
9660*dc5640d1SHerbert Xue  </class>
9661*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
9662*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2Factory -->
9663*dc5640d1SHerbert Xue  <class name="Struts2Factory" extends="ObjectFactory"
9664*dc5640d1SHerbert Xue    abstract="false"
9665*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9666*dc5640d1SHerbert Xue    deprecated="not deprecated">
9667*dc5640d1SHerbert Xue    <constructor name="Struts2Factory"
9668*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9669*dc5640d1SHerbert Xue      deprecated="not deprecated">
9670*dc5640d1SHerbert Xue    </constructor>
9671*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
9672*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9673*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9674*dc5640d1SHerbert Xue      deprecated="not deprecated">
9675*dc5640d1SHerbert Xue    </method>
9676*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
9677*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9678*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9679*dc5640d1SHerbert Xue      deprecated="not deprecated">
9680*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
9681*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
9682*dc5640d1SHerbert Xue    </method>
9683*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
9684*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9685*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9686*dc5640d1SHerbert Xue      deprecated="not deprecated">
9687*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
9688*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
9689*dc5640d1SHerbert Xue    </method>
9690*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="Interceptor"
9691*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9692*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9693*dc5640d1SHerbert Xue      deprecated="not deprecated">
9694*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="InterceptorConfig"/>
9695*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
9696*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="ConfigurationException"/>
9697*dc5640d1SHerbert Xue    </method>
9698*dc5640d1SHerbert Xue    <doc>
9699*dc5640d1SHerbert Xue    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
9700*dc5640d1SHerbert Xue GS2 and fixes several bugs.
9701*dc5640d1SHerbert Xue
9702*dc5640d1SHerbert Xue @author [email protected]
9703*dc5640d1SHerbert Xue @author benmccann.com]]>
9704*dc5640d1SHerbert Xue    </doc>
9705*dc5640d1SHerbert Xue  </class>
9706*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2Factory -->
9707*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
9708*dc5640d1SHerbert Xue  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
9709*dc5640d1SHerbert Xue    abstract="false"
9710*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9711*dc5640d1SHerbert Xue    deprecated="not deprecated">
9712*dc5640d1SHerbert Xue    <constructor name="Struts2GuicePluginModule"
9713*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9714*dc5640d1SHerbert Xue      deprecated="not deprecated">
9715*dc5640d1SHerbert Xue    </constructor>
9716*dc5640d1SHerbert Xue    <method name="configure"
9717*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9718*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
9719*dc5640d1SHerbert Xue      deprecated="not deprecated">
9720*dc5640d1SHerbert Xue    </method>
9721*dc5640d1SHerbert Xue    <doc>
9722*dc5640d1SHerbert Xue    <![CDATA[Initializes the Struts 2 Guice Plugin.
9723*dc5640d1SHerbert Xue Must be added to the injector returned by
9724*dc5640d1SHerbert Xue     {@link GuiceServletContextListener.getInjector()}.
9725*dc5640d1SHerbert Xue
9726*dc5640d1SHerbert Xue @author benmccann.com]]>
9727*dc5640d1SHerbert Xue    </doc>
9728*dc5640d1SHerbert Xue  </class>
9729*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
9730*dc5640d1SHerbert Xue</package>
9731*dc5640d1SHerbert Xue<package name="com.google.inject.throwingproviders">
9732*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
9733*dc5640d1SHerbert Xue  <interface name="CheckedProvider"    abstract="true"
9734*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9735*dc5640d1SHerbert Xue    deprecated="not deprecated">
9736*dc5640d1SHerbert Xue    <method name="get" return="T"
9737*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9738*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9739*dc5640d1SHerbert Xue      deprecated="not deprecated">
9740*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
9741*dc5640d1SHerbert Xue    </method>
9742*dc5640d1SHerbert Xue    <doc>
9743*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
9744*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
9745*dc5640d1SHerbert Xue
9746*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
9747*dc5640d1SHerbert Xue Such subinterfaces may not define new methods, but may narrow the exception type.
9748*dc5640d1SHerbert Xue <pre>
9749*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
9750*dc5640d1SHerbert Xue   T get() throws CustomExceptionOne, CustomExceptionTwo;
9751*dc5640d1SHerbert Xue }
9752*dc5640d1SHerbert Xue </pre>
9753*dc5640d1SHerbert Xue
9754*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
9755*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
9756*dc5640d1SHerbert Xue will invoked at most once within each scope.
9757*dc5640d1SHerbert Xue
9758*dc5640d1SHerbert Xue @since 3.0]]>
9759*dc5640d1SHerbert Xue    </doc>
9760*dc5640d1SHerbert Xue  </interface>
9761*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
9762*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
9763*dc5640d1SHerbert Xue  <class name="CheckedProvides"    abstract="true"
9764*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9765*dc5640d1SHerbert Xue    deprecated="not deprecated">
9766*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
9767*dc5640d1SHerbert Xue    <doc>
9768*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to create a {@link CheckedProvider}
9769*dc5640d1SHerbert Xue method binding that can throw exceptions. The method's return type is bound
9770*dc5640d1SHerbert Xue to a {@link CheckedProvider} that can be injected. Guice will pass
9771*dc5640d1SHerbert Xue dependencies to the method as parameters. Install {@literal @}CheckedProvides
9772*dc5640d1SHerbert Xue methods by using
9773*dc5640d1SHerbert Xue {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
9774*dc5640d1SHerbert Xue module where the methods are declared.
9775*dc5640d1SHerbert Xue
9776*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
9777*dc5640d1SHerbert Xue @since 3.0]]>
9778*dc5640d1SHerbert Xue    </doc>
9779*dc5640d1SHerbert Xue  </class>
9780*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
9781*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
9782*dc5640d1SHerbert Xue  <interface name="ThrowingProvider"    abstract="true"
9783*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9784*dc5640d1SHerbert Xue    deprecated="use {@link CheckedProvider} instead.">
9785*dc5640d1SHerbert Xue    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
9786*dc5640d1SHerbert Xue    <method name="get" return="T"
9787*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9788*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9789*dc5640d1SHerbert Xue      deprecated="not deprecated">
9790*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
9791*dc5640d1SHerbert Xue    </method>
9792*dc5640d1SHerbert Xue    <doc>
9793*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
9794*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
9795*dc5640d1SHerbert Xue
9796*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
9797*dc5640d1SHerbert Xue Such subinterfaces may not define new methods:
9798*dc5640d1SHerbert Xue <pre>
9799*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
9800*dc5640d1SHerbert Xue </pre>
9801*dc5640d1SHerbert Xue
9802*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
9803*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
9804*dc5640d1SHerbert Xue will invoked at most once within each scope.
9805*dc5640d1SHerbert Xue
9806*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
9807*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9808*dc5640d1SHerbert Xue @deprecated use {@link CheckedProvider} instead.]]>
9809*dc5640d1SHerbert Xue    </doc>
9810*dc5640d1SHerbert Xue  </interface>
9811*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
9812*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
9813*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder" extends="java.lang.Object"
9814*dc5640d1SHerbert Xue    abstract="false"
9815*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9816*dc5640d1SHerbert Xue    deprecated="not deprecated">
9817*dc5640d1SHerbert Xue    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
9818*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9819*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9820*dc5640d1SHerbert Xue      deprecated="not deprecated">
9821*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9822*dc5640d1SHerbert Xue    </method>
9823*dc5640d1SHerbert Xue    <method name="forModule" return="com.google.inject.Module"
9824*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9825*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9826*dc5640d1SHerbert Xue      deprecated="not deprecated">
9827*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
9828*dc5640d1SHerbert Xue      <doc>
9829*dc5640d1SHerbert Xue      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
9830*dc5640d1SHerbert Xue
9831*dc5640d1SHerbert Xue @since 3.0]]>
9832*dc5640d1SHerbert Xue      </doc>
9833*dc5640d1SHerbert Xue    </method>
9834*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9835*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9836*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9837*dc5640d1SHerbert Xue      deprecated="not deprecated">
9838*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
9839*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.reflect.Type"/>
9840*dc5640d1SHerbert Xue    </method>
9841*dc5640d1SHerbert Xue    <doc>
9842*dc5640d1SHerbert Xue    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
9843*dc5640d1SHerbert Xue
9844*dc5640d1SHerbert Xue <p>You can use a fluent API and custom providers:
9845*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
9846*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
9847*dc5640d1SHerbert Xue    .to(RemoteCustomerProvider.class)
9848*dc5640d1SHerbert Xue    .in(RequestScope.class);
9849*dc5640d1SHerbert Xue </code></pre>
9850*dc5640d1SHerbert Xue or, you can use throwing provider methods:
9851*dc5640d1SHerbert Xue <pre><code>class MyModule extends AbstractModule {
9852*dc5640d1SHerbert Xue   configure() {
9853*dc5640d1SHerbert Xue     ThrowingProviderBinder.install(this, binder());
9854*dc5640d1SHerbert Xue   }
9855*dc5640d1SHerbert Xue
9856*dc5640d1SHerbert Xue   {@literal @}CheckedProvides(RemoteProvider.class)
9857*dc5640d1SHerbert Xue   {@literal @}RequestScope
9858*dc5640d1SHerbert Xue   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
9859*dc5640d1SHerbert Xue     return creator.getCustomerOrThrow();
9860*dc5640d1SHerbert Xue   }
9861*dc5640d1SHerbert Xue }
9862*dc5640d1SHerbert Xue </code></pre>
9863*dc5640d1SHerbert Xue
9864*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
9865*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
9866*dc5640d1SHerbert Xue    </doc>
9867*dc5640d1SHerbert Xue  </class>
9868*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
9869*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
9870*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
9871*dc5640d1SHerbert Xue    abstract="false"
9872*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9873*dc5640d1SHerbert Xue    deprecated="not deprecated">
9874*dc5640d1SHerbert Xue    <constructor name="ThrowingProviderBinder.SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
9875*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9876*dc5640d1SHerbert Xue      deprecated="not deprecated">
9877*dc5640d1SHerbert Xue    </constructor>
9878*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9879*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9880*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9881*dc5640d1SHerbert Xue      deprecated="not deprecated">
9882*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
9883*dc5640d1SHerbert Xue    </method>
9884*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9885*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9887*dc5640d1SHerbert Xue      deprecated="not deprecated">
9888*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
9889*dc5640d1SHerbert Xue    </method>
9890*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9891*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9892*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9893*dc5640d1SHerbert Xue      deprecated="not deprecated">
9894*dc5640d1SHerbert Xue      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
9895*dc5640d1SHerbert Xue    </method>
9896*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9897*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9898*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9899*dc5640d1SHerbert Xue      deprecated="not deprecated">
9900*dc5640d1SHerbert Xue      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
9901*dc5640d1SHerbert Xue    </method>
9902*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9903*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9904*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9905*dc5640d1SHerbert Xue      deprecated="not deprecated">
9906*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
9907*dc5640d1SHerbert Xue    </method>
9908*dc5640d1SHerbert Xue  </class>
9909*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
9910*dc5640d1SHerbert Xue</package>
9911*dc5640d1SHerbert Xue<package name="com.google.inject.tools.jmx">
9912*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
9913*dc5640d1SHerbert Xue  <interface name="ManagedBindingMBean"    abstract="true"
9914*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9915*dc5640d1SHerbert Xue    deprecated="not deprecated">
9916*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
9917*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9918*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9919*dc5640d1SHerbert Xue      deprecated="not deprecated">
9920*dc5640d1SHerbert Xue      <doc>
9921*dc5640d1SHerbert Xue      <![CDATA[Gets the source of this binding.]]>
9922*dc5640d1SHerbert Xue      </doc>
9923*dc5640d1SHerbert Xue    </method>
9924*dc5640d1SHerbert Xue    <method name="getProvider" return="java.lang.String"
9925*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9926*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9927*dc5640d1SHerbert Xue      deprecated="not deprecated">
9928*dc5640d1SHerbert Xue      <doc>
9929*dc5640d1SHerbert Xue      <![CDATA[Gets the provider to which this binding is bound.]]>
9930*dc5640d1SHerbert Xue      </doc>
9931*dc5640d1SHerbert Xue    </method>
9932*dc5640d1SHerbert Xue    <method name="getKey" return="java.lang.String"
9933*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9934*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9935*dc5640d1SHerbert Xue      deprecated="not deprecated">
9936*dc5640d1SHerbert Xue      <doc>
9937*dc5640d1SHerbert Xue      <![CDATA[Gets the binding key.]]>
9938*dc5640d1SHerbert Xue      </doc>
9939*dc5640d1SHerbert Xue    </method>
9940*dc5640d1SHerbert Xue    <doc>
9941*dc5640d1SHerbert Xue    <![CDATA[JMX interface to bindings.
9942*dc5640d1SHerbert Xue
9943*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
9944*dc5640d1SHerbert Xue    </doc>
9945*dc5640d1SHerbert Xue  </interface>
9946*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
9947*dc5640d1SHerbert Xue  <!-- start class com.google.inject.tools.jmx.Manager -->
9948*dc5640d1SHerbert Xue  <class name="Manager" extends="java.lang.Object"
9949*dc5640d1SHerbert Xue    abstract="false"
9950*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9951*dc5640d1SHerbert Xue    deprecated="not deprecated">
9952*dc5640d1SHerbert Xue    <constructor name="Manager"
9953*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9954*dc5640d1SHerbert Xue      deprecated="not deprecated">
9955*dc5640d1SHerbert Xue    </constructor>
9956*dc5640d1SHerbert Xue    <method name="manage"
9957*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9958*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9959*dc5640d1SHerbert Xue      deprecated="not deprecated">
9960*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
9961*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
9962*dc5640d1SHerbert Xue      <doc>
9963*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
9964*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
9965*dc5640d1SHerbert Xue      </doc>
9966*dc5640d1SHerbert Xue    </method>
9967*dc5640d1SHerbert Xue    <method name="manage"
9968*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9969*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9970*dc5640d1SHerbert Xue      deprecated="not deprecated">
9971*dc5640d1SHerbert Xue      <param name="server" type="javax.management.MBeanServer"/>
9972*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
9973*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
9974*dc5640d1SHerbert Xue      <doc>
9975*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
9976*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
9977*dc5640d1SHerbert Xue      </doc>
9978*dc5640d1SHerbert Xue    </method>
9979*dc5640d1SHerbert Xue    <method name="main"
9980*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9981*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9982*dc5640d1SHerbert Xue      deprecated="not deprecated">
9983*dc5640d1SHerbert Xue      <param name="args" type="java.lang.String[]"/>
9984*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
9985*dc5640d1SHerbert Xue      <doc>
9986*dc5640d1SHerbert Xue      <![CDATA[Run with no arguments for usage instructions.]]>
9987*dc5640d1SHerbert Xue      </doc>
9988*dc5640d1SHerbert Xue    </method>
9989*dc5640d1SHerbert Xue    <doc>
9990*dc5640d1SHerbert Xue    <![CDATA[Provides a JMX interface to Guice.
9991*dc5640d1SHerbert Xue
9992*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
9993*dc5640d1SHerbert Xue    </doc>
9994*dc5640d1SHerbert Xue  </class>
9995*dc5640d1SHerbert Xue  <!-- end class com.google.inject.tools.jmx.Manager -->
9996*dc5640d1SHerbert Xue</package>
9997*dc5640d1SHerbert Xue<package name="com.google.inject.util">
9998*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Modules -->
9999*dc5640d1SHerbert Xue  <class name="Modules" extends="java.lang.Object"
10000*dc5640d1SHerbert Xue    abstract="false"
10001*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10002*dc5640d1SHerbert Xue    deprecated="not deprecated">
10003*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10004*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10005*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10006*dc5640d1SHerbert Xue      deprecated="not deprecated">
10007*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
10008*dc5640d1SHerbert Xue      <doc>
10009*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10010*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
10011*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
10012*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
10013*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
10014*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
10015*dc5640d1SHerbert Xue <pre>
10016*dc5640d1SHerbert Xue Module functionalTestModule
10017*dc5640d1SHerbert Xue     = Modules.override(new ProductionModule()).with(new TestModule());
10018*dc5640d1SHerbert Xue </pre>
10019*dc5640d1SHerbert Xue
10020*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
10021*dc5640d1SHerbert Xue
10022*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
10023*dc5640d1SHerbert Xue      </doc>
10024*dc5640d1SHerbert Xue    </method>
10025*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10026*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10027*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10028*dc5640d1SHerbert Xue      deprecated="not deprecated">
10029*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10030*dc5640d1SHerbert Xue      <doc>
10031*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10032*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
10033*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
10034*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
10035*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
10036*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
10037*dc5640d1SHerbert Xue <pre>
10038*dc5640d1SHerbert Xue Module functionalTestModule
10039*dc5640d1SHerbert Xue     = Modules.override(getProductionModules()).with(getTestModules());
10040*dc5640d1SHerbert Xue </pre>
10041*dc5640d1SHerbert Xue
10042*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
10043*dc5640d1SHerbert Xue
10044*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
10045*dc5640d1SHerbert Xue      </doc>
10046*dc5640d1SHerbert Xue    </method>
10047*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
10048*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10049*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10050*dc5640d1SHerbert Xue      deprecated="not deprecated">
10051*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
10052*dc5640d1SHerbert Xue      <doc>
10053*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10054*dc5640d1SHerbert Xue      </doc>
10055*dc5640d1SHerbert Xue    </method>
10056*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
10057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10058*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10059*dc5640d1SHerbert Xue      deprecated="not deprecated">
10060*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10061*dc5640d1SHerbert Xue      <doc>
10062*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10063*dc5640d1SHerbert Xue      </doc>
10064*dc5640d1SHerbert Xue    </method>
10065*dc5640d1SHerbert Xue    <field name="EMPTY_MODULE" type="com.google.inject.Module"
10066*dc5640d1SHerbert Xue      transient="false" volatile="false"
10067*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
10068*dc5640d1SHerbert Xue      deprecated="not deprecated">
10069*dc5640d1SHerbert Xue    </field>
10070*dc5640d1SHerbert Xue    <doc>
10071*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
10072*dc5640d1SHerbert Xue
10073*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10074*dc5640d1SHerbert Xue @since 2.0]]>
10075*dc5640d1SHerbert Xue    </doc>
10076*dc5640d1SHerbert Xue  </class>
10077*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Modules -->
10078*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10079*dc5640d1SHerbert Xue  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
10080*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
10081*dc5640d1SHerbert Xue    deprecated="not deprecated">
10082*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
10083*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10084*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10085*dc5640d1SHerbert Xue      deprecated="not deprecated">
10086*dc5640d1SHerbert Xue      <param name="overrides" type="com.google.inject.Module[]"/>
10087*dc5640d1SHerbert Xue      <doc>
10088*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10089*dc5640d1SHerbert Xue      </doc>
10090*dc5640d1SHerbert Xue    </method>
10091*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
10092*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10093*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10094*dc5640d1SHerbert Xue      deprecated="not deprecated">
10095*dc5640d1SHerbert Xue      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10096*dc5640d1SHerbert Xue      <doc>
10097*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10098*dc5640d1SHerbert Xue      </doc>
10099*dc5640d1SHerbert Xue    </method>
10100*dc5640d1SHerbert Xue    <doc>
10101*dc5640d1SHerbert Xue    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10102*dc5640d1SHerbert Xue    </doc>
10103*dc5640d1SHerbert Xue  </interface>
10104*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10105*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Providers -->
10106*dc5640d1SHerbert Xue  <class name="Providers" extends="java.lang.Object"
10107*dc5640d1SHerbert Xue    abstract="false"
10108*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10109*dc5640d1SHerbert Xue    deprecated="not deprecated">
10110*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
10111*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10112*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10113*dc5640d1SHerbert Xue      deprecated="not deprecated">
10114*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
10115*dc5640d1SHerbert Xue      <doc>
10116*dc5640d1SHerbert Xue      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
10117*dc5640d1SHerbert Xue be necessary to use in your application, but is helpful for several types
10118*dc5640d1SHerbert Xue of unit tests.
10119*dc5640d1SHerbert Xue
10120*dc5640d1SHerbert Xue @param instance the instance that should always be provided.  This is also
10121*dc5640d1SHerbert Xue     permitted to be null, to enable aggressive testing, although in real
10122*dc5640d1SHerbert Xue     life a Guice-supplied Provider will never return null.]]>
10123*dc5640d1SHerbert Xue      </doc>
10124*dc5640d1SHerbert Xue    </method>
10125*dc5640d1SHerbert Xue    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
10126*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10127*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10128*dc5640d1SHerbert Xue      deprecated="not deprecated">
10129*dc5640d1SHerbert Xue      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
10130*dc5640d1SHerbert Xue      <doc>
10131*dc5640d1SHerbert Xue      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
10132*dc5640d1SHerbert Xue JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
10133*dc5640d1SHerbert Xue since Guice providers directly implement the JSR-330 interface.
10134*dc5640d1SHerbert Xue
10135*dc5640d1SHerbert Xue @since 3.0]]>
10136*dc5640d1SHerbert Xue      </doc>
10137*dc5640d1SHerbert Xue    </method>
10138*dc5640d1SHerbert Xue    <doc>
10139*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of
10140*dc5640d1SHerbert Xue {@link Provider}.
10141*dc5640d1SHerbert Xue
10142*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
10143*dc5640d1SHerbert Xue @since 2.0]]>
10144*dc5640d1SHerbert Xue    </doc>
10145*dc5640d1SHerbert Xue  </class>
10146*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Providers -->
10147*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Types -->
10148*dc5640d1SHerbert Xue  <class name="Types" extends="java.lang.Object"
10149*dc5640d1SHerbert Xue    abstract="false"
10150*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10151*dc5640d1SHerbert Xue    deprecated="not deprecated">
10152*dc5640d1SHerbert Xue    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
10153*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10154*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10155*dc5640d1SHerbert Xue      deprecated="not deprecated">
10156*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
10157*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10158*dc5640d1SHerbert Xue      <doc>
10159*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10160*dc5640d1SHerbert Xue {@code rawType}. The returned type does not have an owner type.
10161*dc5640d1SHerbert Xue
10162*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10163*dc5640d1SHerbert Xue      </doc>
10164*dc5640d1SHerbert Xue    </method>
10165*dc5640d1SHerbert Xue    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
10166*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10167*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10168*dc5640d1SHerbert Xue      deprecated="not deprecated">
10169*dc5640d1SHerbert Xue      <param name="ownerType" type="java.lang.reflect.Type"/>
10170*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
10171*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10172*dc5640d1SHerbert Xue      <doc>
10173*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10174*dc5640d1SHerbert Xue {@code rawType} and enclosed by {@code ownerType}.
10175*dc5640d1SHerbert Xue
10176*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10177*dc5640d1SHerbert Xue      </doc>
10178*dc5640d1SHerbert Xue    </method>
10179*dc5640d1SHerbert Xue    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
10180*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10181*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10182*dc5640d1SHerbert Xue      deprecated="not deprecated">
10183*dc5640d1SHerbert Xue      <param name="componentType" type="java.lang.reflect.Type"/>
10184*dc5640d1SHerbert Xue      <doc>
10185*dc5640d1SHerbert Xue      <![CDATA[Returns an array type whose elements are all instances of
10186*dc5640d1SHerbert Xue {@code componentType}.
10187*dc5640d1SHerbert Xue
10188*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} generic array type.]]>
10189*dc5640d1SHerbert Xue      </doc>
10190*dc5640d1SHerbert Xue    </method>
10191*dc5640d1SHerbert Xue    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
10192*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10193*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10194*dc5640d1SHerbert Xue      deprecated="not deprecated">
10195*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
10196*dc5640d1SHerbert Xue      <doc>
10197*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
10198*dc5640d1SHerbert Xue For example, if {@code bound} is {@code CharSequence.class}, this returns
10199*dc5640d1SHerbert Xue {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
10200*dc5640d1SHerbert Xue this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
10201*dc5640d1SHerbert Xue      </doc>
10202*dc5640d1SHerbert Xue    </method>
10203*dc5640d1SHerbert Xue    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
10204*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10205*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10206*dc5640d1SHerbert Xue      deprecated="not deprecated">
10207*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
10208*dc5640d1SHerbert Xue      <doc>
10209*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
10210*dc5640d1SHerbert Xue example, if {@code bound} is {@code String.class}, this returns {@code ?
10211*dc5640d1SHerbert Xue super String}.]]>
10212*dc5640d1SHerbert Xue      </doc>
10213*dc5640d1SHerbert Xue    </method>
10214*dc5640d1SHerbert Xue    <method name="listOf" return="java.lang.reflect.ParameterizedType"
10215*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10216*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10217*dc5640d1SHerbert Xue      deprecated="not deprecated">
10218*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
10219*dc5640d1SHerbert Xue      <doc>
10220*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
10221*dc5640d1SHerbert Xue {@code elementType}.
10222*dc5640d1SHerbert Xue
10223*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10224*dc5640d1SHerbert Xue      </doc>
10225*dc5640d1SHerbert Xue    </method>
10226*dc5640d1SHerbert Xue    <method name="setOf" return="java.lang.reflect.ParameterizedType"
10227*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10228*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10229*dc5640d1SHerbert Xue      deprecated="not deprecated">
10230*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
10231*dc5640d1SHerbert Xue      <doc>
10232*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
10233*dc5640d1SHerbert Xue {@code elementType}.
10234*dc5640d1SHerbert Xue
10235*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10236*dc5640d1SHerbert Xue      </doc>
10237*dc5640d1SHerbert Xue    </method>
10238*dc5640d1SHerbert Xue    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
10239*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10240*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10241*dc5640d1SHerbert Xue      deprecated="not deprecated">
10242*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.reflect.Type"/>
10243*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.reflect.Type"/>
10244*dc5640d1SHerbert Xue      <doc>
10245*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
10246*dc5640d1SHerbert Xue {@code keyType} and whose values are of type {@code valueType}.
10247*dc5640d1SHerbert Xue
10248*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10249*dc5640d1SHerbert Xue      </doc>
10250*dc5640d1SHerbert Xue    </method>
10251*dc5640d1SHerbert Xue    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
10252*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10253*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10254*dc5640d1SHerbert Xue      deprecated="not deprecated">
10255*dc5640d1SHerbert Xue      <param name="providedType" type="java.lang.reflect.Type"/>
10256*dc5640d1SHerbert Xue      <doc>
10257*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
10258*dc5640d1SHerbert Xue {@code elementType}.
10259*dc5640d1SHerbert Xue
10260*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
10261*dc5640d1SHerbert Xue      </doc>
10262*dc5640d1SHerbert Xue    </method>
10263*dc5640d1SHerbert Xue    <doc>
10264*dc5640d1SHerbert Xue    <![CDATA[Static methods for working with types.
10265*dc5640d1SHerbert Xue
10266*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
10267*dc5640d1SHerbert Xue @since 2.0]]>
10268*dc5640d1SHerbert Xue    </doc>
10269*dc5640d1SHerbert Xue  </class>
10270*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Types -->
10271*dc5640d1SHerbert Xue</package>
10272*dc5640d1SHerbert Xue
10273*dc5640d1SHerbert Xue</api>
10274