1<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
2<!-- Generated by the JDiff Javadoc doclet -->
3<!-- (http://www.jdiff.org) -->
4<!-- on Tue Apr 28 17:33:25 EDT 2015 -->
5
6<api
7  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
8  xsi:noNamespaceSchemaLocation='api.xsd'
9  name="4.0"
10  jdversion="1.1.1">
11
12<!--  Command line arguments =  -doclet jdiff.JDiff -docletpath /usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/jdiff.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/xerces.jar -classpath /usr/local/google/home/cgdecker/Projects/guice/lib/aopalliance.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/guava-16.0.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/javax.inject.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/asm-5.0.3.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/bnd-0.0.384.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/cglib-3.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/easymock.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/felix-2.0.5.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/guava-testlib-16.0.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jarjar-1.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/javax.inject-tck.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jsr305.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/junit.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/munge.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/safesax.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/spring-beans.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/spring-core.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/dagger-adapter/lib/dagger-2.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/antlr-2.7.5h3.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/aopalliance.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/cglib-nodep-3.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-collections.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-io.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/db4o-6.4.14.8131-java5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/dom4j-1.6.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/easymock.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/ejb3-persistence.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-annotations.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-entitymanager.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-search.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate3.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hsqldb.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/javassist.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jaxen-1.1-beta-7.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jboss-archive-browsing.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jta.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/log4j-1.2.14.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/ognl-2.6.7.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/oro-2.0.8.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/servlet-api-2.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/xwork-2.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/ant-1.6.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-fileupload-1.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-io-1.3.2.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/core-3.1.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/freemarker-2.3.16.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/javassist.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jetty-6.1.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jetty-util-6.1.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jsp-2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jsp-api-2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/ognl-3.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/servlet-api-2.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/struts2-core-2.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/xwork-core-2.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/build/classes -doclet jdiff.JDiff -docletpath /usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/jdiff.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/xerces.jar -apidir build/docs/latest-api-diffs -apiname 4.0 -->
13<package name="com.google.inject">
14  <!-- start class com.google.inject.AbstractModule -->
15  <class name="AbstractModule" extends="java.lang.Object"
16    abstract="true"
17    static="false" final="false" visibility="public"
18    deprecated="not deprecated">
19    <implements name="com.google.inject.Module"/>
20    <constructor name="AbstractModule"
21      static="false" final="false" visibility="public"
22      deprecated="not deprecated">
23    </constructor>
24    <method name="configure"
25      abstract="false" native="false" synchronized="true"
26      static="false" final="true" visibility="public"
27      deprecated="not deprecated">
28      <param name="builder" type="com.google.inject.Binder"/>
29    </method>
30    <method name="configure"
31      abstract="true" native="false" synchronized="false"
32      static="false" final="false" visibility="protected"
33      deprecated="not deprecated">
34      <doc>
35      <![CDATA[Configures a {@link Binder} via the exposed methods.]]>
36      </doc>
37    </method>
38    <method name="binder" return="com.google.inject.Binder"
39      abstract="false" native="false" synchronized="false"
40      static="false" final="false" visibility="protected"
41      deprecated="not deprecated">
42      <doc>
43      <![CDATA[Gets direct access to the underlying {@code Binder}.]]>
44      </doc>
45    </method>
46    <method name="bindScope"
47      abstract="false" native="false" synchronized="false"
48      static="false" final="false" visibility="protected"
49      deprecated="not deprecated">
50      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
51      <param name="scope" type="com.google.inject.Scope"/>
52      <doc>
53      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
54      </doc>
55    </method>
56    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
57      abstract="false" native="false" synchronized="false"
58      static="false" final="false" visibility="protected"
59      deprecated="not deprecated">
60      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
61      <doc>
62      <![CDATA[@see Binder#bind(Key)]]>
63      </doc>
64    </method>
65    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
66      abstract="false" native="false" synchronized="false"
67      static="false" final="false" visibility="protected"
68      deprecated="not deprecated">
69      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
70      <doc>
71      <![CDATA[@see Binder#bind(TypeLiteral)]]>
72      </doc>
73    </method>
74    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
75      abstract="false" native="false" synchronized="false"
76      static="false" final="false" visibility="protected"
77      deprecated="not deprecated">
78      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
79      <doc>
80      <![CDATA[@see Binder#bind(Class)]]>
81      </doc>
82    </method>
83    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
84      abstract="false" native="false" synchronized="false"
85      static="false" final="false" visibility="protected"
86      deprecated="not deprecated">
87      <doc>
88      <![CDATA[@see Binder#bindConstant()]]>
89      </doc>
90    </method>
91    <method name="install"
92      abstract="false" native="false" synchronized="false"
93      static="false" final="false" visibility="protected"
94      deprecated="not deprecated">
95      <param name="module" type="com.google.inject.Module"/>
96      <doc>
97      <![CDATA[@see Binder#install(Module)]]>
98      </doc>
99    </method>
100    <method name="addError"
101      abstract="false" native="false" synchronized="false"
102      static="false" final="false" visibility="protected"
103      deprecated="not deprecated">
104      <param name="message" type="java.lang.String"/>
105      <param name="arguments" type="java.lang.Object[]"/>
106      <doc>
107      <![CDATA[@see Binder#addError(String, Object[])]]>
108      </doc>
109    </method>
110    <method name="addError"
111      abstract="false" native="false" synchronized="false"
112      static="false" final="false" visibility="protected"
113      deprecated="not deprecated">
114      <param name="t" type="java.lang.Throwable"/>
115      <doc>
116      <![CDATA[@see Binder#addError(Throwable)]]>
117      </doc>
118    </method>
119    <method name="addError"
120      abstract="false" native="false" synchronized="false"
121      static="false" final="false" visibility="protected"
122      deprecated="not deprecated">
123      <param name="message" type="com.google.inject.spi.Message"/>
124      <doc>
125      <![CDATA[@see Binder#addError(Message)
126 @since 2.0]]>
127      </doc>
128    </method>
129    <method name="requestInjection"
130      abstract="false" native="false" synchronized="false"
131      static="false" final="false" visibility="protected"
132      deprecated="not deprecated">
133      <param name="instance" type="java.lang.Object"/>
134      <doc>
135      <![CDATA[@see Binder#requestInjection(Object)
136 @since 2.0]]>
137      </doc>
138    </method>
139    <method name="requestStaticInjection"
140      abstract="false" native="false" synchronized="false"
141      static="false" final="false" visibility="protected"
142      deprecated="not deprecated">
143      <param name="types" type="java.lang.Class[]"/>
144      <doc>
145      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
146      </doc>
147    </method>
148    <method name="bindInterceptor"
149      abstract="false" native="false" synchronized="false"
150      static="false" final="false" visibility="protected"
151      deprecated="not deprecated">
152      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
153      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
154      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
155      <doc>
156      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher,
157  com.google.inject.matcher.Matcher,
158  org.aopalliance.intercept.MethodInterceptor[])]]>
159      </doc>
160    </method>
161    <method name="requireBinding"
162      abstract="false" native="false" synchronized="false"
163      static="false" final="false" visibility="protected"
164      deprecated="not deprecated">
165      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
166      <doc>
167      <![CDATA[Adds a dependency from this module to {@code key}. When the injector is
168 created, Guice will report an error if {@code key} cannot be injected.
169 Note that this requirement may be satisfied by implicit binding, such as
170 a public no-arguments constructor.
171
172 @since 2.0]]>
173      </doc>
174    </method>
175    <method name="requireBinding"
176      abstract="false" native="false" synchronized="false"
177      static="false" final="false" visibility="protected"
178      deprecated="not deprecated">
179      <param name="type" type="java.lang.Class&lt;?&gt;"/>
180      <doc>
181      <![CDATA[Adds a dependency from this module to {@code type}. When the injector is
182 created, Guice will report an error if {@code type} cannot be injected.
183 Note that this requirement may be satisfied by implicit binding, such as
184 a public no-arguments constructor.
185
186 @since 2.0]]>
187      </doc>
188    </method>
189    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
190      abstract="false" native="false" synchronized="false"
191      static="false" final="false" visibility="protected"
192      deprecated="not deprecated">
193      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
194      <doc>
195      <![CDATA[@see Binder#getProvider(Key)
196 @since 2.0]]>
197      </doc>
198    </method>
199    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
200      abstract="false" native="false" synchronized="false"
201      static="false" final="false" visibility="protected"
202      deprecated="not deprecated">
203      <param name="type" type="java.lang.Class&lt;T&gt;"/>
204      <doc>
205      <![CDATA[@see Binder#getProvider(Class)
206 @since 2.0]]>
207      </doc>
208    </method>
209    <method name="convertToTypes"
210      abstract="false" native="false" synchronized="false"
211      static="false" final="false" visibility="protected"
212      deprecated="not deprecated">
213      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
214      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
215      <doc>
216      <![CDATA[@see Binder#convertToTypes
217 @since 2.0]]>
218      </doc>
219    </method>
220    <method name="currentStage" return="com.google.inject.Stage"
221      abstract="false" native="false" synchronized="false"
222      static="false" final="false" visibility="protected"
223      deprecated="not deprecated">
224      <doc>
225      <![CDATA[@see Binder#currentStage()
226 @since 2.0]]>
227      </doc>
228    </method>
229    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
230      abstract="false" native="false" synchronized="false"
231      static="false" final="false" visibility="protected"
232      deprecated="not deprecated">
233      <param name="type" type="java.lang.Class&lt;T&gt;"/>
234      <doc>
235      <![CDATA[@see Binder#getMembersInjector(Class)
236 @since 2.0]]>
237      </doc>
238    </method>
239    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
240      abstract="false" native="false" synchronized="false"
241      static="false" final="false" visibility="protected"
242      deprecated="not deprecated">
243      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
244      <doc>
245      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)
246 @since 2.0]]>
247      </doc>
248    </method>
249    <method name="bindListener"
250      abstract="false" native="false" synchronized="false"
251      static="false" final="false" visibility="protected"
252      deprecated="not deprecated">
253      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
254      <param name="listener" type="com.google.inject.spi.TypeListener"/>
255      <doc>
256      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher,
257  com.google.inject.spi.TypeListener)
258 @since 2.0]]>
259      </doc>
260    </method>
261    <method name="bindListener"
262      abstract="false" native="false" synchronized="false"
263      static="false" final="false" visibility="protected"
264      deprecated="not deprecated">
265      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
266      <param name="listener" type="com.google.inject.spi.ProvisionListener[]"/>
267      <doc>
268      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
269 @since 4.0]]>
270      </doc>
271    </method>
272    <doc>
273    <![CDATA[A support class for {@link Module}s which reduces repetition and results in
274 a more readable configuration. Simply extend this class, implement {@link
275 #configure()}, and call the inherited methods which mirror those found in
276 {@link Binder}. For example:
277
278 <pre>
279 public class MyModule extends AbstractModule {
280   protected void configure() {
281     bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
282     bind(CreditCardPaymentService.class);
283     bind(PaymentService.class).to(CreditCardPaymentService.class);
284     bindConstant().annotatedWith(Names.named("port")).to(8080);
285   }
286 }
287 </pre>
288
289 @author crazybob@google.com (Bob Lee)]]>
290    </doc>
291  </class>
292  <!-- end class com.google.inject.AbstractModule -->
293  <!-- start interface com.google.inject.Binder -->
294  <interface name="Binder"    abstract="true"
295    static="false" final="false" visibility="public"
296    deprecated="not deprecated">
297    <method name="bindInterceptor"
298      abstract="true" native="false" synchronized="false"
299      static="false" final="false" visibility="public"
300      deprecated="not deprecated">
301      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
302      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
303      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
304      <doc>
305      <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
306 eligible for interception if:
307
308 <ul>
309  <li>Guice created the instance the method is on</li>
310  <li>Neither the enclosing type nor the method is final</li>
311  <li>And the method is package-private, protected, or public</li>
312 </ul>
313
314 @param classMatcher matches classes the interceptor should apply to. For
315     example: {@code only(Runnable.class)}.
316 @param methodMatcher matches methods the interceptor should apply to. For
317     example: {@code annotatedWith(Transactional.class)}.
318 @param interceptors to bind.  The interceptors are called in the order they
319     are given.]]>
320      </doc>
321    </method>
322    <method name="bindScope"
323      abstract="true" native="false" synchronized="false"
324      static="false" final="false" visibility="public"
325      deprecated="not deprecated">
326      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
327      <param name="scope" type="com.google.inject.Scope"/>
328      <doc>
329      <![CDATA[Binds a scope to an annotation.]]>
330      </doc>
331    </method>
332    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
333      abstract="true" native="false" synchronized="false"
334      static="false" final="false" visibility="public"
335      deprecated="not deprecated">
336      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
337      <doc>
338      <![CDATA[See the EDSL examples at {@link Binder}.]]>
339      </doc>
340    </method>
341    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
342      abstract="true" native="false" synchronized="false"
343      static="false" final="false" visibility="public"
344      deprecated="not deprecated">
345      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
346      <doc>
347      <![CDATA[See the EDSL examples at {@link Binder}.]]>
348      </doc>
349    </method>
350    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
351      abstract="true" native="false" synchronized="false"
352      static="false" final="false" visibility="public"
353      deprecated="not deprecated">
354      <param name="type" type="java.lang.Class&lt;T&gt;"/>
355      <doc>
356      <![CDATA[See the EDSL examples at {@link Binder}.]]>
357      </doc>
358    </method>
359    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
360      abstract="true" native="false" synchronized="false"
361      static="false" final="false" visibility="public"
362      deprecated="not deprecated">
363      <doc>
364      <![CDATA[See the EDSL examples at {@link Binder}.]]>
365      </doc>
366    </method>
367    <method name="requestInjection"
368      abstract="true" native="false" synchronized="false"
369      static="false" final="false" visibility="public"
370      deprecated="not deprecated">
371      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
372      <param name="instance" type="T"/>
373      <doc>
374      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
375 and methods of the given object.
376
377 @param type of instance
378 @param instance for which members will be injected
379 @since 2.0]]>
380      </doc>
381    </method>
382    <method name="requestInjection"
383      abstract="true" native="false" synchronized="false"
384      static="false" final="false" visibility="public"
385      deprecated="not deprecated">
386      <param name="instance" type="java.lang.Object"/>
387      <doc>
388      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
389 and methods of the given object.
390
391 @param instance for which members will be injected
392 @since 2.0]]>
393      </doc>
394    </method>
395    <method name="requestStaticInjection"
396      abstract="true" native="false" synchronized="false"
397      static="false" final="false" visibility="public"
398      deprecated="not deprecated">
399      <param name="types" type="java.lang.Class[]"/>
400      <doc>
401      <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
402 and methods in the given classes.
403
404 @param types for which static members will be injected]]>
405      </doc>
406    </method>
407    <method name="install"
408      abstract="true" native="false" synchronized="false"
409      static="false" final="false" visibility="public"
410      deprecated="not deprecated">
411      <param name="module" type="com.google.inject.Module"/>
412      <doc>
413      <![CDATA[Uses the given module to configure more bindings.]]>
414      </doc>
415    </method>
416    <method name="currentStage" return="com.google.inject.Stage"
417      abstract="true" native="false" synchronized="false"
418      static="false" final="false" visibility="public"
419      deprecated="not deprecated">
420      <doc>
421      <![CDATA[Gets the current stage.]]>
422      </doc>
423    </method>
424    <method name="addError"
425      abstract="true" native="false" synchronized="false"
426      static="false" final="false" visibility="public"
427      deprecated="not deprecated">
428      <param name="message" type="java.lang.String"/>
429      <param name="arguments" type="java.lang.Object[]"/>
430      <doc>
431      <![CDATA[Records an error message which will be presented to the user at a later
432 time. Unlike throwing an exception, this enable us to continue
433 configuring the Injector and discover more errors. Uses {@link
434 String#format(String, Object[])} to insert the arguments into the
435 message.]]>
436      </doc>
437    </method>
438    <method name="addError"
439      abstract="true" native="false" synchronized="false"
440      static="false" final="false" visibility="public"
441      deprecated="not deprecated">
442      <param name="t" type="java.lang.Throwable"/>
443      <doc>
444      <![CDATA[Records an exception, the full details of which will be logged, and the
445 message of which will be presented to the user at a later
446 time. If your Module calls something that you worry may fail, you should
447 catch the exception and pass it into this.]]>
448      </doc>
449    </method>
450    <method name="addError"
451      abstract="true" native="false" synchronized="false"
452      static="false" final="false" visibility="public"
453      deprecated="not deprecated">
454      <param name="message" type="com.google.inject.spi.Message"/>
455      <doc>
456      <![CDATA[Records an error message to be presented to the user at a later time.
457
458 @since 2.0]]>
459      </doc>
460    </method>
461    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
462      abstract="true" native="false" synchronized="false"
463      static="false" final="false" visibility="public"
464      deprecated="not deprecated">
465      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
466      <doc>
467      <![CDATA[Returns the provider used to obtain instances for the given injection key.
468 The returned provider will not be valid until the {@link Injector} has been
469 created. The provider will throw an {@code IllegalStateException} if you
470 try to use it beforehand.
471
472 @since 2.0]]>
473      </doc>
474    </method>
475    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
476      abstract="true" native="false" synchronized="false"
477      static="false" final="false" visibility="public"
478      deprecated="not deprecated">
479      <param name="dependency" type="com.google.inject.spi.Dependency&lt;T&gt;"/>
480      <doc>
481      <![CDATA[Returns the provider used to obtain instances for the given injection key.
482 The returned provider will be attached to the injection point and will
483 follow the nullability specified in the dependency.
484 Additionally, the returned provider will not be valid until the {@link Injector}
485 has been created. The provider will throw an {@code IllegalStateException} if you
486 try to use it beforehand.
487
488 @since 4.0]]>
489      </doc>
490    </method>
491    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
492      abstract="true" native="false" synchronized="false"
493      static="false" final="false" visibility="public"
494      deprecated="not deprecated">
495      <param name="type" type="java.lang.Class&lt;T&gt;"/>
496      <doc>
497      <![CDATA[Returns the provider used to obtain instances for the given injection type.
498 The returned provider will not be valid until the {@link Injector} has been
499 created. The provider will throw an {@code IllegalStateException} if you
500 try to use it beforehand.
501
502 @since 2.0]]>
503      </doc>
504    </method>
505    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
506      abstract="true" native="false" synchronized="false"
507      static="false" final="false" visibility="public"
508      deprecated="not deprecated">
509      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
510      <doc>
511      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
512 of the given type {@code T}. The returned members injector will not be valid until the main
513 {@link Injector} has been created. The members injector will throw an {@code
514 IllegalStateException} if you try to use it beforehand.
515
516 @param typeLiteral type to get members injector for
517 @since 2.0]]>
518      </doc>
519    </method>
520    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
521      abstract="true" native="false" synchronized="false"
522      static="false" final="false" visibility="public"
523      deprecated="not deprecated">
524      <param name="type" type="java.lang.Class&lt;T&gt;"/>
525      <doc>
526      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
527 of the given type {@code T}. The returned members injector will not be valid until the main
528 {@link Injector} has been created. The members injector will throw an {@code
529 IllegalStateException} if you try to use it beforehand.
530
531 @param type type to get members injector for
532 @since 2.0]]>
533      </doc>
534    </method>
535    <method name="convertToTypes"
536      abstract="true" native="false" synchronized="false"
537      static="false" final="false" visibility="public"
538      deprecated="not deprecated">
539      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
540      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
541      <doc>
542      <![CDATA[Binds a type converter. The injector will use the given converter to
543 convert string constants to matching types as needed.
544
545 @param typeMatcher matches types the converter can handle
546 @param converter converts values
547 @since 2.0]]>
548      </doc>
549    </method>
550    <method name="bindListener"
551      abstract="true" native="false" synchronized="false"
552      static="false" final="false" visibility="public"
553      deprecated="not deprecated">
554      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
555      <param name="listener" type="com.google.inject.spi.TypeListener"/>
556      <doc>
557      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
558 injectable types matched by the given type matcher.
559
560 @param typeMatcher that matches injectable types the listener should be notified of
561 @param listener for injectable types matched by typeMatcher
562 @since 2.0]]>
563      </doc>
564    </method>
565    <method name="bindListener"
566      abstract="true" native="false" synchronized="false"
567      static="false" final="false" visibility="public"
568      deprecated="not deprecated">
569      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
570      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
571      <doc>
572      <![CDATA[Registers listeners for provisioned objects. Guice will notify the
573 listeners just before and after the object is provisioned. Provisioned
574 objects that are also injectable (everything except objects provided
575 through Providers) can also be notified through TypeListeners registered in
576 {@link #bindListener}.
577
578 @param bindingMatcher that matches bindings of provisioned objects the listener
579          should be notified of
580 @param listeners for provisioned objects matched by bindingMatcher
581 @since 4.0]]>
582      </doc>
583    </method>
584    <method name="withSource" return="com.google.inject.Binder"
585      abstract="true" native="false" synchronized="false"
586      static="false" final="false" visibility="public"
587      deprecated="not deprecated">
588      <param name="source" type="java.lang.Object"/>
589      <doc>
590      <![CDATA[Returns a binder that uses {@code source} as the reference location for
591 configuration errors. This is typically a {@link StackTraceElement}
592 for {@code .java} source but it could any binding source, such as the
593 path to a {@code .properties} file.
594
595 @param source any object representing the source location and has a
596     concise {@link Object#toString() toString()} value
597 @return a binder that shares its configuration with this binder
598 @since 2.0]]>
599      </doc>
600    </method>
601    <method name="skipSources" return="com.google.inject.Binder"
602      abstract="true" native="false" synchronized="false"
603      static="false" final="false" visibility="public"
604      deprecated="not deprecated">
605      <param name="classesToSkip" type="java.lang.Class[]"/>
606      <doc>
607      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
608 calling code. The caller's {@link StackTraceElement} is used to locate
609 the source of configuration errors.
610
611 @param classesToSkip library classes that create bindings on behalf of
612      their clients.
613 @return a binder that shares its configuration with this binder.
614 @since 2.0]]>
615      </doc>
616    </method>
617    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
618      abstract="true" native="false" synchronized="false"
619      static="false" final="false" visibility="public"
620      deprecated="not deprecated">
621      <doc>
622      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
623 binder can be used to add and configuration information in this environment. See {@link
624 PrivateModule} for details.
625
626 @return a binder that inherits configuration from this binder. Only exposed configuration on
627      the returned binder will be visible to this binder.
628 @since 2.0]]>
629      </doc>
630    </method>
631    <method name="requireExplicitBindings"
632      abstract="true" native="false" synchronized="false"
633      static="false" final="false" visibility="public"
634      deprecated="not deprecated">
635      <doc>
636      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
637 be injected. Classes that are not explicitly bound in a module cannot be
638 injected. Bindings created through a linked binding
639 (<code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
640 implicit binding (<code>FooImpl</code>) cannot be directly injected unless
641 it is also explicitly bound (<code>bind(FooImpl.class)</code>).
642 <p>
643 Tools can still retrieve bindings for implicit bindings (bindings created
644 through a linked binding) if explicit bindings are required, however
645 {@link Binding#getProvider} will fail.
646 <p>
647 By default, explicit bindings are not required.
648 <p>
649 If a parent injector requires explicit bindings, then all child injectors
650 (and private modules within that injector) also require explicit bindings.
651 If a parent does not require explicit bindings, a child injector or private
652 module may optionally declare itself as requiring explicit bindings. If it
653 does, the behavior is limited only to that child or any grandchildren. No
654 siblings of the child will require explicit bindings.
655 <p>
656 In the absence of an explicit binding for the target, linked bindings in
657 child injectors create a binding for the target in the parent. Since this
658 behavior can be surprising, it causes an error instead if explicit bindings
659 are required. To avoid this error, add an explicit binding for the target,
660 either in the child or the parent.
661
662 @since 3.0]]>
663      </doc>
664    </method>
665    <method name="disableCircularProxies"
666      abstract="true" native="false" synchronized="false"
667      static="false" final="false" visibility="public"
668      deprecated="not deprecated">
669      <doc>
670      <![CDATA[Prevents Guice from constructing a {@link Proxy} when a circular dependency
671 is found.  By default, circular proxies are not disabled.
672 <p>
673 If a parent injector disables circular proxies, then all child injectors
674 (and private modules within that injector) also disable circular proxies.
675 If a parent does not disable circular proxies, a child injector or private
676 module may optionally declare itself as disabling circular proxies. If it
677 does, the behavior is limited only to that child or any grandchildren. No
678 siblings of the child will disable circular proxies.
679
680 @since 3.0]]>
681      </doc>
682    </method>
683    <method name="requireAtInjectOnConstructors"
684      abstract="true" native="false" synchronized="false"
685      static="false" final="false" visibility="public"
686      deprecated="not deprecated">
687      <doc>
688      <![CDATA[Requires that a {@literal @}{@link Inject} annotation exists on a constructor in order for
689 Guice to consider it an eligible injectable class. By default, Guice will inject classes that
690 have a no-args constructor if no {@literal @}{@link Inject} annotation exists on any
691 constructor.
692 <p>
693 If the class is bound using {@link LinkedBindingBuilder#toConstructor}, Guice will still inject
694 that constructor regardless of annotations.
695
696 @since 4.0]]>
697      </doc>
698    </method>
699    <method name="requireExactBindingAnnotations"
700      abstract="true" native="false" synchronized="false"
701      static="false" final="false" visibility="public"
702      deprecated="not deprecated">
703      <doc>
704      <![CDATA[Requires that Guice finds an exactly matching binding annotation.  This disables the
705 error-prone feature in Guice where it can substitute a binding for
706 <code>{@literal @}Named Foo</code> when attempting to inject
707 <code>{@literal @}Named("foo") Foo</code>.
708
709 @since 4.0]]>
710      </doc>
711    </method>
712    <method name="scanModulesForAnnotatedMethods"
713      abstract="true" native="false" synchronized="false"
714      static="false" final="false" visibility="public"
715      deprecated="not deprecated">
716      <param name="scanner" type="com.google.inject.spi.ModuleAnnotatedMethodScanner"/>
717      <doc>
718      <![CDATA[Adds a scanner that will look in all installed modules for annotations the scanner can parse,
719 and binds them like {@literal @}Provides methods. Scanners apply to all modules installed in
720 the injector. Scanners installed in child injectors or private modules do not impact modules in
721 siblings or parents, however scanners installed in parents do apply to all child injectors and
722 private modules.
723
724 @since 4.0]]>
725      </doc>
726    </method>
727    <doc>
728    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
729 used to create an {@link Injector}. Guice provides this object to your
730 application's {@link Module} implementors so they may each contribute
731 their own bindings and other registrations.
732
733 <h3>The Guice Binding EDSL</h3>
734
735 Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
736 create bindings simply and readably.  This approach is great for overall
737 usability, but it does come with a small cost: <b>it is difficult to
738 learn how to use the Binding EDSL by reading
739 method-level javadocs</b>.  Instead, you should consult the series of
740 examples below.  To save space, these examples omit the opening
741 {@code binder}, just as you will if your module extends
742 {@link AbstractModule}.
743
744 <pre>
745     bind(ServiceImpl.class);</pre>
746
747 This statement does essentially nothing; it "binds the {@code ServiceImpl}
748 class to itself" and does not change Guice's default behavior.  You may still
749 want to use this if you prefer your {@link Module} class to serve as an
750 explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
751 Guice may be unable to validate a binding at injector creation time unless it
752 is given explicitly.
753
754 <pre>
755     bind(Service.class).to(ServiceImpl.class);</pre>
756
757 Specifies that a request for a {@code Service} instance with no binding
758 annotations should be treated as if it were a request for a
759 {@code ServiceImpl} instance. This <i>overrides</i> the function of any
760 {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
761 annotations found on {@code Service}, since Guice will have already
762 "moved on" to {@code ServiceImpl} before it reaches the point when it starts
763 looking for these annotations.
764
765 <pre>
766     bind(Service.class).toProvider(ServiceProvider.class);</pre>
767
768 In this example, {@code ServiceProvider} must extend or implement
769 {@code Provider<Service>}. This binding specifies that Guice should resolve
770 an unannotated injection request for {@code Service} by first resolving an
771 instance of {@code ServiceProvider} in the regular way, then calling
772 {@link Provider#get get()} on the resulting Provider instance to obtain the
773 {@code Service} instance.
774
775 <p>The {@link Provider} you use here does not have to be a "factory"; that
776 is, a provider which always <i>creates</i> each instance it provides.
777 However, this is generally a good practice to follow.  You can then use
778 Guice's concept of {@link Scope scopes} to guide when creation should happen
779 -- "letting Guice work for you".
780
781 <pre>
782     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
783
784 Like the previous example, but only applies to injection requests that use
785 the binding annotation {@code @Red}.  If your module also includes bindings
786 for particular <i>values</i> of the {@code @Red} annotation (see below),
787 then this binding will serve as a "catch-all" for any values of {@code @Red}
788 that have no exact match in the bindings.
789
790 <pre>
791     bind(ServiceImpl.class).in(Singleton.class);
792     // or, alternatively
793     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
794
795 Either of these statements places the {@code ServiceImpl} class into
796 singleton scope.  Guice will create only one instance of {@code ServiceImpl}
797 and will reuse it for all injection requests of this type.  Note that it is
798 still possible to bind another instance of {@code ServiceImpl} if the second
799 binding is qualified by an annotation as in the previous example.  Guice is
800 not overly concerned with <i>preventing</i> you from creating multiple
801 instances of your "singletons", only with <i>enabling</i> your application to
802 share only one instance if that's all you tell Guice you need.
803
804 <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
805 was specified with an annotation on the {@code ServiceImpl} class.
806
807 <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
808 servlet-specific scopes available in
809 {@code com.google.inject.servlet.ServletScopes}, and your Modules can
810 contribute their own custom scopes for use here as well.
811
812 <pre>
813     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
814         .to(CreditCardPaymentService.class);</pre>
815
816 This admittedly odd construct is the way to bind a parameterized type. It
817 tells Guice how to honor an injection request for an element of type
818 {@code PaymentService<CreditCard>}. The class
819 {@code CreditCardPaymentService} must implement the
820 {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
821 inject a generic type, such as {@code Set<E>}; all type parameters must be
822 fully specified.
823
824 <pre>
825     bind(Service.class).toInstance(new ServiceImpl());
826     // or, alternatively
827     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
828
829 In this example, your module itself, <i>not Guice</i>, takes responsibility
830 for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
831 this single instance to fulfill all {@code Service} injection requests.  When
832 the {@link Injector} is created, it will automatically perform field
833 and method injection for this instance, but any injectable constructor on
834 {@code ServiceImpl} is simply ignored.  Note that using this approach results
835 in "eager loading" behavior that you can't control.
836
837 <pre>
838     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
839
840 Sets up a constant binding. Constant injections must always be annotated.
841 When a constant binding's value is a string, it is eligile for conversion to
842 all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
843 {@link Class#forName class literals}. Conversions for other types can be
844 configured using {@link #convertToTypes(Matcher, TypeConverter)
845 convertToTypes()}.
846
847 <pre>
848   {@literal @}Color("red") Color red; // A member variable (field)
849    . . .
850     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
851     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
852
853 If your binding annotation has parameters you can apply different bindings to
854 different specific values of your annotation.  Getting your hands on the
855 right instance of the annotation is a bit of a pain -- one approach, shown
856 above, is to apply a prototype annotation to a field in your module class, so
857 that you can read this annotation instance and give it to Guice.
858
859 <pre>
860     bind(Service.class)
861         .annotatedWith(Names.named("blue"))
862         .to(BlueService.class);</pre>
863
864 Differentiating by names is a common enough use case that we provided a
865 standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
866 Guice's library support, binding by name is quite easier than in the
867 arbitrary binding annotation case we just saw.  However, remember that these
868 names will live in a single flat namespace with all the other names used in
869 your application.
870
871 <pre>
872     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
873     bind(ServiceImpl.class)
874         .toConstructor(loneCtor);</pre>
875
876 In this example, we directly tell Guice which constructor to use in a concrete
877 class implementation. It means that we do not need to place {@literal @}Inject
878 on any of the constructors and that Guice treats the provided constructor as though
879 it were annotated so. It is useful for cases where you cannot modify existing
880 classes and is a bit simpler than using a {@link Provider}.
881
882 <p>The above list of examples is far from exhaustive.  If you can think of
883 how the concepts of one example might coexist with the concepts from another,
884 you can most likely weave the two together.  If the two concepts make no
885 sense with each other, you most likely won't be able to do it.  In a few
886 cases Guice will let something bogus slip by, and will then inform you of
887 the problems at runtime, as soon as you try to create your Injector.
888
889 <p>The other methods of Binder such as {@link #bindScope},
890 {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
891 {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
892 you can learn how to use these in the usual way, from the method
893 documentation.
894
895 @author crazybob@google.com (Bob Lee)
896 @author jessewilson@google.com (Jesse Wilson)
897 @author kevinb@google.com (Kevin Bourrillion)]]>
898    </doc>
899  </interface>
900  <!-- end interface com.google.inject.Binder -->
901  <!-- start interface com.google.inject.Binding -->
902  <interface name="Binding"    abstract="true"
903    static="false" final="false" visibility="public"
904    deprecated="not deprecated">
905    <implements name="com.google.inject.spi.Element"/>
906    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
907      abstract="true" native="false" synchronized="false"
908      static="false" final="false" visibility="public"
909      deprecated="not deprecated">
910      <doc>
911      <![CDATA[Returns the key for this binding.]]>
912      </doc>
913    </method>
914    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
915      abstract="true" native="false" synchronized="false"
916      static="false" final="false" visibility="public"
917      deprecated="not deprecated">
918      <doc>
919      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
920 binding.
921
922 @throws UnsupportedOperationException when invoked on a {@link Binding}
923      created via {@link com.google.inject.spi.Elements#getElements}. This
924      method is only supported on {@link Binding}s returned from an injector.]]>
925      </doc>
926    </method>
927    <method name="acceptTargetVisitor" return="V"
928      abstract="true" native="false" synchronized="false"
929      static="false" final="false" visibility="public"
930      deprecated="not deprecated">
931      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
932      <doc>
933      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
934
935 @param visitor to call back on
936 @since 2.0]]>
937      </doc>
938    </method>
939    <method name="acceptScopingVisitor" return="V"
940      abstract="true" native="false" synchronized="false"
941      static="false" final="false" visibility="public"
942      deprecated="not deprecated">
943      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
944      <doc>
945      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
946
947 @param visitor to call back on
948 @since 2.0]]>
949      </doc>
950    </method>
951    <doc>
952    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
953 type. This interface is part of the introspection API and is intended primarily for use by
954 tools.
955
956 <p>Bindings are created in several ways:
957 <ul>
958     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
959         statements:
960 <pre>
961     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
962     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
963     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
964         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
965         default constructor.</li>
966     <li>By converting a bound instance to a different type.</li>
967     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
968 </ul>
969
970
971 <p>They exist on both modules and on injectors, and their behaviour is different for each:
972 <ul>
973     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
974         This is because the applicable scopes and interceptors may not be known until an injector
975         is created. From a tool's perspective, module bindings are like the injector's source
976         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
977     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
978         instances. From a tools' perspective, injector bindings are like reflection for an
979         injector. They have full runtime information, including the complete graph of injections
980         necessary to satisfy a binding.</li>
981 </ul>
982
983 @param <T> the bound type. The injected is always assignable to this type.
984
985 @author crazybob@google.com (Bob Lee)
986 @author jessewilson@google.com (Jesse Wilson)]]>
987    </doc>
988  </interface>
989  <!-- end interface com.google.inject.Binding -->
990  <!-- start class com.google.inject.BindingAnnotation -->
991  <class name="BindingAnnotation"    abstract="true"
992    static="false" final="false" visibility="public"
993    deprecated="not deprecated">
994    <implements name="java.lang.annotation.Annotation"/>
995    <doc>
996    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
997 may apply to a single injection point. You must also annotate binder
998 annotations with {@code @Retention(RUNTIME)}. For example:
999
1000 <pre>
1001   {@code @}Retention(RUNTIME)
1002   {@code @}Target({ FIELD, PARAMETER, METHOD })
1003   {@code @}BindingAnnotation
1004   public {@code @}interface Transactional {}
1005 </pre>
1006
1007 @author crazybob@google.com (Bob Lee)]]>
1008    </doc>
1009  </class>
1010  <!-- end class com.google.inject.BindingAnnotation -->
1011  <!-- start class com.google.inject.ConfigurationException -->
1012  <class name="ConfigurationException" extends="java.lang.RuntimeException"
1013    abstract="false"
1014    static="false" final="true" visibility="public"
1015    deprecated="not deprecated">
1016    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
1017      static="false" final="false" visibility="public"
1018      deprecated="not deprecated">
1019      <doc>
1020      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
1021      </doc>
1022    </constructor>
1023    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
1024      abstract="false" native="false" synchronized="false"
1025      static="false" final="false" visibility="public"
1026      deprecated="not deprecated">
1027      <param name="partialValue" type="java.lang.Object"/>
1028      <doc>
1029      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
1030      </doc>
1031    </method>
1032    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1033      abstract="false" native="false" synchronized="false"
1034      static="false" final="false" visibility="public"
1035      deprecated="not deprecated">
1036      <doc>
1037      <![CDATA[Returns messages for the errors that caused this exception.]]>
1038      </doc>
1039    </method>
1040    <method name="getPartialValue" return="E"
1041      abstract="false" native="false" synchronized="false"
1042      static="false" final="false" visibility="public"
1043      deprecated="not deprecated">
1044      <doc>
1045      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
1046 this while collecting additional configuration problems.
1047
1048 @return the partial value, or {@code null} if none was set. The type of the partial value is
1049      specified by the throwing method.]]>
1050      </doc>
1051    </method>
1052    <method name="getMessage" return="java.lang.String"
1053      abstract="false" native="false" synchronized="false"
1054      static="false" final="false" visibility="public"
1055      deprecated="not deprecated">
1056    </method>
1057    <doc>
1058    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
1059 scope is found. Clients should catch this exception, log it, and stop execution.
1060
1061 @author jessewilson@google.com (Jesse Wilson)
1062 @since 2.0]]>
1063    </doc>
1064  </class>
1065  <!-- end class com.google.inject.ConfigurationException -->
1066  <!-- start class com.google.inject.CreationException -->
1067  <class name="CreationException" extends="java.lang.RuntimeException"
1068    abstract="false"
1069    static="false" final="false" visibility="public"
1070    deprecated="not deprecated">
1071    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1072      static="false" final="false" visibility="public"
1073      deprecated="not deprecated">
1074      <doc>
1075      <![CDATA[Creates a CreationException containing {@code messages}.]]>
1076      </doc>
1077    </constructor>
1078    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1079      abstract="false" native="false" synchronized="false"
1080      static="false" final="false" visibility="public"
1081      deprecated="not deprecated">
1082      <doc>
1083      <![CDATA[Returns messages for the errors that caused this exception.]]>
1084      </doc>
1085    </method>
1086    <method name="getMessage" return="java.lang.String"
1087      abstract="false" native="false" synchronized="false"
1088      static="false" final="false" visibility="public"
1089      deprecated="not deprecated">
1090    </method>
1091    <doc>
1092    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1093 errors. Clients should catch this exception, log it, and stop execution.
1094
1095 @author crazybob@google.com (Bob Lee)]]>
1096    </doc>
1097  </class>
1098  <!-- end class com.google.inject.CreationException -->
1099  <!-- start class com.google.inject.Exposed -->
1100  <class name="Exposed"    abstract="true"
1101    static="false" final="false" visibility="public"
1102    deprecated="not deprecated">
1103    <implements name="java.lang.annotation.Annotation"/>
1104    <doc>
1105    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1106 private module to indicate that the provided binding is exposed.
1107
1108 @author jessewilson@google.com (Jesse Wilson)
1109 @since 2.0]]>
1110    </doc>
1111  </class>
1112  <!-- end class com.google.inject.Exposed -->
1113  <!-- start class com.google.inject.Guice -->
1114  <class name="Guice" extends="java.lang.Object"
1115    abstract="false"
1116    static="false" final="true" visibility="public"
1117    deprecated="not deprecated">
1118    <method name="createInjector" return="com.google.inject.Injector"
1119      abstract="false" native="false" synchronized="false"
1120      static="true" final="false" visibility="public"
1121      deprecated="not deprecated">
1122      <param name="modules" type="com.google.inject.Module[]"/>
1123      <doc>
1124      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1125 calling {@link #createInjector(Stage, Module...)} with Stage.DEVELOPMENT.
1126
1127 @throws CreationException if one or more errors occur during injector
1128     construction]]>
1129      </doc>
1130    </method>
1131    <method name="createInjector" return="com.google.inject.Injector"
1132      abstract="false" native="false" synchronized="false"
1133      static="true" final="false" visibility="public"
1134      deprecated="not deprecated">
1135      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1136      <doc>
1137      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1138 calling {@link #createInjector(Stage, Iterable)} with Stage.DEVELOPMENT.
1139
1140 @throws CreationException if one or more errors occur during injector
1141     creation]]>
1142      </doc>
1143    </method>
1144    <method name="createInjector" return="com.google.inject.Injector"
1145      abstract="false" native="false" synchronized="false"
1146      static="true" final="false" visibility="public"
1147      deprecated="not deprecated">
1148      <param name="stage" type="com.google.inject.Stage"/>
1149      <param name="modules" type="com.google.inject.Module[]"/>
1150      <doc>
1151      <![CDATA[Creates an injector for the given set of modules, in a given development
1152 stage.
1153
1154 @throws CreationException if one or more errors occur during injector
1155     creation.]]>
1156      </doc>
1157    </method>
1158    <method name="createInjector" return="com.google.inject.Injector"
1159      abstract="false" native="false" synchronized="false"
1160      static="true" final="false" visibility="public"
1161      deprecated="not deprecated">
1162      <param name="stage" type="com.google.inject.Stage"/>
1163      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1164      <doc>
1165      <![CDATA[Creates an injector for the given set of modules, in a given development
1166 stage.
1167
1168 @throws CreationException if one or more errors occur during injector
1169     construction]]>
1170      </doc>
1171    </method>
1172    <doc>
1173    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1174 {@link Module}s.
1175
1176 <p>Guice supports a model of development that draws clear boundaries between
1177 APIs, Implementations of these APIs, Modules which configure these
1178 implementations, and finally Applications which consist of a collection of
1179 Modules. It is the Application, which typically defines your {@code main()}
1180 method, that bootstraps the Guice Injector using the {@code Guice} class, as
1181 in this example:
1182 <pre>
1183     public class FooApplication {
1184       public static void main(String[] args) {
1185         Injector injector = Guice.createInjector(
1186             new ModuleA(),
1187             new ModuleB(),
1188             . . .
1189             new FooApplicationFlagsModule(args)
1190         );
1191
1192         // Now just bootstrap the application and you're done
1193         FooStarter starter = injector.getInstance(FooStarter.class);
1194         starter.runApplication();
1195       }
1196     }
1197 </pre>]]>
1198    </doc>
1199  </class>
1200  <!-- end class com.google.inject.Guice -->
1201  <!-- start class com.google.inject.ImplementedBy -->
1202  <class name="ImplementedBy"    abstract="true"
1203    static="false" final="false" visibility="public"
1204    deprecated="not deprecated">
1205    <implements name="java.lang.annotation.Annotation"/>
1206    <doc>
1207    <![CDATA[A pointer to the default implementation of a type.
1208
1209 @author crazybob@google.com (Bob Lee)]]>
1210    </doc>
1211  </class>
1212  <!-- end class com.google.inject.ImplementedBy -->
1213  <!-- start class com.google.inject.Inject -->
1214  <class name="Inject"    abstract="true"
1215    static="false" final="false" visibility="public"
1216    deprecated="not deprecated">
1217    <implements name="java.lang.annotation.Annotation"/>
1218    <doc>
1219    <![CDATA[Annotates members of your implementation class (constructors, methods
1220 and fields) into which the {@link Injector} should inject values.
1221 The Injector fulfills injection requests for:
1222
1223 <ul>
1224 <li>Every instance it constructs. The class being constructed must have
1225 exactly one of its constructors marked with {@code @Inject} or must have a
1226 constructor taking no parameters. The Injector then proceeds to perform
1227 field and method injections.
1228
1229 <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1230 {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1231 {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(javax.inject.Provider)}.
1232 In this case all constructors are, of course, ignored.
1233
1234 <li>Static fields and methods of classes which any {@link Module} has
1235 specifically requested static injection for, using
1236 {@link Binder#requestStaticInjection}.
1237 </ul>
1238
1239 In all cases, a member can be injected regardless of its Java access
1240 specifier (private, default, protected, public).
1241
1242 @author crazybob@google.com (Bob Lee)]]>
1243    </doc>
1244  </class>
1245  <!-- end class com.google.inject.Inject -->
1246  <!-- start interface com.google.inject.Injector -->
1247  <interface name="Injector"    abstract="true"
1248    static="false" final="false" visibility="public"
1249    deprecated="not deprecated">
1250    <method name="injectMembers"
1251      abstract="true" native="false" synchronized="false"
1252      static="false" final="false" visibility="public"
1253      deprecated="not deprecated">
1254      <param name="instance" type="java.lang.Object"/>
1255      <doc>
1256      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1257 absence of an injectable constructor.
1258
1259 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1260 performing constructor injection), so if you're able to let Guice create all your objects for
1261 you, you'll never need to use this method.
1262
1263 @param instance to inject members on
1264
1265 @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1266  run time]]>
1267      </doc>
1268    </method>
1269    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1270      abstract="true" native="false" synchronized="false"
1271      static="false" final="false" visibility="public"
1272      deprecated="not deprecated">
1273      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1274      <doc>
1275      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1276 of the given type {@code T}.
1277
1278 @param typeLiteral type to get members injector for
1279 @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1280  detection
1281 @since 2.0]]>
1282      </doc>
1283    </method>
1284    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1285      abstract="true" native="false" synchronized="false"
1286      static="false" final="false" visibility="public"
1287      deprecated="not deprecated">
1288      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1289      <doc>
1290      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1291 of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1292 instead to get increased up front error detection.
1293
1294 @param type type to get members injector for
1295 @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1296  detection
1297 @since 2.0]]>
1298      </doc>
1299    </method>
1300    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1301      abstract="true" native="false" synchronized="false"
1302      static="false" final="false" visibility="public"
1303      deprecated="not deprecated">
1304      <doc>
1305      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1306
1307 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1308 injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1309 its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1310 which bindings appear in user Modules.
1311
1312 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1313      </doc>
1314    </method>
1315    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1316      abstract="true" native="false" synchronized="false"
1317      static="false" final="false" visibility="public"
1318      deprecated="not deprecated">
1319      <doc>
1320      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1321 just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1322 present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1323 additional just-in-time bindings.
1324
1325 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1326 injector}, should one exist.
1327
1328 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1329
1330 @since 3.0]]>
1331      </doc>
1332    </method>
1333    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1334      abstract="true" native="false" synchronized="false"
1335      static="false" final="false" visibility="public"
1336      deprecated="not deprecated">
1337      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1338      <doc>
1339      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1340 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1341 be created if necessary.
1342
1343 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1344
1345 @throws ConfigurationException if this injector cannot find or create the binding.]]>
1346      </doc>
1347    </method>
1348    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1349      abstract="true" native="false" synchronized="false"
1350      static="false" final="false" visibility="public"
1351      deprecated="not deprecated">
1352      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1353      <doc>
1354      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1355 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1356 be created if necessary.
1357
1358 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1359
1360 @throws ConfigurationException if this injector cannot find or create the binding.
1361 @since 2.0]]>
1362      </doc>
1363    </method>
1364    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1365      abstract="true" native="false" synchronized="false"
1366      static="false" final="false" visibility="public"
1367      deprecated="not deprecated">
1368      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1369      <doc>
1370      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1371 {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1372 for keys that aren't bound.
1373
1374 <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1375
1376 @since 3.0]]>
1377      </doc>
1378    </method>
1379    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1380      abstract="true" native="false" synchronized="false"
1381      static="false" final="false" visibility="public"
1382      deprecated="not deprecated">
1383      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1384      <doc>
1385      <![CDATA[Returns all explicit bindings for {@code type}.
1386
1387 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1388      </doc>
1389    </method>
1390    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1391      abstract="true" native="false" synchronized="false"
1392      static="false" final="false" visibility="public"
1393      deprecated="not deprecated">
1394      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1395      <doc>
1396      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1397 using this method, in favor of having Guice inject your dependencies ahead of time.
1398
1399 @throws ConfigurationException if this injector cannot find or create the provider.
1400 @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1401      </doc>
1402    </method>
1403    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1404      abstract="true" native="false" synchronized="false"
1405      static="false" final="false" visibility="public"
1406      deprecated="not deprecated">
1407      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1408      <doc>
1409      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1410 using this method, in favor of having Guice inject your dependencies ahead of time.
1411
1412 @throws ConfigurationException if this injector cannot find or create the provider.
1413 @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1414      </doc>
1415    </method>
1416    <method name="getInstance" return="T"
1417      abstract="true" native="false" synchronized="false"
1418      static="false" final="false" visibility="public"
1419      deprecated="not deprecated">
1420      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1421      <doc>
1422      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1423 getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1424 inject your dependencies ahead of time.
1425
1426 @throws ConfigurationException if this injector cannot find or create the provider.
1427 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1428      </doc>
1429    </method>
1430    <method name="getInstance" return="T"
1431      abstract="true" native="false" synchronized="false"
1432      static="false" final="false" visibility="public"
1433      deprecated="not deprecated">
1434      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1435      <doc>
1436      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1437 getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1438 inject your dependencies ahead of time.
1439
1440 @throws ConfigurationException if this injector cannot find or create the provider.
1441 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1442      </doc>
1443    </method>
1444    <method name="getParent" return="com.google.inject.Injector"
1445      abstract="true" native="false" synchronized="false"
1446      static="false" final="false" visibility="public"
1447      deprecated="not deprecated">
1448      <doc>
1449      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1450
1451 @since 2.0]]>
1452      </doc>
1453    </method>
1454    <method name="createChildInjector" return="com.google.inject.Injector"
1455      abstract="true" native="false" synchronized="false"
1456      static="false" final="false" visibility="public"
1457      deprecated="not deprecated">
1458      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1459      <doc>
1460      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1461 interceptors and type converters are inherited -- they are visible to the child injector.
1462 Elements of the child injector are not visible to its parent.
1463
1464 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1465 whenever possible. This allows for scoped instances to be shared between injectors. Use
1466 explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1467 injections in just-in-time bindings (created in the parent injector) may be silently
1468 ignored if the optional dependencies are from the child injector.
1469
1470 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1471 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1472 injector to itself.
1473
1474 @since 2.0]]>
1475      </doc>
1476    </method>
1477    <method name="createChildInjector" return="com.google.inject.Injector"
1478      abstract="true" native="false" synchronized="false"
1479      static="false" final="false" visibility="public"
1480      deprecated="not deprecated">
1481      <param name="modules" type="com.google.inject.Module[]"/>
1482      <doc>
1483      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1484 interceptors and type converters are inherited -- they are visible to the child injector.
1485 Elements of the child injector are not visible to its parent.
1486
1487 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1488 whenever possible. This allows for scoped instances to be shared between injectors. Use
1489 explicit bindings to prevent bindings from being shared with the parent injector.
1490
1491 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1492 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1493 injector to itself.
1494
1495 @since 2.0]]>
1496      </doc>
1497    </method>
1498    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1499      abstract="true" native="false" synchronized="false"
1500      static="false" final="false" visibility="public"
1501      deprecated="not deprecated">
1502      <doc>
1503      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1504 like {@code Singleton.class}, and the values are scope instances, such as {@code
1505 Scopes.SINGLETON}. The returned map is immutable.
1506
1507 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1508
1509 @since 3.0]]>
1510      </doc>
1511    </method>
1512    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1513      abstract="true" native="false" synchronized="false"
1514      static="false" final="false" visibility="public"
1515      deprecated="not deprecated">
1516      <doc>
1517      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1518 immutable.
1519
1520 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1521
1522 @since 3.0]]>
1523      </doc>
1524    </method>
1525    <doc>
1526    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1527 for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1528 interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1529 injection from its cousin, the service locator pattern.
1530
1531 <p>Contains several default bindings:
1532
1533 <ul>
1534 <li>This {@link Injector} instance itself
1535 <li>A {@code Provider<T>} for each binding of type {@code T}
1536 <li>The {@link java.util.logging.Logger} for the class being injected
1537 <li>The {@link Stage} in which the Injector was created
1538 </ul>
1539
1540 Injectors are created using the facade class {@link Guice}.
1541
1542 <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1543 already-constructed instances. This can be used to interoperate with objects created by other
1544 frameworks or services.
1545
1546 <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1547 the configuration of their parent injectors, but the converse does not hold.
1548
1549 <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1550 enables tools and extensions to operate on an injector reflectively.
1551
1552 @author crazybob@google.com (Bob Lee)
1553 @author jessewilson@google.com (Jesse Wilson)]]>
1554    </doc>
1555  </interface>
1556  <!-- end interface com.google.inject.Injector -->
1557  <!-- start class com.google.inject.Key -->
1558  <class name="Key" extends="java.lang.Object"
1559    abstract="false"
1560    static="false" final="false" visibility="public"
1561    deprecated="not deprecated">
1562    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1563      static="false" final="false" visibility="protected"
1564      deprecated="not deprecated">
1565      <doc>
1566      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1567
1568 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1569 parameter in the anonymous class's type hierarchy so we can reconstitute it
1570 at runtime despite erasure.
1571
1572 <p>Example usage for a binding of type {@code Foo} annotated with
1573 {@code @Bar}:
1574
1575 <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1576      </doc>
1577    </constructor>
1578    <constructor name="Key" type="java.lang.annotation.Annotation"
1579      static="false" final="false" visibility="protected"
1580      deprecated="not deprecated">
1581      <doc>
1582      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1583
1584 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1585 parameter in the anonymous class's type hierarchy so we can reconstitute it
1586 at runtime despite erasure.
1587
1588 <p>Example usage for a binding of type {@code Foo} annotated with
1589 {@code @Bar}:
1590
1591 <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1592      </doc>
1593    </constructor>
1594    <constructor name="Key"
1595      static="false" final="false" visibility="protected"
1596      deprecated="not deprecated">
1597      <doc>
1598      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1599
1600 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1601 parameter in the anonymous class's type hierarchy so we can reconstitute it
1602 at runtime despite erasure.
1603
1604 <p>Example usage for a binding of type {@code Foo}:
1605
1606 <p>{@code new Key<Foo>() {}}.]]>
1607      </doc>
1608    </constructor>
1609    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1610      abstract="false" native="false" synchronized="false"
1611      static="false" final="true" visibility="public"
1612      deprecated="not deprecated">
1613      <doc>
1614      <![CDATA[Gets the key type.]]>
1615      </doc>
1616    </method>
1617    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1618      abstract="false" native="false" synchronized="false"
1619      static="false" final="true" visibility="public"
1620      deprecated="not deprecated">
1621      <doc>
1622      <![CDATA[Gets the annotation type.]]>
1623      </doc>
1624    </method>
1625    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1626      abstract="false" native="false" synchronized="false"
1627      static="false" final="true" visibility="public"
1628      deprecated="not deprecated">
1629      <doc>
1630      <![CDATA[Gets the annotation.]]>
1631      </doc>
1632    </method>
1633    <method name="equals" return="boolean"
1634      abstract="false" native="false" synchronized="false"
1635      static="false" final="true" visibility="public"
1636      deprecated="not deprecated">
1637      <param name="o" type="java.lang.Object"/>
1638    </method>
1639    <method name="hashCode" return="int"
1640      abstract="false" native="false" synchronized="false"
1641      static="false" final="true" visibility="public"
1642      deprecated="not deprecated">
1643    </method>
1644    <method name="toString" return="java.lang.String"
1645      abstract="false" native="false" synchronized="false"
1646      static="false" final="true" visibility="public"
1647      deprecated="not deprecated">
1648    </method>
1649    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1650      abstract="false" native="false" synchronized="false"
1651      static="true" final="false" visibility="public"
1652      deprecated="not deprecated">
1653      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1654      <doc>
1655      <![CDATA[Gets a key for an injection type.]]>
1656      </doc>
1657    </method>
1658    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1659      abstract="false" native="false" synchronized="false"
1660      static="true" final="false" visibility="public"
1661      deprecated="not deprecated">
1662      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1663      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1664      <doc>
1665      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1666      </doc>
1667    </method>
1668    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1669      abstract="false" native="false" synchronized="false"
1670      static="true" final="false" visibility="public"
1671      deprecated="not deprecated">
1672      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1673      <param name="annotation" type="java.lang.annotation.Annotation"/>
1674      <doc>
1675      <![CDATA[Gets a key for an injection type and an annotation.]]>
1676      </doc>
1677    </method>
1678    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1679      abstract="false" native="false" synchronized="false"
1680      static="true" final="false" visibility="public"
1681      deprecated="not deprecated">
1682      <param name="type" type="java.lang.reflect.Type"/>
1683      <doc>
1684      <![CDATA[Gets a key for an injection type.]]>
1685      </doc>
1686    </method>
1687    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1688      abstract="false" native="false" synchronized="false"
1689      static="true" final="false" visibility="public"
1690      deprecated="not deprecated">
1691      <param name="type" type="java.lang.reflect.Type"/>
1692      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1693      <doc>
1694      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1695      </doc>
1696    </method>
1697    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1698      abstract="false" native="false" synchronized="false"
1699      static="true" final="false" visibility="public"
1700      deprecated="not deprecated">
1701      <param name="type" type="java.lang.reflect.Type"/>
1702      <param name="annotation" type="java.lang.annotation.Annotation"/>
1703      <doc>
1704      <![CDATA[Gets a key for an injection type and an annotation.]]>
1705      </doc>
1706    </method>
1707    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1708      abstract="false" native="false" synchronized="false"
1709      static="true" final="false" visibility="public"
1710      deprecated="not deprecated">
1711      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1712      <doc>
1713      <![CDATA[Gets a key for an injection type.]]>
1714      </doc>
1715    </method>
1716    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1717      abstract="false" native="false" synchronized="false"
1718      static="true" final="false" visibility="public"
1719      deprecated="not deprecated">
1720      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1721      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1722      <doc>
1723      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1724      </doc>
1725    </method>
1726    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1727      abstract="false" native="false" synchronized="false"
1728      static="true" final="false" visibility="public"
1729      deprecated="not deprecated">
1730      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1731      <param name="annotation" type="java.lang.annotation.Annotation"/>
1732      <doc>
1733      <![CDATA[Gets a key for an injection type and an annotation.]]>
1734      </doc>
1735    </method>
1736    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1737      abstract="false" native="false" synchronized="false"
1738      static="false" final="false" visibility="public"
1739      deprecated="not deprecated">
1740      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1741      <doc>
1742      <![CDATA[Returns a new key of the specified type with the same annotation as this
1743 key.
1744
1745 @since 3.0]]>
1746      </doc>
1747    </method>
1748    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1749      abstract="false" native="false" synchronized="false"
1750      static="false" final="false" visibility="public"
1751      deprecated="not deprecated">
1752      <param name="type" type="java.lang.reflect.Type"/>
1753      <doc>
1754      <![CDATA[Returns a new key of the specified type with the same annotation as this
1755 key.
1756
1757 @since 3.0]]>
1758      </doc>
1759    </method>
1760    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1761      abstract="false" native="false" synchronized="false"
1762      static="false" final="false" visibility="public"
1763      deprecated="not deprecated">
1764      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1765      <doc>
1766      <![CDATA[Returns a new key of the specified type with the same annotation as this
1767 key.
1768
1769 @since 3.0]]>
1770      </doc>
1771    </method>
1772    <method name="hasAttributes" return="boolean"
1773      abstract="false" native="false" synchronized="false"
1774      static="false" final="false" visibility="public"
1775      deprecated="not deprecated">
1776      <doc>
1777      <![CDATA[Returns true if this key has annotation attributes.
1778
1779 @since 3.0]]>
1780      </doc>
1781    </method>
1782    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1783      abstract="false" native="false" synchronized="false"
1784      static="false" final="false" visibility="public"
1785      deprecated="not deprecated">
1786      <doc>
1787      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1788 annotation type.
1789
1790 @since 3.0]]>
1791      </doc>
1792    </method>
1793    <doc>
1794    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1795 Matches the type and annotation at a point of injection.
1796
1797 <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1798 match:
1799
1800 <pre>
1801   {@literal @}Inject
1802   public void setService({@literal @}Transactional Service service) {
1803     ...
1804   }
1805 </pre>
1806
1807 <p>{@code Key} supports generic types via subclassing just like {@link
1808 TypeLiteral}.
1809
1810 <p>Keys do not differentiate between primitive types (int, char, etc.) and
1811 their corresponding wrapper types (Integer, Character, etc.). Primitive
1812 types will be replaced with their wrapper types when keys are created.
1813
1814 @author crazybob@google.com (Bob Lee)]]>
1815    </doc>
1816  </class>
1817  <!-- end class com.google.inject.Key -->
1818  <!-- start interface com.google.inject.MembersInjector -->
1819  <interface name="MembersInjector"    abstract="true"
1820    static="false" final="false" visibility="public"
1821    deprecated="not deprecated">
1822    <method name="injectMembers"
1823      abstract="true" native="false" synchronized="false"
1824      static="false" final="false" visibility="public"
1825      deprecated="not deprecated">
1826      <param name="instance" type="T"/>
1827      <doc>
1828      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1829 absence of an injectable constructor.
1830
1831 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1832 performing constructor injection), so if you're able to let Guice create all your objects for
1833 you, you'll never need to use this method.
1834
1835 @param instance to inject members on. May be {@code null}.]]>
1836      </doc>
1837    </method>
1838    <doc>
1839    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1840 presence or absence of an injectable constructor.
1841
1842 @param <T> type to inject members of
1843
1844 @author crazybob@google.com (Bob Lee)
1845 @author jessewilson@google.com (Jesse Wilson)
1846 @since 2.0]]>
1847    </doc>
1848  </interface>
1849  <!-- end interface com.google.inject.MembersInjector -->
1850  <!-- start interface com.google.inject.Module -->
1851  <interface name="Module"    abstract="true"
1852    static="false" final="false" visibility="public"
1853    deprecated="not deprecated">
1854    <method name="configure"
1855      abstract="true" native="false" synchronized="false"
1856      static="false" final="false" visibility="public"
1857      deprecated="not deprecated">
1858      <param name="binder" type="com.google.inject.Binder"/>
1859      <doc>
1860      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1861
1862 <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1863 {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1864 discovered.]]>
1865      </doc>
1866    </method>
1867    <doc>
1868    <![CDATA[A module contributes configuration information, typically interface
1869 bindings, which will be used to create an {@link Injector}. A Guice-based
1870 application is ultimately composed of little more than a set of
1871 {@code Module}s and some bootstrapping code.
1872
1873 <p>Your Module classes can use a more streamlined syntax by extending
1874 {@link AbstractModule} rather than implementing this interface directly.
1875
1876 <p>In addition to the bindings configured via {@link #configure}, bindings
1877 will be created for all methods annotated with {@literal @}{@link Provides}.
1878 Use scope and binding annotations on these methods to configure the
1879 bindings.]]>
1880    </doc>
1881  </interface>
1882  <!-- end interface com.google.inject.Module -->
1883  <!-- start class com.google.inject.OutOfScopeException -->
1884  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1885    abstract="false"
1886    static="false" final="true" visibility="public"
1887    deprecated="not deprecated">
1888    <constructor name="OutOfScopeException" type="java.lang.String"
1889      static="false" final="false" visibility="public"
1890      deprecated="not deprecated">
1891    </constructor>
1892    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1893      static="false" final="false" visibility="public"
1894      deprecated="not deprecated">
1895    </constructor>
1896    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1897      static="false" final="false" visibility="public"
1898      deprecated="not deprecated">
1899    </constructor>
1900    <doc>
1901    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1902 object while the scope in question is not currently active.
1903
1904 @author kevinb@google.com (Kevin Bourrillion)
1905 @since 2.0]]>
1906    </doc>
1907  </class>
1908  <!-- end class com.google.inject.OutOfScopeException -->
1909  <!-- start interface com.google.inject.PrivateBinder -->
1910  <interface name="PrivateBinder"    abstract="true"
1911    static="false" final="false" visibility="public"
1912    deprecated="not deprecated">
1913    <implements name="com.google.inject.Binder"/>
1914    <method name="expose"
1915      abstract="true" native="false" synchronized="false"
1916      static="false" final="false" visibility="public"
1917      deprecated="not deprecated">
1918      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1919      <doc>
1920      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1921      </doc>
1922    </method>
1923    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1924      abstract="true" native="false" synchronized="false"
1925      static="false" final="false" visibility="public"
1926      deprecated="not deprecated">
1927      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1928      <doc>
1929      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1930 com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1931 binding annotation.]]>
1932      </doc>
1933    </method>
1934    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1935      abstract="true" native="false" synchronized="false"
1936      static="false" final="false" visibility="public"
1937      deprecated="not deprecated">
1938      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1939      <doc>
1940      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1941 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1942 binding annotation.]]>
1943      </doc>
1944    </method>
1945    <method name="withSource" return="com.google.inject.PrivateBinder"
1946      abstract="true" native="false" synchronized="false"
1947      static="false" final="false" visibility="public"
1948      deprecated="not deprecated">
1949      <param name="source" type="java.lang.Object"/>
1950    </method>
1951    <method name="skipSources" return="com.google.inject.PrivateBinder"
1952      abstract="true" native="false" synchronized="false"
1953      static="false" final="false" visibility="public"
1954      deprecated="not deprecated">
1955      <param name="classesToSkip" type="java.lang.Class[]"/>
1956    </method>
1957    <doc>
1958    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1959 {@link com.google.inject.PrivateModule PrivateModule} for details.
1960
1961 @author jessewilson@google.com (Jesse Wilson)
1962 @since 2.0]]>
1963    </doc>
1964  </interface>
1965  <!-- end interface com.google.inject.PrivateBinder -->
1966  <!-- start class com.google.inject.PrivateModule -->
1967  <class name="PrivateModule" extends="java.lang.Object"
1968    abstract="true"
1969    static="false" final="false" visibility="public"
1970    deprecated="not deprecated">
1971    <implements name="com.google.inject.Module"/>
1972    <constructor name="PrivateModule"
1973      static="false" final="false" visibility="public"
1974      deprecated="not deprecated">
1975    </constructor>
1976    <method name="configure"
1977      abstract="false" native="false" synchronized="true"
1978      static="false" final="true" visibility="public"
1979      deprecated="not deprecated">
1980      <param name="binder" type="com.google.inject.Binder"/>
1981    </method>
1982    <method name="configure"
1983      abstract="true" native="false" synchronized="false"
1984      static="false" final="false" visibility="protected"
1985      deprecated="not deprecated">
1986      <doc>
1987      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1988 expose()} to make the bindings in this module available externally.]]>
1989      </doc>
1990    </method>
1991    <method name="expose"
1992      abstract="false" native="false" synchronized="false"
1993      static="false" final="true" visibility="protected"
1994      deprecated="not deprecated">
1995      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1996      <doc>
1997      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1998      </doc>
1999    </method>
2000    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2001      abstract="false" native="false" synchronized="false"
2002      static="false" final="true" visibility="protected"
2003      deprecated="not deprecated">
2004      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2005      <doc>
2006      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2007 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2008 binding annotation.]]>
2009      </doc>
2010    </method>
2011    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2012      abstract="false" native="false" synchronized="false"
2013      static="false" final="true" visibility="protected"
2014      deprecated="not deprecated">
2015      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
2016      <doc>
2017      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2018 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2019 binding annotation.]]>
2020      </doc>
2021    </method>
2022    <method name="binder" return="com.google.inject.PrivateBinder"
2023      abstract="false" native="false" synchronized="false"
2024      static="false" final="true" visibility="protected"
2025      deprecated="not deprecated">
2026      <doc>
2027      <![CDATA[Returns the current binder.]]>
2028      </doc>
2029    </method>
2030    <method name="bindScope"
2031      abstract="false" native="false" synchronized="false"
2032      static="false" final="true" visibility="protected"
2033      deprecated="not deprecated">
2034      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2035      <param name="scope" type="com.google.inject.Scope"/>
2036      <doc>
2037      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
2038      </doc>
2039    </method>
2040    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
2041      abstract="false" native="false" synchronized="false"
2042      static="false" final="true" visibility="protected"
2043      deprecated="not deprecated">
2044      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2045      <doc>
2046      <![CDATA[@see Binder#bind(Key)]]>
2047      </doc>
2048    </method>
2049    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2050      abstract="false" native="false" synchronized="false"
2051      static="false" final="true" visibility="protected"
2052      deprecated="not deprecated">
2053      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2054      <doc>
2055      <![CDATA[@see Binder#bind(TypeLiteral)]]>
2056      </doc>
2057    </method>
2058    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2059      abstract="false" native="false" synchronized="false"
2060      static="false" final="true" visibility="protected"
2061      deprecated="not deprecated">
2062      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
2063      <doc>
2064      <![CDATA[@see Binder#bind(Class)]]>
2065      </doc>
2066    </method>
2067    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
2068      abstract="false" native="false" synchronized="false"
2069      static="false" final="true" visibility="protected"
2070      deprecated="not deprecated">
2071      <doc>
2072      <![CDATA[@see Binder#bindConstant()]]>
2073      </doc>
2074    </method>
2075    <method name="install"
2076      abstract="false" native="false" synchronized="false"
2077      static="false" final="true" visibility="protected"
2078      deprecated="not deprecated">
2079      <param name="module" type="com.google.inject.Module"/>
2080      <doc>
2081      <![CDATA[@see Binder#install(Module)]]>
2082      </doc>
2083    </method>
2084    <method name="addError"
2085      abstract="false" native="false" synchronized="false"
2086      static="false" final="true" visibility="protected"
2087      deprecated="not deprecated">
2088      <param name="message" type="java.lang.String"/>
2089      <param name="arguments" type="java.lang.Object[]"/>
2090      <doc>
2091      <![CDATA[@see Binder#addError(String, Object[])]]>
2092      </doc>
2093    </method>
2094    <method name="addError"
2095      abstract="false" native="false" synchronized="false"
2096      static="false" final="true" visibility="protected"
2097      deprecated="not deprecated">
2098      <param name="t" type="java.lang.Throwable"/>
2099      <doc>
2100      <![CDATA[@see Binder#addError(Throwable)]]>
2101      </doc>
2102    </method>
2103    <method name="addError"
2104      abstract="false" native="false" synchronized="false"
2105      static="false" final="true" visibility="protected"
2106      deprecated="not deprecated">
2107      <param name="message" type="com.google.inject.spi.Message"/>
2108      <doc>
2109      <![CDATA[@see Binder#addError(Message)]]>
2110      </doc>
2111    </method>
2112    <method name="requestInjection"
2113      abstract="false" native="false" synchronized="false"
2114      static="false" final="true" visibility="protected"
2115      deprecated="not deprecated">
2116      <param name="instance" type="java.lang.Object"/>
2117      <doc>
2118      <![CDATA[@see Binder#requestInjection(Object)]]>
2119      </doc>
2120    </method>
2121    <method name="requestStaticInjection"
2122      abstract="false" native="false" synchronized="false"
2123      static="false" final="true" visibility="protected"
2124      deprecated="not deprecated">
2125      <param name="types" type="java.lang.Class[]"/>
2126      <doc>
2127      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2128      </doc>
2129    </method>
2130    <method name="bindInterceptor"
2131      abstract="false" native="false" synchronized="false"
2132      static="false" final="true" visibility="protected"
2133      deprecated="not deprecated">
2134      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2135      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2136      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2137      <doc>
2138      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2139      </doc>
2140    </method>
2141    <method name="requireBinding"
2142      abstract="false" native="false" synchronized="false"
2143      static="false" final="true" visibility="protected"
2144      deprecated="not deprecated">
2145      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2146      <doc>
2147      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2148      </doc>
2149    </method>
2150    <method name="requireBinding"
2151      abstract="false" native="false" synchronized="false"
2152      static="false" final="true" visibility="protected"
2153      deprecated="not deprecated">
2154      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2155      <doc>
2156      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2157      </doc>
2158    </method>
2159    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2160      abstract="false" native="false" synchronized="false"
2161      static="false" final="true" visibility="protected"
2162      deprecated="not deprecated">
2163      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2164      <doc>
2165      <![CDATA[@see Binder#getProvider(Key)]]>
2166      </doc>
2167    </method>
2168    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2169      abstract="false" native="false" synchronized="false"
2170      static="false" final="true" visibility="protected"
2171      deprecated="not deprecated">
2172      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2173      <doc>
2174      <![CDATA[@see Binder#getProvider(Class)]]>
2175      </doc>
2176    </method>
2177    <method name="convertToTypes"
2178      abstract="false" native="false" synchronized="false"
2179      static="false" final="true" visibility="protected"
2180      deprecated="not deprecated">
2181      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2182      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2183      <doc>
2184      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2185      </doc>
2186    </method>
2187    <method name="currentStage" return="com.google.inject.Stage"
2188      abstract="false" native="false" synchronized="false"
2189      static="false" final="true" visibility="protected"
2190      deprecated="not deprecated">
2191      <doc>
2192      <![CDATA[@see Binder#currentStage()]]>
2193      </doc>
2194    </method>
2195    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2196      abstract="false" native="false" synchronized="false"
2197      static="false" final="false" visibility="protected"
2198      deprecated="not deprecated">
2199      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2200      <doc>
2201      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2202      </doc>
2203    </method>
2204    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2205      abstract="false" native="false" synchronized="false"
2206      static="false" final="false" visibility="protected"
2207      deprecated="not deprecated">
2208      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2209      <doc>
2210      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2211      </doc>
2212    </method>
2213    <method name="bindListener"
2214      abstract="false" native="false" synchronized="false"
2215      static="false" final="false" visibility="protected"
2216      deprecated="not deprecated">
2217      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2218      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2219      <doc>
2220      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2221      </doc>
2222    </method>
2223    <method name="bindListener"
2224      abstract="false" native="false" synchronized="false"
2225      static="false" final="false" visibility="protected"
2226      deprecated="not deprecated">
2227      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
2228      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
2229      <doc>
2230      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
2231 @since 4.0]]>
2232      </doc>
2233    </method>
2234    <doc>
2235    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2236 that are explicitly exposed will be available to other modules and to the users of the injector.
2237 This module may expose the bindings it creates and the bindings of the modules it installs.
2238
2239 <p>A private module can be nested within a regular module or within another private module using
2240 {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2241 type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2242 nest multiple private modules, the result is a tree of environments where the injector's
2243 environment is the root.
2244
2245 <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2246 com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2247 Exposed} annotation:
2248
2249 <pre>
2250 public class FooBarBazModule extends PrivateModule {
2251   protected void configure() {
2252     bind(Foo.class).to(RealFoo.class);
2253     expose(Foo.class);
2254
2255     install(new TransactionalBarModule());
2256     expose(Bar.class).annotatedWith(Transactional.class);
2257
2258     bind(SomeImplementationDetail.class);
2259     install(new MoreImplementationDetailsModule());
2260   }
2261
2262   {@literal @}Provides {@literal @}Exposed
2263   public Baz provideBaz() {
2264     return new SuperBaz();
2265   }
2266 }
2267 </pre>
2268
2269 <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2270 injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2271 root environment. Such bindings are shared among all environments in the tree.
2272
2273 <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2274 module will be unique to its environment. But a binding for the same type in a different private
2275 module will yield a different instance.
2276
2277 <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2278 access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2279 gets access to all bindings in the child environment.
2280
2281 <p>To promote a just-in-time binding to an explicit binding, bind it:
2282 <pre>
2283   bind(FooImpl.class);
2284 </pre>
2285
2286 @author jessewilson@google.com (Jesse Wilson)
2287 @since 2.0]]>
2288    </doc>
2289  </class>
2290  <!-- end class com.google.inject.PrivateModule -->
2291  <!-- start class com.google.inject.ProvidedBy -->
2292  <class name="ProvidedBy"    abstract="true"
2293    static="false" final="false" visibility="public"
2294    deprecated="not deprecated">
2295    <implements name="java.lang.annotation.Annotation"/>
2296    <doc>
2297    <![CDATA[A pointer to the default provider type for a type.
2298
2299 @author crazybob@google.com (Bob Lee)]]>
2300    </doc>
2301  </class>
2302  <!-- end class com.google.inject.ProvidedBy -->
2303  <!-- start interface com.google.inject.Provider -->
2304  <interface name="Provider"    abstract="true"
2305    static="false" final="false" visibility="public"
2306    deprecated="not deprecated">
2307    <implements name="javax.inject.Provider&lt;T&gt;"/>
2308    <method name="get" return="T"
2309      abstract="true" native="false" synchronized="false"
2310      static="false" final="false" visibility="public"
2311      deprecated="not deprecated">
2312      <doc>
2313      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2314
2315 @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2316     in question is not currently active
2317 @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2318     and throwables to describe why provision failed.]]>
2319      </doc>
2320    </method>
2321    <doc>
2322    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2323 by Guice:
2324
2325 <ul>
2326 <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2327 is insufficient for a particular binding, the module can specify a custom {@code Provider}
2328 instead, to control exactly how Guice creates or obtains instances for the binding.
2329
2330 <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2331 rather than having a {@code T} injected directly.  This may give you access to multiple
2332 instances, instances you wish to safely mutate and discard, instances which are out of scope
2333 (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2334 instances that will be initialized lazily.
2335
2336 <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2337 when to delegate to the backing provider and when to provide the instance some other way.
2338
2339 <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2340 for a given key, via the {@link Injector#getProvider} methods.
2341 </ul>
2342
2343 @param <T> the type of object this provides
2344
2345 @author crazybob@google.com (Bob Lee)]]>
2346    </doc>
2347  </interface>
2348  <!-- end interface com.google.inject.Provider -->
2349  <!-- start class com.google.inject.Provides -->
2350  <class name="Provides"    abstract="true"
2351    static="false" final="false" visibility="public"
2352    deprecated="not deprecated">
2353    <implements name="java.lang.annotation.Annotation"/>
2354    <doc>
2355    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2356 type is bound to its returned value. Guice will pass dependencies to the method as parameters.
2357
2358 @author crazybob@google.com (Bob Lee)
2359 @since 2.0]]>
2360    </doc>
2361  </class>
2362  <!-- end class com.google.inject.Provides -->
2363  <!-- start class com.google.inject.ProvisionException -->
2364  <class name="ProvisionException" extends="java.lang.RuntimeException"
2365    abstract="false"
2366    static="false" final="true" visibility="public"
2367    deprecated="not deprecated">
2368    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2369      static="false" final="false" visibility="public"
2370      deprecated="not deprecated">
2371      <doc>
2372      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2373      </doc>
2374    </constructor>
2375    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2376      static="false" final="false" visibility="public"
2377      deprecated="not deprecated">
2378    </constructor>
2379    <constructor name="ProvisionException" type="java.lang.String"
2380      static="false" final="false" visibility="public"
2381      deprecated="not deprecated">
2382    </constructor>
2383    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2384      abstract="false" native="false" synchronized="false"
2385      static="false" final="false" visibility="public"
2386      deprecated="not deprecated">
2387      <doc>
2388      <![CDATA[Returns messages for the errors that caused this exception.]]>
2389      </doc>
2390    </method>
2391    <method name="getMessage" return="java.lang.String"
2392      abstract="false" native="false" synchronized="false"
2393      static="false" final="false" visibility="public"
2394      deprecated="not deprecated">
2395    </method>
2396    <doc>
2397    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2398
2399 @author kevinb@google.com (Kevin Bourrillion)
2400 @author jessewilson@google.com (Jesse Wilson)
2401 @since 2.0]]>
2402    </doc>
2403  </class>
2404  <!-- end class com.google.inject.ProvisionException -->
2405  <!-- start interface com.google.inject.Scope -->
2406  <interface name="Scope"    abstract="true"
2407    static="false" final="false" visibility="public"
2408    deprecated="not deprecated">
2409    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2410      abstract="true" native="false" synchronized="false"
2411      static="false" final="false" visibility="public"
2412      deprecated="not deprecated">
2413      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2414      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2415      <doc>
2416      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2417 If an object does not exist in this scope, the provider can use the given
2418 unscoped provider to retrieve one.
2419
2420 <p>Scope implementations are strongly encouraged to override
2421 {@link Object#toString} in the returned provider and include the backing
2422 provider's {@code toString()} output.
2423
2424 @param key binding key
2425 @param unscoped locates an instance when one doesn't already exist in this
2426  scope.
2427 @return a new provider which only delegates to the given unscoped provider
2428  when an instance of the requested object doesn't already exist in this
2429  scope]]>
2430      </doc>
2431    </method>
2432    <method name="toString" return="java.lang.String"
2433      abstract="true" native="false" synchronized="false"
2434      static="false" final="false" visibility="public"
2435      deprecated="not deprecated">
2436      <doc>
2437      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2438 scopes that ship with guice use the descriptions
2439 {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2440 {@code "ServletScopes.REQUEST"}.]]>
2441      </doc>
2442    </method>
2443    <doc>
2444    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2445 By default, an instance created by the {@link Injector} has <i>no scope</i>,
2446 meaning it has no state from the framework's perspective -- the
2447 {@code Injector} creates it, injects it once into the class that required it,
2448 and then immediately forgets it. Associating a scope with a particular
2449 binding allows the created instance to be "remembered" and possibly used
2450 again for other injections.
2451
2452 <p>An example of a scope is {@link Scopes#SINGLETON}.
2453
2454 @author crazybob@google.com (Bob Lee)]]>
2455    </doc>
2456  </interface>
2457  <!-- end interface com.google.inject.Scope -->
2458  <!-- start class com.google.inject.ScopeAnnotation -->
2459  <class name="ScopeAnnotation"    abstract="true"
2460    static="false" final="false" visibility="public"
2461    deprecated="not deprecated">
2462    <implements name="java.lang.annotation.Annotation"/>
2463    <doc>
2464    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2465 may apply to a single implementation class. You must also annotate scope
2466 annotations with {@code @Retention(RUNTIME)}. For example:
2467
2468 <pre>
2469   {@code @}Retention(RUNTIME)
2470   {@code @}Target(TYPE, METHOD)
2471   {@code @}ScopeAnnotation
2472   public {@code @}interface SessionScoped {}
2473 </pre>
2474
2475 @author crazybob@google.com (Bob Lee)]]>
2476    </doc>
2477  </class>
2478  <!-- end class com.google.inject.ScopeAnnotation -->
2479  <!-- start class com.google.inject.Scopes -->
2480  <class name="Scopes" extends="java.lang.Object"
2481    abstract="false"
2482    static="false" final="false" visibility="public"
2483    deprecated="not deprecated">
2484    <method name="isSingleton" return="boolean"
2485      abstract="false" native="false" synchronized="false"
2486      static="true" final="false" visibility="public"
2487      deprecated="not deprecated">
2488      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2489      <doc>
2490      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2491 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2492 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2493 also true if the target binding is singleton-scoped.
2494
2495 @since 3.0]]>
2496      </doc>
2497    </method>
2498    <method name="isScoped" return="boolean"
2499      abstract="false" native="false" synchronized="false"
2500      static="true" final="false" visibility="public"
2501      deprecated="not deprecated">
2502      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2503      <param name="scope" type="com.google.inject.Scope"/>
2504      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2505      <doc>
2506      <![CDATA[Returns true if {@code binding} has the given scope. If the binding is a {@link
2507 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2508 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2509 also true if the target binding has the given scope.
2510
2511 @param binding binding to check
2512 @param scope scope implementation instance
2513 @param scopeAnnotation scope annotation class
2514 @since 4.0]]>
2515      </doc>
2516    </method>
2517    <method name="isCircularProxy" return="boolean"
2518      abstract="false" native="false" synchronized="false"
2519      static="true" final="false" visibility="public"
2520      deprecated="not deprecated">
2521      <param name="object" type="java.lang.Object"/>
2522      <doc>
2523      <![CDATA[Returns true if the object is a proxy for a circular dependency,
2524 constructed by Guice because it encountered a circular dependency. Scope
2525 implementations should be careful to <b>not cache circular proxies</b>,
2526 because the proxies are not intended for general purpose use. (They are
2527 designed just to fulfill the immediate injection, not all injections.
2528 Caching them can lead to IllegalArgumentExceptions or ClassCastExceptions.)
2529
2530 @since 4.0]]>
2531      </doc>
2532    </method>
2533    <field name="SINGLETON" type="com.google.inject.Scope"
2534      transient="false" volatile="false"
2535      static="true" final="true" visibility="public"
2536      deprecated="not deprecated">
2537      <doc>
2538      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2539      </doc>
2540    </field>
2541    <field name="NO_SCOPE" type="com.google.inject.Scope"
2542      transient="false" volatile="false"
2543      static="true" final="true" visibility="public"
2544      deprecated="not deprecated">
2545      <doc>
2546      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2547 Injector obtains an instance of an object with "no scope", it injects this
2548 instance then immediately forgets it.  When the next request for the same
2549 binding arrives it will need to obtain the instance over again.
2550
2551 <p>This exists only in case a class has been annotated with a scope
2552 annotation such as {@link Singleton @Singleton}, and you need to override
2553 this to "no scope" in your binding.
2554
2555 @since 2.0]]>
2556      </doc>
2557    </field>
2558    <doc>
2559    <![CDATA[Built-in scope implementations.
2560
2561 @author crazybob@google.com (Bob Lee)]]>
2562    </doc>
2563  </class>
2564  <!-- end class com.google.inject.Scopes -->
2565  <!-- start class com.google.inject.Singleton -->
2566  <class name="Singleton"    abstract="true"
2567    static="false" final="false" visibility="public"
2568    deprecated="not deprecated">
2569    <implements name="java.lang.annotation.Annotation"/>
2570    <doc>
2571    <![CDATA[Apply this to implementation classes when you want only one instance
2572 (per {@link Injector}) to be reused for all injections for that binding.
2573
2574 @author crazybob@google.com (Bob Lee)]]>
2575    </doc>
2576  </class>
2577  <!-- end class com.google.inject.Singleton -->
2578  <!-- start class com.google.inject.Stage -->
2579  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2580    abstract="false"
2581    static="false" final="true" visibility="public"
2582    deprecated="not deprecated">
2583    <method name="values" return="com.google.inject.Stage[]"
2584      abstract="false" native="false" synchronized="false"
2585      static="true" final="false" visibility="public"
2586      deprecated="not deprecated">
2587    </method>
2588    <method name="valueOf" return="com.google.inject.Stage"
2589      abstract="false" native="false" synchronized="false"
2590      static="true" final="false" visibility="public"
2591      deprecated="not deprecated">
2592      <param name="name" type="java.lang.String"/>
2593    </method>
2594    <doc>
2595    <![CDATA[The stage we're running in.
2596
2597 @author crazybob@google.com (Bob Lee)]]>
2598    </doc>
2599  </class>
2600  <!-- end class com.google.inject.Stage -->
2601  <!-- start class com.google.inject.TypeLiteral -->
2602  <class name="TypeLiteral" extends="java.lang.Object"
2603    abstract="false"
2604    static="false" final="false" visibility="public"
2605    deprecated="not deprecated">
2606    <constructor name="TypeLiteral"
2607      static="false" final="false" visibility="protected"
2608      deprecated="not deprecated">
2609      <doc>
2610      <![CDATA[Constructs a new type literal. Derives represented class from type
2611 parameter.
2612
2613 <p>Clients create an empty anonymous subclass. Doing so embeds the type
2614 parameter in the anonymous class's type hierarchy so we can reconstitute it
2615 at runtime despite erasure.]]>
2616      </doc>
2617    </constructor>
2618    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2619      abstract="false" native="false" synchronized="false"
2620      static="false" final="true" visibility="public"
2621      deprecated="not deprecated">
2622      <doc>
2623      <![CDATA[Returns the raw (non-generic) type for this type.
2624
2625 @since 2.0]]>
2626      </doc>
2627    </method>
2628    <method name="getType" return="java.lang.reflect.Type"
2629      abstract="false" native="false" synchronized="false"
2630      static="false" final="true" visibility="public"
2631      deprecated="not deprecated">
2632      <doc>
2633      <![CDATA[Gets underlying {@code Type} instance.]]>
2634      </doc>
2635    </method>
2636    <method name="hashCode" return="int"
2637      abstract="false" native="false" synchronized="false"
2638      static="false" final="true" visibility="public"
2639      deprecated="not deprecated">
2640    </method>
2641    <method name="equals" return="boolean"
2642      abstract="false" native="false" synchronized="false"
2643      static="false" final="true" visibility="public"
2644      deprecated="not deprecated">
2645      <param name="o" type="java.lang.Object"/>
2646    </method>
2647    <method name="toString" return="java.lang.String"
2648      abstract="false" native="false" synchronized="false"
2649      static="false" final="true" visibility="public"
2650      deprecated="not deprecated">
2651    </method>
2652    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2653      abstract="false" native="false" synchronized="false"
2654      static="true" final="false" visibility="public"
2655      deprecated="not deprecated">
2656      <param name="type" type="java.lang.reflect.Type"/>
2657      <doc>
2658      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2659      </doc>
2660    </method>
2661    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2662      abstract="false" native="false" synchronized="false"
2663      static="true" final="false" visibility="public"
2664      deprecated="not deprecated">
2665      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2666      <doc>
2667      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2668      </doc>
2669    </method>
2670    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2671      abstract="false" native="false" synchronized="false"
2672      static="false" final="false" visibility="public"
2673      deprecated="not deprecated">
2674      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2675      <doc>
2676      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2677 ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2678 Iterable.class}.
2679
2680 @param supertype a superclass of, or interface implemented by, this.
2681 @since 2.0]]>
2682      </doc>
2683    </method>
2684    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2685      abstract="false" native="false" synchronized="false"
2686      static="false" final="false" visibility="public"
2687      deprecated="not deprecated">
2688      <param name="field" type="java.lang.reflect.Field"/>
2689      <doc>
2690      <![CDATA[Returns the resolved generic type of {@code field}.
2691
2692 @param field a field defined by this or any superclass.
2693 @since 2.0]]>
2694      </doc>
2695    </method>
2696    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2697      abstract="false" native="false" synchronized="false"
2698      static="false" final="false" visibility="public"
2699      deprecated="not deprecated">
2700      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2701      <doc>
2702      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2703
2704 @param methodOrConstructor a method or constructor defined by this or any supertype.
2705 @since 2.0]]>
2706      </doc>
2707    </method>
2708    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2709      abstract="false" native="false" synchronized="false"
2710      static="false" final="false" visibility="public"
2711      deprecated="not deprecated">
2712      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2713      <doc>
2714      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2715
2716 @param methodOrConstructor a method or constructor defined by this or any supertype.
2717 @since 2.0]]>
2718      </doc>
2719    </method>
2720    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2721      abstract="false" native="false" synchronized="false"
2722      static="false" final="false" visibility="public"
2723      deprecated="not deprecated">
2724      <param name="method" type="java.lang.reflect.Method"/>
2725      <doc>
2726      <![CDATA[Returns the resolved generic return type of {@code method}.
2727
2728 @param method a method defined by this or any supertype.
2729 @since 2.0]]>
2730      </doc>
2731    </method>
2732    <doc>
2733    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2734 represent generic types, so this class does. Forces clients to create a
2735 subclass of this class which enables retrieval the type information even at
2736 runtime.
2737
2738 <p>For example, to create a type literal for {@code List<String>}, you can
2739 create an empty anonymous inner class:
2740
2741 <p>
2742 {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2743
2744 <p>Along with modeling generic types, this class can resolve type parameters.
2745 For example, to figure out what type {@code keySet()} returns on a {@code
2746 Map<Integer, String>}, use this code:<pre>   {@code
2747
2748   TypeLiteral<Map<Integer, String>> mapType
2749       = new TypeLiteral<Map<Integer, String>>() {};
2750   TypeLiteral<?> keySetType
2751       = mapType.getReturnType(Map.class.getMethod("keySet"));
2752   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2753
2754 @author crazybob@google.com (Bob Lee)
2755 @author jessewilson@google.com (Jesse Wilson)]]>
2756    </doc>
2757  </class>
2758  <!-- end class com.google.inject.TypeLiteral -->
2759</package>
2760<package name="com.google.inject.assistedinject">
2761  <!-- start class com.google.inject.assistedinject.Assisted -->
2762  <class name="Assisted"    abstract="true"
2763    static="false" final="false" visibility="public"
2764    deprecated="not deprecated">
2765    <implements name="java.lang.annotation.Annotation"/>
2766    <doc>
2767    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2768
2769 @author jmourits@google.com (Jerome Mourits)
2770 @author jessewilson@google.com (Jesse Wilson)]]>
2771    </doc>
2772  </class>
2773  <!-- end class com.google.inject.assistedinject.Assisted -->
2774  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2775  <class name="AssistedInject"    abstract="true"
2776    static="false" final="false" visibility="public"
2777    deprecated="not deprecated">
2778    <implements name="java.lang.annotation.Annotation"/>
2779    <doc>
2780    <![CDATA[<p>
2781 When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2782 {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2783 parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2784 annotations. The assisted parameters must exactly match one corresponding factory method within
2785 the factory interface, but the parameters do not need to be in the same order. Constructors
2786 annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2787 (such as AOP).
2788
2789 <p>
2790 <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2791 annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2792 parameters must exactly match one corresponding factory method within the factory interface and
2793 all must be in the same order as listed in the factory. In this backwards compatable mode,
2794 constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2795 none of the benefits.
2796
2797 <p>
2798 Constructor parameters must be either supplied by the factory interface and marked with
2799 <code>@Assisted</code>, or they must be injectable.
2800
2801 @author jmourits@google.com (Jerome Mourits)
2802 @author jessewilson@google.com (Jesse Wilson)]]>
2803    </doc>
2804  </class>
2805  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2806  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2807  <interface name="AssistedInjectBinding"    abstract="true"
2808    static="false" final="false" visibility="public"
2809    deprecated="not deprecated">
2810    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2811      abstract="true" native="false" synchronized="false"
2812      static="false" final="false" visibility="public"
2813      deprecated="not deprecated">
2814      <doc>
2815      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2816      </doc>
2817    </method>
2818    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2819      abstract="true" native="false" synchronized="false"
2820      static="false" final="false" visibility="public"
2821      deprecated="not deprecated">
2822      <doc>
2823      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2824      </doc>
2825    </method>
2826    <doc>
2827    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2828
2829 @param <T> The fully qualified type of the factory.
2830
2831 @since 3.0
2832 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2833    </doc>
2834  </interface>
2835  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2836  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2837  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2838    static="false" final="false" visibility="public"
2839    deprecated="not deprecated">
2840    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2841    <method name="visit" return="V"
2842      abstract="true" native="false" synchronized="false"
2843      static="false" final="false" visibility="public"
2844      deprecated="not deprecated">
2845      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2846      <doc>
2847      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2848      </doc>
2849    </method>
2850    <doc>
2851    <![CDATA[A visitor for the AssistedInject extension.
2852 <p>
2853 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2854 {@link FactoryModuleBuilder} will be visited through this interface.
2855
2856 @since 3.0
2857 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2858    </doc>
2859  </interface>
2860  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2861  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2862  <interface name="AssistedMethod"    abstract="true"
2863    static="false" final="false" visibility="public"
2864    deprecated="not deprecated">
2865    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2866      abstract="true" native="false" synchronized="false"
2867      static="false" final="false" visibility="public"
2868      deprecated="not deprecated">
2869      <doc>
2870      <![CDATA[Returns the factory method that is being assisted.]]>
2871      </doc>
2872    </method>
2873    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2874      abstract="true" native="false" synchronized="false"
2875      static="false" final="false" visibility="public"
2876      deprecated="not deprecated">
2877      <doc>
2878      <![CDATA[Returns the implementation type that will be created when the method is
2879 used.]]>
2880      </doc>
2881    </method>
2882    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2883      abstract="true" native="false" synchronized="false"
2884      static="false" final="false" visibility="public"
2885      deprecated="not deprecated">
2886      <doc>
2887      <![CDATA[Returns the constructor that will be used to construct instances of the
2888 implementation.]]>
2889      </doc>
2890    </method>
2891    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2892      abstract="true" native="false" synchronized="false"
2893      static="false" final="false" visibility="public"
2894      deprecated="not deprecated">
2895      <doc>
2896      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2897 the implementation.]]>
2898      </doc>
2899    </method>
2900    <doc>
2901    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2902
2903 @since 3.0
2904 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2905    </doc>
2906  </interface>
2907  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2908  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2909  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2910    abstract="false"
2911    static="false" final="true" visibility="public"
2912    deprecated="not deprecated">
2913    <constructor name="FactoryModuleBuilder"
2914      static="false" final="false" visibility="public"
2915      deprecated="not deprecated">
2916    </constructor>
2917    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2918      abstract="false" native="false" synchronized="false"
2919      static="false" final="false" visibility="public"
2920      deprecated="not deprecated">
2921      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2922      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2923      <doc>
2924      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2925      </doc>
2926    </method>
2927    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2928      abstract="false" native="false" synchronized="false"
2929      static="false" final="false" visibility="public"
2930      deprecated="not deprecated">
2931      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2932      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2933      <doc>
2934      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2935      </doc>
2936    </method>
2937    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2938      abstract="false" native="false" synchronized="false"
2939      static="false" final="false" visibility="public"
2940      deprecated="not deprecated">
2941      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2942      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2943      <doc>
2944      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2945      </doc>
2946    </method>
2947    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2948      abstract="false" native="false" synchronized="false"
2949      static="false" final="false" visibility="public"
2950      deprecated="not deprecated">
2951      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2952      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2953      <doc>
2954      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2955      </doc>
2956    </method>
2957    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2958      abstract="false" native="false" synchronized="false"
2959      static="false" final="false" visibility="public"
2960      deprecated="not deprecated">
2961      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2962      <param name="annotation" type="java.lang.annotation.Annotation"/>
2963      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2964      <doc>
2965      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2966      </doc>
2967    </method>
2968    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2969      abstract="false" native="false" synchronized="false"
2970      static="false" final="false" visibility="public"
2971      deprecated="not deprecated">
2972      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2973      <param name="annotation" type="java.lang.annotation.Annotation"/>
2974      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2975      <doc>
2976      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2977      </doc>
2978    </method>
2979    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2980      abstract="false" native="false" synchronized="false"
2981      static="false" final="false" visibility="public"
2982      deprecated="not deprecated">
2983      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2984      <param name="annotation" type="java.lang.annotation.Annotation"/>
2985      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2986      <doc>
2987      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2988      </doc>
2989    </method>
2990    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2991      abstract="false" native="false" synchronized="false"
2992      static="false" final="false" visibility="public"
2993      deprecated="not deprecated">
2994      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2995      <param name="annotation" type="java.lang.annotation.Annotation"/>
2996      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2997      <doc>
2998      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2999      </doc>
3000    </method>
3001    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3002      abstract="false" native="false" synchronized="false"
3003      static="false" final="false" visibility="public"
3004      deprecated="not deprecated">
3005      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3006      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3007      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3008      <doc>
3009      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3010      </doc>
3011    </method>
3012    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3013      abstract="false" native="false" synchronized="false"
3014      static="false" final="false" visibility="public"
3015      deprecated="not deprecated">
3016      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3017      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3018      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3019      <doc>
3020      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3021      </doc>
3022    </method>
3023    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3024      abstract="false" native="false" synchronized="false"
3025      static="false" final="false" visibility="public"
3026      deprecated="not deprecated">
3027      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3028      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3029      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3030      <doc>
3031      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3032      </doc>
3033    </method>
3034    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3035      abstract="false" native="false" synchronized="false"
3036      static="false" final="false" visibility="public"
3037      deprecated="not deprecated">
3038      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3039      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3040      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3041      <doc>
3042      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3043      </doc>
3044    </method>
3045    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3046      abstract="false" native="false" synchronized="false"
3047      static="false" final="false" visibility="public"
3048      deprecated="not deprecated">
3049      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3050      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3051      <doc>
3052      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3053      </doc>
3054    </method>
3055    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3056      abstract="false" native="false" synchronized="false"
3057      static="false" final="false" visibility="public"
3058      deprecated="not deprecated">
3059      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3060      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3061      <doc>
3062      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3063      </doc>
3064    </method>
3065    <method name="build" return="com.google.inject.Module"
3066      abstract="false" native="false" synchronized="false"
3067      static="false" final="false" visibility="public"
3068      deprecated="not deprecated">
3069      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
3070      <doc>
3071      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3072      </doc>
3073    </method>
3074    <method name="build" return="com.google.inject.Module"
3075      abstract="false" native="false" synchronized="false"
3076      static="false" final="false" visibility="public"
3077      deprecated="not deprecated">
3078      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3079      <doc>
3080      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3081      </doc>
3082    </method>
3083    <method name="build" return="com.google.inject.Module"
3084      abstract="false" native="false" synchronized="false"
3085      static="false" final="false" visibility="public"
3086      deprecated="not deprecated">
3087      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
3088    </method>
3089    <doc>
3090    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
3091 construct objects.
3092
3093 <h3>Defining a factory</h3>
3094 Create an interface whose methods return the constructed type, or any of its supertypes. The
3095 method's parameters are the arguments required to build the constructed type.
3096
3097 <pre>public interface PaymentFactory {
3098   Payment create(Date startDate, Money amount);
3099 }</pre>
3100
3101 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3102 or <i>newPayment</i>.
3103
3104 <h3>Creating a type that accepts factory parameters</h3>
3105 {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
3106 Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
3107 should have parameters that match each of the factory method's parameters. Each factory-supplied
3108 parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
3109 parameter is not bound by your application's modules.
3110
3111 <pre>public class RealPayment implements Payment {
3112   {@literal @}Inject
3113   public RealPayment(
3114      CreditService creditService,
3115      AuthService authService,
3116      <strong>{@literal @}Assisted Date startDate</strong>,
3117      <strong>{@literal @}Assisted Money amount</strong>) {
3118     ...
3119   }
3120 }</pre>
3121
3122 <h3>Multiple factory methods for the same type</h3>
3123 If the factory contains many methods that return the same type, you can create multiple
3124 constructors in your concrete class, each constructor marked with with
3125 {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
3126 factory methods.
3127
3128 <pre>public interface PaymentFactory {
3129    Payment create(Date startDate, Money amount);
3130    Payment createWithoutDate(Money amount);
3131 }
3132
3133 public class RealPayment implements Payment {
3134  {@literal @}AssistedInject
3135   public RealPayment(
3136      CreditService creditService,
3137      AuthService authService,
3138     <strong>{@literal @}Assisted Date startDate</strong>,
3139     <strong>{@literal @}Assisted Money amount</strong>) {
3140     ...
3141   }
3142
3143  {@literal @}AssistedInject
3144   public RealPayment(
3145      CreditService creditService,
3146      AuthService authService,
3147     <strong>{@literal @}Assisted Money amount</strong>) {
3148     ...
3149   }
3150 }</pre>
3151
3152 <h3>Configuring simple factories</h3>
3153 In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3154 factory:
3155
3156 <pre>install(new FactoryModuleBuilder()
3157     .implement(Payment.class, RealPayment.class)
3158     .build(PaymentFactory.class));</pre>
3159
3160 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3161 factory cannot be used until the injector has been initialized.
3162
3163 <h3>Configuring complex factories</h3>
3164 Factories can create an arbitrary number of objects, one per each method.  Each factory
3165 method can be configured using <code>.implement</code>.
3166
3167 <pre>public interface OrderFactory {
3168    Payment create(Date startDate, Money amount);
3169    Shipment create(Customer customer, Item item);
3170    Receipt create(Payment payment, Shipment shipment);
3171 }
3172
3173 [...]
3174
3175 install(new FactoryModuleBuilder()
3176     .implement(Payment.class, RealPayment.class)
3177     // excluding .implement for Shipment means the implementation class
3178     // will be 'Shipment' itself, which is legal if it's not an interface.
3179     .implement(Receipt.class, RealReceipt.class)
3180     .build(OrderFactory.class));</pre>
3181 </pre>
3182
3183 <h3>Using the factory</h3>
3184 Inject your factory into your application classes. When you use the factory, your arguments
3185 will be combined with values from the injector to construct an instance.
3186
3187 <pre>public class PaymentAction {
3188   {@literal @}Inject private PaymentFactory paymentFactory;
3189
3190   public void doPayment(Money amount) {
3191     Payment payment = paymentFactory.create(new Date(), amount);
3192     payment.apply();
3193   }
3194 }</pre>
3195
3196 <h3>Making parameter types distinct</h3>
3197 The types of the factory method's parameters must be distinct. To use multiple parameters of
3198 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3199 parameters. The names must be applied to the factory method's parameters:
3200
3201 <pre>public interface PaymentFactory {
3202   Payment create(
3203       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3204       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3205       Money amount);
3206 } </pre>
3207
3208 ...and to the concrete type's constructor parameters:
3209
3210 <pre>public class RealPayment implements Payment {
3211   {@literal @}Inject
3212   public RealPayment(
3213      CreditService creditService,
3214      AuthService authService,
3215      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3216      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3217      <strong>{@literal @}Assisted</strong> Money amount) {
3218     ...
3219   }
3220 }</pre>
3221
3222 <h3>Values are created by Guice</h3>
3223 Returned factories use child injectors to create values. The values are eligible for method
3224 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3225 returned.
3226
3227 <h3>More configuration options</h3>
3228 In addition to simply specifying an implementation class for any returned type, factories' return
3229 values can be automatic or can be configured to use annotations:
3230 <p/>
3231 If you just want to return the types specified in the factory, do not configure any
3232 implementations:
3233
3234 <pre>public interface FruitFactory {
3235   Apple getApple(Color color);
3236 }
3237 ...
3238 protected void configure() {
3239   install(new FactoryModuleBuilder().build(FruitFactory.class));
3240 }</pre>
3241
3242 Note that any type returned by the factory in this manner needs to be an implementation class.
3243 <p/>
3244 To return two different implementations for the same interface from your factory, use binding
3245 annotations on your return types:
3246
3247 <pre>interface CarFactory {
3248   {@literal @}Named("fast") Car getFastCar(Color color);
3249   {@literal @}Named("clean") Car getCleanCar(Color color);
3250 }
3251 ...
3252 protected void configure() {
3253   install(new FactoryModuleBuilder()
3254       .implement(Car.class, Names.named("fast"), Porsche.class)
3255       .implement(Car.class, Names.named("clean"), Prius.class)
3256       .build(CarFactory.class));
3257 }</pre>
3258
3259 <h3>Implementation limitations</h3>
3260 As a limitation of the implementation, it is prohibited to declare a factory method that
3261 accepts a {@code Provider} as one of its arguments.
3262
3263 @since 3.0
3264 @author schmitt@google.com (Peter Schmitt)]]>
3265    </doc>
3266  </class>
3267  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3268  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3269  <class name="FactoryProvider" extends="java.lang.Object"
3270    abstract="false"
3271    static="false" final="false" visibility="public"
3272    deprecated="use {@link FactoryModuleBuilder} instead.">
3273    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3274    <implements name="com.google.inject.spi.HasDependencies"/>
3275    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3276      abstract="false" native="false" synchronized="false"
3277      static="true" final="false" visibility="public"
3278      deprecated="not deprecated">
3279      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3280      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3281    </method>
3282    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3283      abstract="false" native="false" synchronized="false"
3284      static="true" final="false" visibility="public"
3285      deprecated="not deprecated">
3286      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3287      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3288    </method>
3289    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3290      abstract="false" native="false" synchronized="false"
3291      static="false" final="false" visibility="public"
3292      deprecated="not deprecated">
3293    </method>
3294    <method name="get" return="F"
3295      abstract="false" native="false" synchronized="false"
3296      static="false" final="false" visibility="public"
3297      deprecated="not deprecated">
3298    </method>
3299    <method name="hashCode" return="int"
3300      abstract="false" native="false" synchronized="false"
3301      static="false" final="false" visibility="public"
3302      deprecated="not deprecated">
3303    </method>
3304    <method name="equals" return="boolean"
3305      abstract="false" native="false" synchronized="false"
3306      static="false" final="false" visibility="public"
3307      deprecated="not deprecated">
3308      <param name="obj" type="java.lang.Object"/>
3309    </method>
3310    <doc>
3311    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3312 additional capability.
3313
3314 <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3315 construct objects.
3316
3317 <h3>Defining a factory</h3>
3318 Create an interface whose methods return the constructed type, or any of its supertypes. The
3319 method's parameters are the arguments required to build the constructed type.
3320 <pre>public interface PaymentFactory {
3321   Payment create(Date startDate, Money amount);
3322 }</pre>
3323 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3324 or <i>newPayment</i>.
3325
3326 <h3>Creating a type that accepts factory parameters</h3>
3327 {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3328 constructor. In addition to injector-supplied parameters, the constructor should have
3329 parameters that match each of the factory method's parameters. Each factory-supplied parameter
3330 requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3331 is not bound by your application's modules.
3332 <pre>public class RealPayment implements Payment {
3333   {@literal @}Inject
3334   public RealPayment(
3335      CreditService creditService,
3336      AuthService authService,
3337      <strong>{@literal @}Assisted Date startDate</strong>,
3338      <strong>{@literal @}Assisted Money amount</strong>) {
3339     ...
3340   }
3341 }</pre>
3342 Any parameter that permits a null value should also be annotated {@code @Nullable}.
3343
3344 <h3>Configuring factories</h3>
3345 In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3346 factory:
3347 <pre>bind(PaymentFactory.class).toProvider(
3348     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3349 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3350 factory cannot be used until the injector has been initialized.
3351
3352 <h3>Using the factory</h3>
3353 Inject your factory into your application classes. When you use the factory, your arguments
3354 will be combined with values from the injector to construct an instance.
3355 <pre>public class PaymentAction {
3356   {@literal @}Inject private PaymentFactory paymentFactory;
3357
3358   public void doPayment(Money amount) {
3359     Payment payment = paymentFactory.create(new Date(), amount);
3360     payment.apply();
3361   }
3362 }</pre>
3363
3364 <h3>Making parameter types distinct</h3>
3365 The types of the factory method's parameters must be distinct. To use multiple parameters of
3366 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3367 parameters. The names must be applied to the factory method's parameters:
3368
3369 <pre>public interface PaymentFactory {
3370   Payment create(
3371       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3372       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3373       Money amount);
3374 } </pre>
3375 ...and to the concrete type's constructor parameters:
3376 <pre>public class RealPayment implements Payment {
3377   {@literal @}Inject
3378   public RealPayment(
3379      CreditService creditService,
3380      AuthService authService,
3381      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3382      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3383      <strong>{@literal @}Assisted</strong> Money amount) {
3384     ...
3385   }
3386 }</pre>
3387
3388 <h3>Values are created by Guice</h3>
3389 Returned factories use child injectors to create values. The values are eligible for method
3390 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3391 returned.
3392
3393 <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3394 Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3395 {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3396
3397 <p>Instead of matching factory method arguments to constructor parameters using their names, the
3398 <strong>parameters are matched by their order</strong>. The first factory method argument is
3399 used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3400 effect.
3401
3402 <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3403 method interception. They do receive post-construction member injection.
3404
3405 @param <F> The factory interface
3406
3407 @author jmourits@google.com (Jerome Mourits)
3408 @author jessewilson@google.com (Jesse Wilson)
3409 @author dtm@google.com (Daniel Martin)
3410
3411 @deprecated use {@link FactoryModuleBuilder} instead.]]>
3412    </doc>
3413  </class>
3414  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3415</package>
3416<package name="com.google.inject.binder">
3417  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3418  <interface name="AnnotatedBindingBuilder"    abstract="true"
3419    static="false" final="false" visibility="public"
3420    deprecated="not deprecated">
3421    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3422    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3423      abstract="true" native="false" synchronized="false"
3424      static="false" final="false" visibility="public"
3425      deprecated="not deprecated">
3426      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3427      <doc>
3428      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3429      </doc>
3430    </method>
3431    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3432      abstract="true" native="false" synchronized="false"
3433      static="false" final="false" visibility="public"
3434      deprecated="not deprecated">
3435      <param name="annotation" type="java.lang.annotation.Annotation"/>
3436      <doc>
3437      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3438      </doc>
3439    </method>
3440    <doc>
3441    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3442
3443 @author crazybob@google.com (Bob Lee)]]>
3444    </doc>
3445  </interface>
3446  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3447  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3448  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3449    static="false" final="false" visibility="public"
3450    deprecated="not deprecated">
3451    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3452      abstract="true" native="false" synchronized="false"
3453      static="false" final="false" visibility="public"
3454      deprecated="not deprecated">
3455      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3456      <doc>
3457      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3458      </doc>
3459    </method>
3460    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3461      abstract="true" native="false" synchronized="false"
3462      static="false" final="false" visibility="public"
3463      deprecated="not deprecated">
3464      <param name="annotation" type="java.lang.annotation.Annotation"/>
3465      <doc>
3466      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3467      </doc>
3468    </method>
3469    <doc>
3470    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3471
3472 @author crazybob@google.com (Bob Lee)]]>
3473    </doc>
3474  </interface>
3475  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3476  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3477  <interface name="AnnotatedElementBuilder"    abstract="true"
3478    static="false" final="false" visibility="public"
3479    deprecated="not deprecated">
3480    <method name="annotatedWith"
3481      abstract="true" native="false" synchronized="false"
3482      static="false" final="false" visibility="public"
3483      deprecated="not deprecated">
3484      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3485      <doc>
3486      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3487      </doc>
3488    </method>
3489    <method name="annotatedWith"
3490      abstract="true" native="false" synchronized="false"
3491      static="false" final="false" visibility="public"
3492      deprecated="not deprecated">
3493      <param name="annotation" type="java.lang.annotation.Annotation"/>
3494      <doc>
3495      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3496      </doc>
3497    </method>
3498    <doc>
3499    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3500
3501 @author jessewilson@google.com (Jesse Wilson)
3502 @since 2.0]]>
3503    </doc>
3504  </interface>
3505  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3506  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3507  <interface name="ConstantBindingBuilder"    abstract="true"
3508    static="false" final="false" visibility="public"
3509    deprecated="not deprecated">
3510    <method name="to"
3511      abstract="true" native="false" synchronized="false"
3512      static="false" final="false" visibility="public"
3513      deprecated="not deprecated">
3514      <param name="value" type="java.lang.String"/>
3515      <doc>
3516      <![CDATA[Binds constant to the given value.]]>
3517      </doc>
3518    </method>
3519    <method name="to"
3520      abstract="true" native="false" synchronized="false"
3521      static="false" final="false" visibility="public"
3522      deprecated="not deprecated">
3523      <param name="value" type="int"/>
3524      <doc>
3525      <![CDATA[Binds constant to the given value.]]>
3526      </doc>
3527    </method>
3528    <method name="to"
3529      abstract="true" native="false" synchronized="false"
3530      static="false" final="false" visibility="public"
3531      deprecated="not deprecated">
3532      <param name="value" type="long"/>
3533      <doc>
3534      <![CDATA[Binds constant to the given value.]]>
3535      </doc>
3536    </method>
3537    <method name="to"
3538      abstract="true" native="false" synchronized="false"
3539      static="false" final="false" visibility="public"
3540      deprecated="not deprecated">
3541      <param name="value" type="boolean"/>
3542      <doc>
3543      <![CDATA[Binds constant to the given value.]]>
3544      </doc>
3545    </method>
3546    <method name="to"
3547      abstract="true" native="false" synchronized="false"
3548      static="false" final="false" visibility="public"
3549      deprecated="not deprecated">
3550      <param name="value" type="double"/>
3551      <doc>
3552      <![CDATA[Binds constant to the given value.]]>
3553      </doc>
3554    </method>
3555    <method name="to"
3556      abstract="true" native="false" synchronized="false"
3557      static="false" final="false" visibility="public"
3558      deprecated="not deprecated">
3559      <param name="value" type="float"/>
3560      <doc>
3561      <![CDATA[Binds constant to the given value.]]>
3562      </doc>
3563    </method>
3564    <method name="to"
3565      abstract="true" native="false" synchronized="false"
3566      static="false" final="false" visibility="public"
3567      deprecated="not deprecated">
3568      <param name="value" type="short"/>
3569      <doc>
3570      <![CDATA[Binds constant to the given value.]]>
3571      </doc>
3572    </method>
3573    <method name="to"
3574      abstract="true" native="false" synchronized="false"
3575      static="false" final="false" visibility="public"
3576      deprecated="not deprecated">
3577      <param name="value" type="char"/>
3578      <doc>
3579      <![CDATA[Binds constant to the given value.]]>
3580      </doc>
3581    </method>
3582    <method name="to"
3583      abstract="true" native="false" synchronized="false"
3584      static="false" final="false" visibility="public"
3585      deprecated="not deprecated">
3586      <param name="value" type="byte"/>
3587      <doc>
3588      <![CDATA[Binds constant to the given value.
3589
3590 @since 3.0]]>
3591      </doc>
3592    </method>
3593    <method name="to"
3594      abstract="true" native="false" synchronized="false"
3595      static="false" final="false" visibility="public"
3596      deprecated="not deprecated">
3597      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3598      <doc>
3599      <![CDATA[Binds constant to the given value.]]>
3600      </doc>
3601    </method>
3602    <method name="to"
3603      abstract="true" native="false" synchronized="false"
3604      static="false" final="false" visibility="public"
3605      deprecated="not deprecated">
3606      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3607      <doc>
3608      <![CDATA[Binds constant to the given value.]]>
3609      </doc>
3610    </method>
3611    <doc>
3612    <![CDATA[Binds to a constant value.]]>
3613    </doc>
3614  </interface>
3615  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3616  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3617  <interface name="LinkedBindingBuilder"    abstract="true"
3618    static="false" final="false" visibility="public"
3619    deprecated="not deprecated">
3620    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3621    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3622      abstract="true" native="false" synchronized="false"
3623      static="false" final="false" visibility="public"
3624      deprecated="not deprecated">
3625      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3626      <doc>
3627      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3628      </doc>
3629    </method>
3630    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3631      abstract="true" native="false" synchronized="false"
3632      static="false" final="false" visibility="public"
3633      deprecated="not deprecated">
3634      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3635      <doc>
3636      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3637      </doc>
3638    </method>
3639    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3640      abstract="true" native="false" synchronized="false"
3641      static="false" final="false" visibility="public"
3642      deprecated="not deprecated">
3643      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3644      <doc>
3645      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3646      </doc>
3647    </method>
3648    <method name="toInstance"
3649      abstract="true" native="false" synchronized="false"
3650      static="false" final="false" visibility="public"
3651      deprecated="not deprecated">
3652      <param name="instance" type="T"/>
3653      <doc>
3654      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3655
3656 @see com.google.inject.Injector#injectMembers]]>
3657      </doc>
3658    </method>
3659    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3660      abstract="true" native="false" synchronized="false"
3661      static="false" final="false" visibility="public"
3662      deprecated="not deprecated">
3663      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3664      <doc>
3665      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3666
3667 @see com.google.inject.Injector#injectMembers]]>
3668      </doc>
3669    </method>
3670    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3671      abstract="true" native="false" synchronized="false"
3672      static="false" final="false" visibility="public"
3673      deprecated="not deprecated">
3674      <param name="provider" type="javax.inject.Provider&lt;? extends T&gt;"/>
3675      <doc>
3676      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3677
3678 @see com.google.inject.Injector#injectMembers
3679 @since 4.0]]>
3680      </doc>
3681    </method>
3682    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3683      abstract="true" native="false" synchronized="false"
3684      static="false" final="false" visibility="public"
3685      deprecated="not deprecated">
3686      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3687      <doc>
3688      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3689      </doc>
3690    </method>
3691    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3692      abstract="true" native="false" synchronized="false"
3693      static="false" final="false" visibility="public"
3694      deprecated="not deprecated">
3695      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3696      <doc>
3697      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3698      </doc>
3699    </method>
3700    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3701      abstract="true" native="false" synchronized="false"
3702      static="false" final="false" visibility="public"
3703      deprecated="not deprecated">
3704      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3705      <doc>
3706      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3707      </doc>
3708    </method>
3709    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3710      abstract="true" native="false" synchronized="false"
3711      static="false" final="false" visibility="public"
3712      deprecated="not deprecated">
3713      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3714      <doc>
3715      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3716
3717 @since 3.0]]>
3718      </doc>
3719    </method>
3720    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3721      abstract="true" native="false" synchronized="false"
3722      static="false" final="false" visibility="public"
3723      deprecated="not deprecated">
3724      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3725      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3726      <doc>
3727      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3728
3729 @since 3.0]]>
3730      </doc>
3731    </method>
3732    <doc>
3733    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3734
3735 @author crazybob@google.com (Bob Lee)]]>
3736    </doc>
3737  </interface>
3738  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3739  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3740  <interface name="ScopedBindingBuilder"    abstract="true"
3741    static="false" final="false" visibility="public"
3742    deprecated="not deprecated">
3743    <method name="in"
3744      abstract="true" native="false" synchronized="false"
3745      static="false" final="false" visibility="public"
3746      deprecated="not deprecated">
3747      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3748      <doc>
3749      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3750      </doc>
3751    </method>
3752    <method name="in"
3753      abstract="true" native="false" synchronized="false"
3754      static="false" final="false" visibility="public"
3755      deprecated="not deprecated">
3756      <param name="scope" type="com.google.inject.Scope"/>
3757      <doc>
3758      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3759      </doc>
3760    </method>
3761    <method name="asEagerSingleton"
3762      abstract="true" native="false" synchronized="false"
3763      static="false" final="false" visibility="public"
3764      deprecated="not deprecated">
3765      <doc>
3766      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3767 singleton-scoped binding upon creation. Useful for application
3768 initialization logic.  See the EDSL examples at
3769 {@link com.google.inject.Binder}.]]>
3770      </doc>
3771    </method>
3772    <doc>
3773    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3774
3775 @author crazybob@google.com (Bob Lee)]]>
3776    </doc>
3777  </interface>
3778  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3779</package>
3780<package name="com.google.inject.daggeradapter">
3781  <!-- start class com.google.inject.daggeradapter.DaggerAdapter -->
3782  <class name="DaggerAdapter" extends="java.lang.Object"
3783    abstract="false"
3784    static="false" final="true" visibility="public"
3785    deprecated="not deprecated">
3786    <method name="from" return="com.google.inject.Module"
3787      abstract="false" native="false" synchronized="false"
3788      static="true" final="false" visibility="public"
3789      deprecated="not deprecated">
3790      <param name="daggerModuleObjects" type="java.lang.Object[]"/>
3791      <doc>
3792      <![CDATA[Returns a guice module from a dagger module.
3793
3794 <p>Note: At present, it does not honor {@code @Module(includes=...)} directives.]]>
3795      </doc>
3796    </method>
3797    <doc>
3798    <![CDATA[A utility to adapt classes annotated with {@link @dagger.Module} such that their
3799 {@link @dagger.Provides} methods can be properly invoked by Guice to perform their
3800 provision operations.
3801
3802 <p>Simple example: <pre>{@code
3803   Guice.createInjector(...other modules..., DaggerAdapter.from(new SomeDaggerAdapter()));
3804 }</pre>
3805
3806 <p>Some notes on usage and compatibility.
3807   <ul>
3808     <li>Dagger provider methods have a "SET_VALUES" provision mode not supported by Guice.
3809     <li>MapBindings are not yet implemented (pending).
3810     <li>Be careful about stateful modules. In contrast to Dagger (where components are
3811         expected to be recreated on-demand with new Module instances), Guice typically
3812         has a single injector with a long lifetime, so your module instance will be used
3813         throughout the lifetime of the entire app.
3814     <li>Dagger 1.x uses {@link @Singleton} for all scopes, including shorter-lived scopes
3815         like per-request or per-activity.  Using modules written with Dagger 1.x usage
3816         in mind may result in mis-scoped objects.
3817     <li>Dagger 2.x supports custom scope annotations, but for use in Guice, a custom scope
3818         implementation must be registered in order to support the custom lifetime of that
3819         annotation.
3820   </ul>
3821
3822 @author cgruber@google.com (Christian Gruber)]]>
3823    </doc>
3824  </class>
3825  <!-- end class com.google.inject.daggeradapter.DaggerAdapter -->
3826</package>
3827<package name="com.google.inject.grapher">
3828  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher -->
3829  <class name="AbstractInjectorGrapher" extends="java.lang.Object"
3830    abstract="true"
3831    static="false" final="false" visibility="public"
3832    deprecated="not deprecated">
3833    <implements name="com.google.inject.grapher.InjectorGrapher"/>
3834    <constructor name="AbstractInjectorGrapher"
3835      static="false" final="false" visibility="public"
3836      deprecated="not deprecated">
3837    </constructor>
3838    <constructor name="AbstractInjectorGrapher" type="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3839      static="false" final="false" visibility="public"
3840      deprecated="not deprecated">
3841    </constructor>
3842    <method name="graph"
3843      abstract="false" native="false" synchronized="false"
3844      static="false" final="true" visibility="public"
3845      deprecated="not deprecated">
3846      <param name="injector" type="com.google.inject.Injector"/>
3847      <exception name="IOException" type="java.io.IOException"/>
3848    </method>
3849    <method name="graph"
3850      abstract="false" native="false" synchronized="false"
3851      static="false" final="true" visibility="public"
3852      deprecated="not deprecated">
3853      <param name="injector" type="com.google.inject.Injector"/>
3854      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
3855      <exception name="IOException" type="java.io.IOException"/>
3856    </method>
3857    <method name="reset"
3858      abstract="true" native="false" synchronized="false"
3859      static="false" final="false" visibility="protected"
3860      deprecated="not deprecated">
3861      <exception name="IOException" type="java.io.IOException"/>
3862      <doc>
3863      <![CDATA[Resets the state of the grapher before rendering a new graph.]]>
3864      </doc>
3865    </method>
3866    <method name="newInterfaceNode"
3867      abstract="true" native="false" synchronized="false"
3868      static="false" final="false" visibility="protected"
3869      deprecated="not deprecated">
3870      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
3871      <exception name="IOException" type="java.io.IOException"/>
3872      <doc>
3873      <![CDATA[Adds a new interface node to the graph.]]>
3874      </doc>
3875    </method>
3876    <method name="newImplementationNode"
3877      abstract="true" native="false" synchronized="false"
3878      static="false" final="false" visibility="protected"
3879      deprecated="not deprecated">
3880      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
3881      <exception name="IOException" type="java.io.IOException"/>
3882      <doc>
3883      <![CDATA[Adds a new implementation node to the graph.]]>
3884      </doc>
3885    </method>
3886    <method name="newInstanceNode"
3887      abstract="true" native="false" synchronized="false"
3888      static="false" final="false" visibility="protected"
3889      deprecated="not deprecated">
3890      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
3891      <exception name="IOException" type="java.io.IOException"/>
3892      <doc>
3893      <![CDATA[Adds a new instance node to the graph.]]>
3894      </doc>
3895    </method>
3896    <method name="newDependencyEdge"
3897      abstract="true" native="false" synchronized="false"
3898      static="false" final="false" visibility="protected"
3899      deprecated="not deprecated">
3900      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
3901      <exception name="IOException" type="java.io.IOException"/>
3902      <doc>
3903      <![CDATA[Adds a new dependency edge to the graph.]]>
3904      </doc>
3905    </method>
3906    <method name="newBindingEdge"
3907      abstract="true" native="false" synchronized="false"
3908      static="false" final="false" visibility="protected"
3909      deprecated="not deprecated">
3910      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
3911      <exception name="IOException" type="java.io.IOException"/>
3912      <doc>
3913      <![CDATA[Adds a new binding edge to the graph.]]>
3914      </doc>
3915    </method>
3916    <method name="postProcess"
3917      abstract="true" native="false" synchronized="false"
3918      static="false" final="false" visibility="protected"
3919      deprecated="not deprecated">
3920      <exception name="IOException" type="java.io.IOException"/>
3921      <doc>
3922      <![CDATA[Performs any post processing required after all nodes and edges have been added.]]>
3923      </doc>
3924    </method>
3925    <doc>
3926    <![CDATA[Abstract injector grapher that builds the dependency graph but doesn't render it.
3927
3928 @author bojand@google.com (Bojan Djordjevic)
3929 @since 4.0]]>
3930    </doc>
3931  </class>
3932  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher -->
3933  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3934  <class name="AbstractInjectorGrapher.GrapherParameters" extends="java.lang.Object"
3935    abstract="false"
3936    static="true" final="true" visibility="public"
3937    deprecated="not deprecated">
3938    <constructor name="GrapherParameters"
3939      static="false" final="false" visibility="public"
3940      deprecated="not deprecated">
3941    </constructor>
3942    <method name="getRootKeySetCreator" return="com.google.inject.grapher.RootKeySetCreator"
3943      abstract="false" native="false" synchronized="false"
3944      static="false" final="false" visibility="public"
3945      deprecated="not deprecated">
3946    </method>
3947    <method name="setRootKeySetCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3948      abstract="false" native="false" synchronized="false"
3949      static="false" final="false" visibility="public"
3950      deprecated="not deprecated">
3951      <param name="rootKeySetCreator" type="com.google.inject.grapher.RootKeySetCreator"/>
3952    </method>
3953    <method name="getAliasCreator" return="com.google.inject.grapher.AliasCreator"
3954      abstract="false" native="false" synchronized="false"
3955      static="false" final="false" visibility="public"
3956      deprecated="not deprecated">
3957    </method>
3958    <method name="setAliasCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3959      abstract="false" native="false" synchronized="false"
3960      static="false" final="false" visibility="public"
3961      deprecated="not deprecated">
3962      <param name="aliasCreator" type="com.google.inject.grapher.AliasCreator"/>
3963    </method>
3964    <method name="getNodeCreator" return="com.google.inject.grapher.NodeCreator"
3965      abstract="false" native="false" synchronized="false"
3966      static="false" final="false" visibility="public"
3967      deprecated="not deprecated">
3968    </method>
3969    <method name="setNodeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3970      abstract="false" native="false" synchronized="false"
3971      static="false" final="false" visibility="public"
3972      deprecated="not deprecated">
3973      <param name="nodeCreator" type="com.google.inject.grapher.NodeCreator"/>
3974    </method>
3975    <method name="getEdgeCreator" return="com.google.inject.grapher.EdgeCreator"
3976      abstract="false" native="false" synchronized="false"
3977      static="false" final="false" visibility="public"
3978      deprecated="not deprecated">
3979    </method>
3980    <method name="setEdgeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3981      abstract="false" native="false" synchronized="false"
3982      static="false" final="false" visibility="public"
3983      deprecated="not deprecated">
3984      <param name="edgeCreator" type="com.google.inject.grapher.EdgeCreator"/>
3985    </method>
3986    <doc>
3987    <![CDATA[Parameters used to override default settings of the grapher.
3988 @since 4.0]]>
3989    </doc>
3990  </class>
3991  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3992  <!-- start class com.google.inject.grapher.Alias -->
3993  <class name="Alias" extends="java.lang.Object"
3994    abstract="false"
3995    static="false" final="true" visibility="public"
3996    deprecated="not deprecated">
3997    <constructor name="Alias" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
3998      static="false" final="false" visibility="public"
3999      deprecated="not deprecated">
4000    </constructor>
4001    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4002      abstract="false" native="false" synchronized="false"
4003      static="false" final="false" visibility="public"
4004      deprecated="not deprecated">
4005    </method>
4006    <method name="getToId" return="com.google.inject.grapher.NodeId"
4007      abstract="false" native="false" synchronized="false"
4008      static="false" final="false" visibility="public"
4009      deprecated="not deprecated">
4010    </method>
4011    <doc>
4012    <![CDATA[Alias between two nodes. Causes the 'from' node to be aliased with the 'to' node, which means
4013 that the 'from' node is not rendered and all edges going to it instead go to the 'to' node.
4014
4015 @author bojand@google.com (Bojan Djordjevic)
4016 @since 4.0]]>
4017    </doc>
4018  </class>
4019  <!-- end class com.google.inject.grapher.Alias -->
4020  <!-- start interface com.google.inject.grapher.AliasCreator -->
4021  <interface name="AliasCreator"    abstract="true"
4022    static="false" final="false" visibility="public"
4023    deprecated="not deprecated">
4024    <method name="createAliases" return="java.lang.Iterable&lt;com.google.inject.grapher.Alias&gt;"
4025      abstract="true" native="false" synchronized="false"
4026      static="false" final="false" visibility="public"
4027      deprecated="not deprecated">
4028      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4029      <doc>
4030      <![CDATA[Returns aliases for the given dependency graph. The aliases do not need to be transitively
4031 resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
4032 responsibility of the caller to resolve this to (X to Z) and (Y to Z).
4033
4034 @param bindings bindings that make up the dependency graph
4035 @return aliases that should be applied on the graph]]>
4036      </doc>
4037    </method>
4038    <doc>
4039    <![CDATA[Creator of node aliases. Used by dependency graphers to merge nodes in the internal Guice graph
4040 into a single node on the rendered graph.
4041
4042 @author bojand@google.com (Bojan Djordjevic)
4043 @since 4.0]]>
4044    </doc>
4045  </interface>
4046  <!-- end interface com.google.inject.grapher.AliasCreator -->
4047  <!-- start class com.google.inject.grapher.BindingEdge -->
4048  <class name="BindingEdge" extends="com.google.inject.grapher.Edge"
4049    abstract="false"
4050    static="false" final="false" visibility="public"
4051    deprecated="not deprecated">
4052    <constructor name="BindingEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.grapher.BindingEdge.Type"
4053      static="false" final="false" visibility="public"
4054      deprecated="not deprecated">
4055    </constructor>
4056    <method name="getType" return="com.google.inject.grapher.BindingEdge.Type"
4057      abstract="false" native="false" synchronized="false"
4058      static="false" final="false" visibility="public"
4059      deprecated="not deprecated">
4060    </method>
4061    <method name="equals" return="boolean"
4062      abstract="false" native="false" synchronized="false"
4063      static="false" final="false" visibility="public"
4064      deprecated="not deprecated">
4065      <param name="obj" type="java.lang.Object"/>
4066    </method>
4067    <method name="hashCode" return="int"
4068      abstract="false" native="false" synchronized="false"
4069      static="false" final="false" visibility="public"
4070      deprecated="not deprecated">
4071    </method>
4072    <method name="toString" return="java.lang.String"
4073      abstract="false" native="false" synchronized="false"
4074      static="false" final="false" visibility="public"
4075      deprecated="not deprecated">
4076    </method>
4077    <method name="copy" return="com.google.inject.grapher.Edge"
4078      abstract="false" native="false" synchronized="false"
4079      static="false" final="false" visibility="public"
4080      deprecated="not deprecated">
4081      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4082      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4083    </method>
4084    <doc>
4085    <![CDATA[Edge that connects an interface to the type or instance that is bound to implement it.
4086
4087 @author phopkins@gmail.com (Pete Hopkins)
4088 @since 4.0 (since 2.0 as an interface)]]>
4089    </doc>
4090  </class>
4091  <!-- end class com.google.inject.grapher.BindingEdge -->
4092  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
4093  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
4094    abstract="false"
4095    static="true" final="true" visibility="public"
4096    deprecated="not deprecated">
4097    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
4098      abstract="false" native="false" synchronized="false"
4099      static="true" final="false" visibility="public"
4100      deprecated="not deprecated">
4101    </method>
4102    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
4103      abstract="false" native="false" synchronized="false"
4104      static="true" final="false" visibility="public"
4105      deprecated="not deprecated">
4106      <param name="name" type="java.lang.String"/>
4107    </method>
4108    <doc>
4109    <![CDATA[Classification for what kind of binding this edge represents.]]>
4110    </doc>
4111  </class>
4112  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
4113  <!-- start class com.google.inject.grapher.DefaultRootKeySetCreator -->
4114  <class name="DefaultRootKeySetCreator" extends="java.lang.Object"
4115    abstract="false"
4116    static="false" final="false" visibility="public"
4117    deprecated="not deprecated">
4118    <implements name="com.google.inject.grapher.RootKeySetCreator"/>
4119    <constructor name="DefaultRootKeySetCreator"
4120      static="false" final="false" visibility="public"
4121      deprecated="not deprecated">
4122    </constructor>
4123    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4124      abstract="false" native="false" synchronized="false"
4125      static="false" final="false" visibility="public"
4126      deprecated="not deprecated">
4127      <param name="injector" type="com.google.inject.Injector"/>
4128    </method>
4129    <doc>
4130    <![CDATA[Root key set creator that starts with all types that are not Guice internal types or the
4131 {@link Logger} type.
4132
4133 @author bojand@google.com (Bojan Djordjevic)
4134 @since 4.0]]>
4135    </doc>
4136  </class>
4137  <!-- end class com.google.inject.grapher.DefaultRootKeySetCreator -->
4138  <!-- start class com.google.inject.grapher.DependencyEdge -->
4139  <class name="DependencyEdge" extends="com.google.inject.grapher.Edge"
4140    abstract="false"
4141    static="false" final="false" visibility="public"
4142    deprecated="not deprecated">
4143    <constructor name="DependencyEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.spi.InjectionPoint"
4144      static="false" final="false" visibility="public"
4145      deprecated="not deprecated">
4146    </constructor>
4147    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
4148      abstract="false" native="false" synchronized="false"
4149      static="false" final="false" visibility="public"
4150      deprecated="not deprecated">
4151    </method>
4152    <method name="equals" return="boolean"
4153      abstract="false" native="false" synchronized="false"
4154      static="false" final="false" visibility="public"
4155      deprecated="not deprecated">
4156      <param name="obj" type="java.lang.Object"/>
4157    </method>
4158    <method name="hashCode" return="int"
4159      abstract="false" native="false" synchronized="false"
4160      static="false" final="false" visibility="public"
4161      deprecated="not deprecated">
4162    </method>
4163    <method name="toString" return="java.lang.String"
4164      abstract="false" native="false" synchronized="false"
4165      static="false" final="false" visibility="public"
4166      deprecated="not deprecated">
4167    </method>
4168    <method name="copy" return="com.google.inject.grapher.Edge"
4169      abstract="false" native="false" synchronized="false"
4170      static="false" final="false" visibility="public"
4171      deprecated="not deprecated">
4172      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4173      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4174    </method>
4175    <doc>
4176    <![CDATA[Edge from a class or {@link InjectionPoint} to the interface node that will satisfy the
4177 dependency.
4178
4179 @author phopkins@gmail.com (Pete Hopkins)
4180 @since 4.0 (since 2.0 as an interface)]]>
4181    </doc>
4182  </class>
4183  <!-- end class com.google.inject.grapher.DependencyEdge -->
4184  <!-- start class com.google.inject.grapher.Edge -->
4185  <class name="Edge" extends="java.lang.Object"
4186    abstract="true"
4187    static="false" final="false" visibility="public"
4188    deprecated="not deprecated">
4189    <constructor name="Edge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4190      static="false" final="false" visibility="protected"
4191      deprecated="not deprecated">
4192    </constructor>
4193    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4194      abstract="false" native="false" synchronized="false"
4195      static="false" final="false" visibility="public"
4196      deprecated="not deprecated">
4197    </method>
4198    <method name="getToId" return="com.google.inject.grapher.NodeId"
4199      abstract="false" native="false" synchronized="false"
4200      static="false" final="false" visibility="public"
4201      deprecated="not deprecated">
4202    </method>
4203    <method name="equals" return="boolean"
4204      abstract="false" native="false" synchronized="false"
4205      static="false" final="false" visibility="public"
4206      deprecated="not deprecated">
4207      <param name="obj" type="java.lang.Object"/>
4208    </method>
4209    <method name="hashCode" return="int"
4210      abstract="false" native="false" synchronized="false"
4211      static="false" final="false" visibility="public"
4212      deprecated="not deprecated">
4213    </method>
4214    <method name="copy" return="com.google.inject.grapher.Edge"
4215      abstract="true" native="false" synchronized="false"
4216      static="false" final="false" visibility="public"
4217      deprecated="not deprecated">
4218      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4219      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4220      <doc>
4221      <![CDATA[Returns a copy of the edge with new node IDs.
4222
4223 @param fromId new ID of the 'from' node
4224 @param toId new ID of the 'to' node
4225 @return copy of the edge with the new node IDs]]>
4226      </doc>
4227    </method>
4228    <doc>
4229    <![CDATA[Edge in a guice dependency graph.
4230
4231 @author bojand@google.com (Bojan Djordjevic)
4232 @since 4.0]]>
4233    </doc>
4234  </class>
4235  <!-- end class com.google.inject.grapher.Edge -->
4236  <!-- start interface com.google.inject.grapher.EdgeCreator -->
4237  <interface name="EdgeCreator"    abstract="true"
4238    static="false" final="false" visibility="public"
4239    deprecated="not deprecated">
4240    <method name="getEdges" return="java.lang.Iterable&lt;com.google.inject.grapher.Edge&gt;"
4241      abstract="true" native="false" synchronized="false"
4242      static="false" final="false" visibility="public"
4243      deprecated="not deprecated">
4244      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4245      <doc>
4246      <![CDATA[Returns edges for the given dependency graph.]]>
4247      </doc>
4248    </method>
4249    <doc>
4250    <![CDATA[Creator of graph edges to render. All edges will be rendered on the graph after node aliasing is
4251 performed.
4252
4253 @author bojand@google.com (Bojan Djordjevic)
4254 @since 4.0]]>
4255    </doc>
4256  </interface>
4257  <!-- end interface com.google.inject.grapher.EdgeCreator -->
4258  <!-- start class com.google.inject.grapher.ImplementationNode -->
4259  <class name="ImplementationNode" extends="com.google.inject.grapher.Node"
4260    abstract="false"
4261    static="false" final="false" visibility="public"
4262    deprecated="not deprecated">
4263    <constructor name="ImplementationNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.util.Collection&lt;java.lang.reflect.Member&gt;"
4264      static="false" final="false" visibility="public"
4265      deprecated="not deprecated">
4266    </constructor>
4267    <method name="getMembers" return="java.util.Collection&lt;java.lang.reflect.Member&gt;"
4268      abstract="false" native="false" synchronized="false"
4269      static="false" final="false" visibility="public"
4270      deprecated="not deprecated">
4271    </method>
4272    <method name="equals" return="boolean"
4273      abstract="false" native="false" synchronized="false"
4274      static="false" final="false" visibility="public"
4275      deprecated="not deprecated">
4276      <param name="obj" type="java.lang.Object"/>
4277    </method>
4278    <method name="hashCode" return="int"
4279      abstract="false" native="false" synchronized="false"
4280      static="false" final="false" visibility="public"
4281      deprecated="not deprecated">
4282    </method>
4283    <method name="toString" return="java.lang.String"
4284      abstract="false" native="false" synchronized="false"
4285      static="false" final="false" visibility="public"
4286      deprecated="not deprecated">
4287    </method>
4288    <method name="copy" return="com.google.inject.grapher.Node"
4289      abstract="false" native="false" synchronized="false"
4290      static="false" final="false" visibility="public"
4291      deprecated="not deprecated">
4292      <param name="id" type="com.google.inject.grapher.NodeId"/>
4293    </method>
4294    <doc>
4295    <![CDATA[Node for types that have {@link com.google.inject.spi.Dependency}s and are
4296 bound to {@link InterfaceNode}s. These nodes will often have fields for
4297 {@link Member}s that are {@link com.google.inject.spi.InjectionPoint}s.
4298
4299 @see DependencyEdge
4300 @author phopkins@gmail.com (Pete Hopkins)
4301 @since 4.0 (since 2.0 as an interface)]]>
4302    </doc>
4303  </class>
4304  <!-- end class com.google.inject.grapher.ImplementationNode -->
4305  <!-- start interface com.google.inject.grapher.InjectorGrapher -->
4306  <interface name="InjectorGrapher"    abstract="true"
4307    static="false" final="false" visibility="public"
4308    deprecated="not deprecated">
4309    <method name="graph"
4310      abstract="true" native="false" synchronized="false"
4311      static="false" final="false" visibility="public"
4312      deprecated="not deprecated">
4313      <param name="injector" type="com.google.inject.Injector"/>
4314      <exception name="IOException" type="java.io.IOException"/>
4315      <doc>
4316      <![CDATA[Graphs the guice dependency graph for the given injector using default starting keys.]]>
4317      </doc>
4318    </method>
4319    <method name="graph"
4320      abstract="true" native="false" synchronized="false"
4321      static="false" final="false" visibility="public"
4322      deprecated="not deprecated">
4323      <param name="injector" type="com.google.inject.Injector"/>
4324      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
4325      <exception name="IOException" type="java.io.IOException"/>
4326      <doc>
4327      <![CDATA[Graphs the guice dependency graph for the given injector using the given starting keys and
4328 their transitive dependencies.]]>
4329      </doc>
4330    </method>
4331    <doc>
4332    <![CDATA[Guice injector grapher. Renders the guice dependency graph for an injector. It can render the
4333 whole dependency graph or just transitive dependencies of a given set of nodes.
4334
4335 @author phopkins@gmail.com (Pete Hopkins)
4336 @since 4.0 (since 2.0 as a concrete class with a different API)]]>
4337    </doc>
4338  </interface>
4339  <!-- end interface com.google.inject.grapher.InjectorGrapher -->
4340  <!-- start class com.google.inject.grapher.InstanceNode -->
4341  <class name="InstanceNode" extends="com.google.inject.grapher.Node"
4342    abstract="false"
4343    static="false" final="false" visibility="public"
4344    deprecated="not deprecated">
4345    <constructor name="InstanceNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.lang.Object, java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4346      static="false" final="false" visibility="public"
4347      deprecated="not deprecated">
4348    </constructor>
4349    <method name="getInstance" return="java.lang.Object"
4350      abstract="false" native="false" synchronized="false"
4351      static="false" final="false" visibility="public"
4352      deprecated="not deprecated">
4353    </method>
4354    <method name="getMembers" return="java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4355      abstract="false" native="false" synchronized="false"
4356      static="false" final="false" visibility="public"
4357      deprecated="not deprecated">
4358    </method>
4359    <method name="equals" return="boolean"
4360      abstract="false" native="false" synchronized="false"
4361      static="false" final="false" visibility="public"
4362      deprecated="not deprecated">
4363      <param name="obj" type="java.lang.Object"/>
4364    </method>
4365    <method name="hashCode" return="int"
4366      abstract="false" native="false" synchronized="false"
4367      static="false" final="false" visibility="public"
4368      deprecated="not deprecated">
4369    </method>
4370    <method name="toString" return="java.lang.String"
4371      abstract="false" native="false" synchronized="false"
4372      static="false" final="false" visibility="public"
4373      deprecated="not deprecated">
4374    </method>
4375    <method name="copy" return="com.google.inject.grapher.Node"
4376      abstract="false" native="false" synchronized="false"
4377      static="false" final="false" visibility="public"
4378      deprecated="not deprecated">
4379      <param name="id" type="com.google.inject.grapher.NodeId"/>
4380    </method>
4381    <doc>
4382    <![CDATA[Node for instances. Used when a type is bound to an instance.
4383
4384 @author bojand@google.com (Bojan Djordjevic)
4385 @since 4.0]]>
4386    </doc>
4387  </class>
4388  <!-- end class com.google.inject.grapher.InstanceNode -->
4389  <!-- start class com.google.inject.grapher.InterfaceNode -->
4390  <class name="InterfaceNode" extends="com.google.inject.grapher.Node"
4391    abstract="false"
4392    static="false" final="false" visibility="public"
4393    deprecated="not deprecated">
4394    <constructor name="InterfaceNode" type="com.google.inject.grapher.NodeId, java.lang.Object"
4395      static="false" final="false" visibility="public"
4396      deprecated="not deprecated">
4397    </constructor>
4398    <method name="copy" return="com.google.inject.grapher.Node"
4399      abstract="false" native="false" synchronized="false"
4400      static="false" final="false" visibility="public"
4401      deprecated="not deprecated">
4402      <param name="id" type="com.google.inject.grapher.NodeId"/>
4403    </method>
4404    <method name="equals" return="boolean"
4405      abstract="false" native="false" synchronized="false"
4406      static="false" final="false" visibility="public"
4407      deprecated="not deprecated">
4408      <param name="obj" type="java.lang.Object"/>
4409    </method>
4410    <method name="toString" return="java.lang.String"
4411      abstract="false" native="false" synchronized="false"
4412      static="false" final="false" visibility="public"
4413      deprecated="not deprecated">
4414    </method>
4415    <doc>
4416    <![CDATA[Node for an interface type that has been bound to an implementation class or instance.
4417
4418 @see BindingEdge
4419 @author phopkins@gmail.com (Pete Hopkins)
4420 @since 4.0 (since 2.0 as an interface)]]>
4421    </doc>
4422  </class>
4423  <!-- end class com.google.inject.grapher.InterfaceNode -->
4424  <!-- start interface com.google.inject.grapher.NameFactory -->
4425  <interface name="NameFactory"    abstract="true"
4426    static="false" final="false" visibility="public"
4427    deprecated="not deprecated">
4428    <method name="getMemberName" return="java.lang.String"
4429      abstract="true" native="false" synchronized="false"
4430      static="false" final="false" visibility="public"
4431      deprecated="not deprecated">
4432      <param name="member" type="java.lang.reflect.Member"/>
4433    </method>
4434    <method name="getClassName" return="java.lang.String"
4435      abstract="true" native="false" synchronized="false"
4436      static="false" final="false" visibility="public"
4437      deprecated="not deprecated">
4438      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4439    </method>
4440    <method name="getInstanceName" return="java.lang.String"
4441      abstract="true" native="false" synchronized="false"
4442      static="false" final="false" visibility="public"
4443      deprecated="not deprecated">
4444      <param name="instance" type="java.lang.Object"/>
4445    </method>
4446    <method name="getAnnotationName" return="java.lang.String"
4447      abstract="true" native="false" synchronized="false"
4448      static="false" final="false" visibility="public"
4449      deprecated="not deprecated">
4450      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4451    </method>
4452    <method name="getSourceName" return="java.lang.String"
4453      abstract="true" native="false" synchronized="false"
4454      static="false" final="false" visibility="public"
4455      deprecated="not deprecated">
4456      <param name="source" type="java.lang.Object"/>
4457    </method>
4458    <doc>
4459    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4460 display in the graph for the types that come up in
4461 {@link com.google.inject.Binding}s.
4462
4463 @author phopkins@gmail.com (Pete Hopkins)]]>
4464    </doc>
4465  </interface>
4466  <!-- end interface com.google.inject.grapher.NameFactory -->
4467  <!-- start class com.google.inject.grapher.Node -->
4468  <class name="Node" extends="java.lang.Object"
4469    abstract="true"
4470    static="false" final="false" visibility="public"
4471    deprecated="not deprecated">
4472    <constructor name="Node" type="com.google.inject.grapher.NodeId, java.lang.Object"
4473      static="false" final="false" visibility="protected"
4474      deprecated="not deprecated">
4475    </constructor>
4476    <method name="getId" return="com.google.inject.grapher.NodeId"
4477      abstract="false" native="false" synchronized="false"
4478      static="false" final="false" visibility="public"
4479      deprecated="not deprecated">
4480    </method>
4481    <method name="getSource" return="java.lang.Object"
4482      abstract="false" native="false" synchronized="false"
4483      static="false" final="false" visibility="public"
4484      deprecated="not deprecated">
4485    </method>
4486    <method name="equals" return="boolean"
4487      abstract="false" native="false" synchronized="false"
4488      static="false" final="false" visibility="public"
4489      deprecated="not deprecated">
4490      <param name="obj" type="java.lang.Object"/>
4491    </method>
4492    <method name="hashCode" return="int"
4493      abstract="false" native="false" synchronized="false"
4494      static="false" final="false" visibility="public"
4495      deprecated="not deprecated">
4496    </method>
4497    <method name="copy" return="com.google.inject.grapher.Node"
4498      abstract="true" native="false" synchronized="false"
4499      static="false" final="false" visibility="public"
4500      deprecated="not deprecated">
4501      <param name="id" type="com.google.inject.grapher.NodeId"/>
4502      <doc>
4503      <![CDATA[Returns a copy of the node with a new ID.
4504
4505 @param id new ID of the node
4506 @return copy of the node with a new ID]]>
4507      </doc>
4508    </method>
4509    <doc>
4510    <![CDATA[Node in a guice dependency graph.
4511
4512 @author bojand@google.com (Bojan Djordjevic)
4513 @since 4.0]]>
4514    </doc>
4515  </class>
4516  <!-- end class com.google.inject.grapher.Node -->
4517  <!-- start interface com.google.inject.grapher.NodeCreator -->
4518  <interface name="NodeCreator"    abstract="true"
4519    static="false" final="false" visibility="public"
4520    deprecated="not deprecated">
4521    <method name="getNodes" return="java.lang.Iterable&lt;com.google.inject.grapher.Node&gt;"
4522      abstract="true" native="false" synchronized="false"
4523      static="false" final="false" visibility="public"
4524      deprecated="not deprecated">
4525      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4526      <doc>
4527      <![CDATA[Returns nodes for the given dependency graph.]]>
4528      </doc>
4529    </method>
4530    <doc>
4531    <![CDATA[Creator of graph nodes.
4532
4533 @author bojand@google.com (Bojan Djordjevic)
4534 @since 4.0]]>
4535    </doc>
4536  </interface>
4537  <!-- end interface com.google.inject.grapher.NodeCreator -->
4538  <!-- start class com.google.inject.grapher.NodeId -->
4539  <class name="NodeId" extends="java.lang.Object"
4540    abstract="false"
4541    static="false" final="true" visibility="public"
4542    deprecated="not deprecated">
4543    <method name="newTypeId" return="com.google.inject.grapher.NodeId"
4544      abstract="false" native="false" synchronized="false"
4545      static="true" final="false" visibility="public"
4546      deprecated="not deprecated">
4547      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4548    </method>
4549    <method name="newInstanceId" return="com.google.inject.grapher.NodeId"
4550      abstract="false" native="false" synchronized="false"
4551      static="true" final="false" visibility="public"
4552      deprecated="not deprecated">
4553      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4554    </method>
4555    <method name="getKey" return="com.google.inject.Key&lt;?&gt;"
4556      abstract="false" native="false" synchronized="false"
4557      static="false" final="false" visibility="public"
4558      deprecated="not deprecated">
4559    </method>
4560    <method name="hashCode" return="int"
4561      abstract="false" native="false" synchronized="false"
4562      static="false" final="false" visibility="public"
4563      deprecated="not deprecated">
4564    </method>
4565    <method name="equals" return="boolean"
4566      abstract="false" native="false" synchronized="false"
4567      static="false" final="false" visibility="public"
4568      deprecated="not deprecated">
4569      <param name="obj" type="java.lang.Object"/>
4570    </method>
4571    <method name="toString" return="java.lang.String"
4572      abstract="false" native="false" synchronized="false"
4573      static="false" final="false" visibility="public"
4574      deprecated="not deprecated">
4575    </method>
4576    <doc>
4577    <![CDATA[ID of a node in the graph. An ID is given by a {@link Key} and a node type, which is used to
4578 distinguish instances and implementation classes for the same key. For example
4579 {@code bind(Integer.class).toInstance(42)} produces two nodes: an
4580 interface node with the key of {@code Key<Integer>} and an instance node with the same
4581 {@link Key} and value of 42.
4582
4583 @author bojand@google.com (Bojan Djordjevic)
4584 @since 4.0]]>
4585    </doc>
4586  </class>
4587  <!-- end class com.google.inject.grapher.NodeId -->
4588  <!-- start class com.google.inject.grapher.NodeId.NodeType -->
4589  <class name="NodeId.NodeType" extends="java.lang.Enum&lt;com.google.inject.grapher.NodeId.NodeType&gt;"
4590    abstract="false"
4591    static="true" final="true" visibility="public"
4592    deprecated="not deprecated">
4593    <method name="values" return="com.google.inject.grapher.NodeId.NodeType[]"
4594      abstract="false" native="false" synchronized="false"
4595      static="true" final="false" visibility="public"
4596      deprecated="not deprecated">
4597    </method>
4598    <method name="valueOf" return="com.google.inject.grapher.NodeId.NodeType"
4599      abstract="false" native="false" synchronized="false"
4600      static="true" final="false" visibility="public"
4601      deprecated="not deprecated">
4602      <param name="name" type="java.lang.String"/>
4603    </method>
4604    <doc>
4605    <![CDATA[Type of node.
4606
4607 @since 4.0]]>
4608    </doc>
4609  </class>
4610  <!-- end class com.google.inject.grapher.NodeId.NodeType -->
4611  <!-- start interface com.google.inject.grapher.RootKeySetCreator -->
4612  <interface name="RootKeySetCreator"    abstract="true"
4613    static="false" final="false" visibility="public"
4614    deprecated="not deprecated">
4615    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4616      abstract="true" native="false" synchronized="false"
4617      static="false" final="false" visibility="public"
4618      deprecated="not deprecated">
4619      <param name="injector" type="com.google.inject.Injector"/>
4620      <doc>
4621      <![CDATA[Returns the set of starting keys to graph.]]>
4622      </doc>
4623    </method>
4624    <doc>
4625    <![CDATA[Creator of the default starting set of keys to graph. These keys and their transitive
4626 dependencies will be graphed.
4627
4628 @author bojand@google.com (Bojan Djordjevic)
4629 @since 4.0]]>
4630    </doc>
4631  </interface>
4632  <!-- end interface com.google.inject.grapher.RootKeySetCreator -->
4633  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4634  <class name="ShortNameFactory" extends="java.lang.Object"
4635    abstract="false"
4636    static="false" final="false" visibility="public"
4637    deprecated="not deprecated">
4638    <implements name="com.google.inject.grapher.NameFactory"/>
4639    <constructor name="ShortNameFactory"
4640      static="false" final="false" visibility="public"
4641      deprecated="not deprecated">
4642    </constructor>
4643    <method name="getMemberName" return="java.lang.String"
4644      abstract="false" native="false" synchronized="false"
4645      static="false" final="false" visibility="public"
4646      deprecated="not deprecated">
4647      <param name="member" type="java.lang.reflect.Member"/>
4648    </method>
4649    <method name="getAnnotationName" return="java.lang.String"
4650      abstract="false" native="false" synchronized="false"
4651      static="false" final="false" visibility="public"
4652      deprecated="not deprecated">
4653      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4654    </method>
4655    <method name="getClassName" return="java.lang.String"
4656      abstract="false" native="false" synchronized="false"
4657      static="false" final="false" visibility="public"
4658      deprecated="not deprecated">
4659      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4660    </method>
4661    <method name="getInstanceName" return="java.lang.String"
4662      abstract="false" native="false" synchronized="false"
4663      static="false" final="false" visibility="public"
4664      deprecated="not deprecated">
4665      <param name="instance" type="java.lang.Object"/>
4666    </method>
4667    <method name="getSourceName" return="java.lang.String"
4668      abstract="false" native="false" synchronized="false"
4669      static="false" final="false" visibility="public"
4670      deprecated="not deprecated">
4671      <param name="source" type="java.lang.Object"/>
4672      <doc>
4673      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4674 a {@link StackTraceElement} for when the binding is made to the instance,
4675 or a {@link Method} when a provider method is used.]]>
4676      </doc>
4677    </method>
4678    <method name="getFileString" return="java.lang.String"
4679      abstract="false" native="false" synchronized="false"
4680      static="false" final="false" visibility="protected"
4681      deprecated="not deprecated">
4682      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4683    </method>
4684    <method name="getMethodString" return="java.lang.String"
4685      abstract="false" native="false" synchronized="false"
4686      static="false" final="false" visibility="protected"
4687      deprecated="not deprecated">
4688      <param name="method" type="java.lang.reflect.Method"/>
4689    </method>
4690    <doc>
4691    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4692 {@link Object#toString()}s and strips package names out of them so that
4693 they'll fit on the graph.
4694
4695 @author phopkins@gmail.com (Pete Hopkins)]]>
4696    </doc>
4697  </class>
4698  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4699  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4700  <class name="TransitiveDependencyVisitor" extends="com.google.inject.spi.DefaultBindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;"
4701    abstract="false"
4702    static="false" final="false" visibility="public"
4703    deprecated="not deprecated">
4704    <constructor name="TransitiveDependencyVisitor"
4705      static="false" final="false" visibility="public"
4706      deprecated="not deprecated">
4707    </constructor>
4708    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4709      abstract="false" native="false" synchronized="false"
4710      static="false" final="false" visibility="public"
4711      deprecated="not deprecated">
4712      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4713    </method>
4714    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4715      abstract="false" native="false" synchronized="false"
4716      static="false" final="false" visibility="public"
4717      deprecated="not deprecated">
4718      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4719    </method>
4720    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4721      abstract="false" native="false" synchronized="false"
4722      static="false" final="false" visibility="public"
4723      deprecated="not deprecated">
4724      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4725    </method>
4726    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4727      abstract="false" native="false" synchronized="false"
4728      static="false" final="false" visibility="public"
4729      deprecated="not deprecated">
4730      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4731    </method>
4732    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4733      abstract="false" native="false" synchronized="false"
4734      static="false" final="false" visibility="public"
4735      deprecated="not deprecated">
4736      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4737    </method>
4738    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4739      abstract="false" native="false" synchronized="false"
4740      static="false" final="false" visibility="public"
4741      deprecated="not deprecated">
4742      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4743    </method>
4744    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4745      abstract="false" native="false" synchronized="false"
4746      static="false" final="false" visibility="public"
4747      deprecated="not deprecated">
4748      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4749    </method>
4750    <method name="visitOther" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4751      abstract="false" native="false" synchronized="false"
4752      static="false" final="false" visibility="public"
4753      deprecated="not deprecated">
4754      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
4755      <doc>
4756      <![CDATA[@since 4.0]]>
4757      </doc>
4758    </method>
4759    <doc>
4760    <![CDATA[{@link com.google.inject.spi.BindingTargetVisitor} that returns a
4761 {@link Collection} of the {@link Key}s of each {@link Binding}'s
4762 dependencies. Used by {@link InjectorGrapher} to walk the dependency graph
4763 from a starting set of {@link Binding}s.
4764
4765 @author phopkins@gmail.com (Pete Hopkins)]]>
4766    </doc>
4767  </class>
4768  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4769</package>
4770<package name="com.google.inject.grapher.graphviz">
4771  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4772  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4773    abstract="false"
4774    static="false" final="true" visibility="public"
4775    deprecated="not deprecated">
4776    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4777      abstract="false" native="false" synchronized="false"
4778      static="true" final="false" visibility="public"
4779      deprecated="not deprecated">
4780    </method>
4781    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4782      abstract="false" native="false" synchronized="false"
4783      static="true" final="false" visibility="public"
4784      deprecated="not deprecated">
4785      <param name="name" type="java.lang.String"/>
4786    </method>
4787    <method name="toString" return="java.lang.String"
4788      abstract="false" native="false" synchronized="false"
4789      static="false" final="false" visibility="public"
4790      deprecated="not deprecated">
4791    </method>
4792    <doc>
4793    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4794 concatenation to make double arrows and such.
4795 <p>
4796 See: http://www.graphviz.org/doc/info/arrows.html
4797
4798 @author phopkins@gmail.com (Pete Hopkins)]]>
4799    </doc>
4800  </class>
4801  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4802  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4803  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4804    abstract="false"
4805    static="false" final="true" visibility="public"
4806    deprecated="not deprecated">
4807    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4808      abstract="false" native="false" synchronized="false"
4809      static="true" final="false" visibility="public"
4810      deprecated="not deprecated">
4811    </method>
4812    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4813      abstract="false" native="false" synchronized="false"
4814      static="true" final="false" visibility="public"
4815      deprecated="not deprecated">
4816      <param name="name" type="java.lang.String"/>
4817    </method>
4818    <method name="toString" return="java.lang.String"
4819      abstract="false" native="false" synchronized="false"
4820      static="false" final="false" visibility="public"
4821      deprecated="not deprecated">
4822    </method>
4823    <doc>
4824    <![CDATA[Enum for the "compass point" values used to control where edge
4825 end points appear on the graph.
4826 <p>
4827 See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4828
4829 @author phopkins@gmail.com (Pete Hopkins)]]>
4830    </doc>
4831  </class>
4832  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4833  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4834  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4835    abstract="false"
4836    static="false" final="true" visibility="public"
4837    deprecated="not deprecated">
4838    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4839      abstract="false" native="false" synchronized="false"
4840      static="true" final="false" visibility="public"
4841      deprecated="not deprecated">
4842    </method>
4843    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4844      abstract="false" native="false" synchronized="false"
4845      static="true" final="false" visibility="public"
4846      deprecated="not deprecated">
4847      <param name="name" type="java.lang.String"/>
4848    </method>
4849    <method name="toString" return="java.lang.String"
4850      abstract="false" native="false" synchronized="false"
4851      static="false" final="false" visibility="public"
4852      deprecated="not deprecated">
4853    </method>
4854    <doc>
4855    <![CDATA[Styles for edges.
4856 <p>
4857 See: http://www.graphviz.org/doc/info/attrs.html#k:style
4858
4859 @author phopkins@gmail.com (Pete Hopkins)]]>
4860    </doc>
4861  </class>
4862  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4863  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4864  <class name="GraphvizEdge" extends="java.lang.Object"
4865    abstract="false"
4866    static="false" final="false" visibility="public"
4867    deprecated="not deprecated">
4868    <constructor name="GraphvizEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4869      static="false" final="false" visibility="public"
4870      deprecated="not deprecated">
4871    </constructor>
4872    <method name="getHeadNodeId" return="com.google.inject.grapher.NodeId"
4873      abstract="false" native="false" synchronized="false"
4874      static="false" final="false" visibility="public"
4875      deprecated="not deprecated">
4876      <doc>
4877      <![CDATA[@since 4.0]]>
4878      </doc>
4879    </method>
4880    <method name="getHeadPortId" return="java.lang.String"
4881      abstract="false" native="false" synchronized="false"
4882      static="false" final="false" visibility="public"
4883      deprecated="not deprecated">
4884    </method>
4885    <method name="setHeadPortId"
4886      abstract="false" native="false" synchronized="false"
4887      static="false" final="false" visibility="public"
4888      deprecated="not deprecated">
4889      <param name="headPortId" type="java.lang.String"/>
4890    </method>
4891    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4892      abstract="false" native="false" synchronized="false"
4893      static="false" final="false" visibility="public"
4894      deprecated="not deprecated">
4895    </method>
4896    <method name="setHeadCompassPoint"
4897      abstract="false" native="false" synchronized="false"
4898      static="false" final="false" visibility="public"
4899      deprecated="not deprecated">
4900      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4901    </method>
4902    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4903      abstract="false" native="false" synchronized="false"
4904      static="false" final="false" visibility="public"
4905      deprecated="not deprecated">
4906    </method>
4907    <method name="setArrowHead"
4908      abstract="false" native="false" synchronized="false"
4909      static="false" final="false" visibility="public"
4910      deprecated="not deprecated">
4911      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4912    </method>
4913    <method name="getTailNodeId" return="com.google.inject.grapher.NodeId"
4914      abstract="false" native="false" synchronized="false"
4915      static="false" final="false" visibility="public"
4916      deprecated="not deprecated">
4917      <doc>
4918      <![CDATA[@since 4.0]]>
4919      </doc>
4920    </method>
4921    <method name="getTailPortId" return="java.lang.String"
4922      abstract="false" native="false" synchronized="false"
4923      static="false" final="false" visibility="public"
4924      deprecated="not deprecated">
4925    </method>
4926    <method name="setTailPortId"
4927      abstract="false" native="false" synchronized="false"
4928      static="false" final="false" visibility="public"
4929      deprecated="not deprecated">
4930      <param name="tailPortId" type="java.lang.String"/>
4931    </method>
4932    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4933      abstract="false" native="false" synchronized="false"
4934      static="false" final="false" visibility="public"
4935      deprecated="not deprecated">
4936    </method>
4937    <method name="setTailCompassPoint"
4938      abstract="false" native="false" synchronized="false"
4939      static="false" final="false" visibility="public"
4940      deprecated="not deprecated">
4941      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4942    </method>
4943    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4944      abstract="false" native="false" synchronized="false"
4945      static="false" final="false" visibility="public"
4946      deprecated="not deprecated">
4947    </method>
4948    <method name="setArrowTail"
4949      abstract="false" native="false" synchronized="false"
4950      static="false" final="false" visibility="public"
4951      deprecated="not deprecated">
4952      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4953    </method>
4954    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4955      abstract="false" native="false" synchronized="false"
4956      static="false" final="false" visibility="public"
4957      deprecated="not deprecated">
4958    </method>
4959    <method name="setStyle"
4960      abstract="false" native="false" synchronized="false"
4961      static="false" final="false" visibility="public"
4962      deprecated="not deprecated">
4963      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4964    </method>
4965    <doc>
4966    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4967 interested in drawing.
4968
4969 @author phopkins@gmail.com (Pete Hopkins)]]>
4970    </doc>
4971  </class>
4972  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4973  <!-- start class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4974  <class name="GraphvizGrapher" extends="com.google.inject.grapher.AbstractInjectorGrapher"
4975    abstract="false"
4976    static="false" final="false" visibility="public"
4977    deprecated="not deprecated">
4978    <method name="reset"
4979      abstract="false" native="false" synchronized="false"
4980      static="false" final="false" visibility="protected"
4981      deprecated="not deprecated">
4982    </method>
4983    <method name="setOut"
4984      abstract="false" native="false" synchronized="false"
4985      static="false" final="false" visibility="public"
4986      deprecated="not deprecated">
4987      <param name="out" type="java.io.PrintWriter"/>
4988    </method>
4989    <method name="setRankdir"
4990      abstract="false" native="false" synchronized="false"
4991      static="false" final="false" visibility="public"
4992      deprecated="not deprecated">
4993      <param name="rankdir" type="java.lang.String"/>
4994    </method>
4995    <method name="postProcess"
4996      abstract="false" native="false" synchronized="false"
4997      static="false" final="false" visibility="protected"
4998      deprecated="not deprecated">
4999    </method>
5000    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5001      abstract="false" native="false" synchronized="false"
5002      static="false" final="false" visibility="protected"
5003      deprecated="not deprecated">
5004    </method>
5005    <method name="start"
5006      abstract="false" native="false" synchronized="false"
5007      static="false" final="false" visibility="protected"
5008      deprecated="not deprecated">
5009    </method>
5010    <method name="finish"
5011      abstract="false" native="false" synchronized="false"
5012      static="false" final="false" visibility="protected"
5013      deprecated="not deprecated">
5014    </method>
5015    <method name="renderNode"
5016      abstract="false" native="false" synchronized="false"
5017      static="false" final="false" visibility="protected"
5018      deprecated="not deprecated">
5019      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5020    </method>
5021    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5022      abstract="false" native="false" synchronized="false"
5023      static="false" final="false" visibility="protected"
5024      deprecated="not deprecated">
5025      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5026    </method>
5027    <method name="getNodeLabel" return="java.lang.String"
5028      abstract="false" native="false" synchronized="false"
5029      static="false" final="false" visibility="protected"
5030      deprecated="not deprecated">
5031      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5032      <doc>
5033      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5034 table with a heading at the top and (in the case of
5035 {@link ImplementationNode}s) rows for each of the member fields.]]>
5036      </doc>
5037    </method>
5038    <method name="renderEdge"
5039      abstract="false" native="false" synchronized="false"
5040      static="false" final="false" visibility="protected"
5041      deprecated="not deprecated">
5042      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5043    </method>
5044    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5045      abstract="false" native="false" synchronized="false"
5046      static="false" final="false" visibility="protected"
5047      deprecated="not deprecated">
5048      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5049    </method>
5050    <method name="getArrowString" return="java.lang.String"
5051      abstract="false" native="false" synchronized="false"
5052      static="false" final="false" visibility="protected"
5053      deprecated="not deprecated">
5054      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5055      <doc>
5056      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5057 represents combining them. With Graphviz, that just means concatenating
5058 them.]]>
5059      </doc>
5060    </method>
5061    <method name="getEdgeEndPoint" return="java.lang.String"
5062      abstract="false" native="false" synchronized="false"
5063      static="false" final="false" visibility="protected"
5064      deprecated="not deprecated">
5065      <param name="nodeId" type="java.lang.String"/>
5066      <param name="portId" type="java.lang.String"/>
5067      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5068    </method>
5069    <method name="htmlEscape" return="java.lang.String"
5070      abstract="false" native="false" synchronized="false"
5071      static="false" final="false" visibility="protected"
5072      deprecated="not deprecated">
5073      <param name="str" type="java.lang.String"/>
5074    </method>
5075    <method name="htmlEscape" return="java.util.List&lt;java.lang.String&gt;"
5076      abstract="false" native="false" synchronized="false"
5077      static="false" final="false" visibility="protected"
5078      deprecated="not deprecated">
5079      <param name="elements" type="java.util.List&lt;java.lang.String&gt;"/>
5080    </method>
5081    <method name="newInterfaceNode"
5082      abstract="false" native="false" synchronized="false"
5083      static="false" final="false" visibility="protected"
5084      deprecated="not deprecated">
5085      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
5086    </method>
5087    <method name="newImplementationNode"
5088      abstract="false" native="false" synchronized="false"
5089      static="false" final="false" visibility="protected"
5090      deprecated="not deprecated">
5091      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
5092    </method>
5093    <method name="newInstanceNode"
5094      abstract="false" native="false" synchronized="false"
5095      static="false" final="false" visibility="protected"
5096      deprecated="not deprecated">
5097      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
5098    </method>
5099    <method name="newDependencyEdge"
5100      abstract="false" native="false" synchronized="false"
5101      static="false" final="false" visibility="protected"
5102      deprecated="not deprecated">
5103      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
5104    </method>
5105    <method name="newBindingEdge"
5106      abstract="false" native="false" synchronized="false"
5107      static="false" final="false" visibility="protected"
5108      deprecated="not deprecated">
5109      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
5110    </method>
5111    <doc>
5112    <![CDATA[{@link com.google.inject.grapher.InjectorGrapher} implementation that writes out a Graphviz DOT
5113 file of the graph. Dependencies are bound in {@link GraphvizModule}.
5114 <p>
5115 Specify the {@link PrintWriter} to output to with {@link #setOut(PrintWriter)}.
5116
5117 @author phopkins@gmail.com (Pete Hopkins)
5118 @since 4.0]]>
5119    </doc>
5120  </class>
5121  <!-- end class com.google.inject.grapher.graphviz.GraphvizGrapher -->
5122  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
5123  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
5124    abstract="false"
5125    static="false" final="false" visibility="public"
5126    deprecated="not deprecated">
5127    <constructor name="GraphvizModule"
5128      static="false" final="false" visibility="public"
5129      deprecated="not deprecated">
5130    </constructor>
5131    <method name="configure"
5132      abstract="false" native="false" synchronized="false"
5133      static="false" final="false" visibility="protected"
5134      deprecated="not deprecated">
5135    </method>
5136    <doc>
5137    <![CDATA[Module that provides classes needed by {@link GraphvizGrapher}.
5138
5139 @author phopkins@gmail.com (Pete Hopkins)]]>
5140    </doc>
5141  </class>
5142  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
5143  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
5144  <class name="GraphvizNode" extends="java.lang.Object"
5145    abstract="false"
5146    static="false" final="false" visibility="public"
5147    deprecated="not deprecated">
5148    <constructor name="GraphvizNode" type="com.google.inject.grapher.NodeId"
5149      static="false" final="false" visibility="public"
5150      deprecated="not deprecated">
5151      <doc>
5152      <![CDATA[@since 4.0]]>
5153      </doc>
5154    </constructor>
5155    <method name="getNodeId" return="com.google.inject.grapher.NodeId"
5156      abstract="false" native="false" synchronized="false"
5157      static="false" final="false" visibility="public"
5158      deprecated="not deprecated">
5159      <doc>
5160      <![CDATA[@since 4.0]]>
5161      </doc>
5162    </method>
5163    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
5164      abstract="false" native="false" synchronized="false"
5165      static="false" final="false" visibility="public"
5166      deprecated="not deprecated">
5167    </method>
5168    <method name="setShape"
5169      abstract="false" native="false" synchronized="false"
5170      static="false" final="false" visibility="public"
5171      deprecated="not deprecated">
5172      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
5173    </method>
5174    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
5175      abstract="false" native="false" synchronized="false"
5176      static="false" final="false" visibility="public"
5177      deprecated="not deprecated">
5178    </method>
5179    <method name="setStyle"
5180      abstract="false" native="false" synchronized="false"
5181      static="false" final="false" visibility="public"
5182      deprecated="not deprecated">
5183      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
5184    </method>
5185    <method name="getTitle" return="java.lang.String"
5186      abstract="false" native="false" synchronized="false"
5187      static="false" final="false" visibility="public"
5188      deprecated="not deprecated">
5189    </method>
5190    <method name="setTitle"
5191      abstract="false" native="false" synchronized="false"
5192      static="false" final="false" visibility="public"
5193      deprecated="not deprecated">
5194      <param name="title" type="java.lang.String"/>
5195    </method>
5196    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
5197      abstract="false" native="false" synchronized="false"
5198      static="false" final="false" visibility="public"
5199      deprecated="not deprecated">
5200    </method>
5201    <method name="addSubtitle"
5202      abstract="false" native="false" synchronized="false"
5203      static="false" final="false" visibility="public"
5204      deprecated="not deprecated">
5205      <param name="position" type="int"/>
5206      <param name="subtitle" type="java.lang.String"/>
5207    </method>
5208    <method name="getHeaderTextColor" return="java.lang.String"
5209      abstract="false" native="false" synchronized="false"
5210      static="false" final="false" visibility="public"
5211      deprecated="not deprecated">
5212    </method>
5213    <method name="setHeaderTextColor"
5214      abstract="false" native="false" synchronized="false"
5215      static="false" final="false" visibility="public"
5216      deprecated="not deprecated">
5217      <param name="headerTextColor" type="java.lang.String"/>
5218    </method>
5219    <method name="getHeaderBackgroundColor" return="java.lang.String"
5220      abstract="false" native="false" synchronized="false"
5221      static="false" final="false" visibility="public"
5222      deprecated="not deprecated">
5223    </method>
5224    <method name="setHeaderBackgroundColor"
5225      abstract="false" native="false" synchronized="false"
5226      static="false" final="false" visibility="public"
5227      deprecated="not deprecated">
5228      <param name="headerBackgroundColor" type="java.lang.String"/>
5229    </method>
5230    <method name="addField"
5231      abstract="false" native="false" synchronized="false"
5232      static="false" final="false" visibility="public"
5233      deprecated="not deprecated">
5234      <param name="portId" type="java.lang.String"/>
5235      <param name="title" type="java.lang.String"/>
5236    </method>
5237    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5238      abstract="false" native="false" synchronized="false"
5239      static="false" final="false" visibility="public"
5240      deprecated="not deprecated">
5241    </method>
5242    <method name="getIdentifier" return="java.lang.String"
5243      abstract="false" native="false" synchronized="false"
5244      static="false" final="false" visibility="public"
5245      deprecated="not deprecated">
5246      <doc>
5247      <![CDATA[@since 4.0]]>
5248      </doc>
5249    </method>
5250    <method name="setIdentifier"
5251      abstract="false" native="false" synchronized="false"
5252      static="false" final="false" visibility="public"
5253      deprecated="not deprecated">
5254      <param name="identifier" type="java.lang.String"/>
5255      <doc>
5256      <![CDATA[@since 4.0]]>
5257      </doc>
5258    </method>
5259    <doc>
5260    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
5261 interested in drawing.
5262
5263 @author phopkins@gmail.com (Pete Hopkins)]]>
5264    </doc>
5265  </class>
5266  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
5267  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5268  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5269    abstract="false"
5270    static="false" final="true" visibility="public"
5271    deprecated="not deprecated">
5272    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5273      abstract="false" native="false" synchronized="false"
5274      static="true" final="false" visibility="public"
5275      deprecated="not deprecated">
5276    </method>
5277    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5278      abstract="false" native="false" synchronized="false"
5279      static="true" final="false" visibility="public"
5280      deprecated="not deprecated">
5281      <param name="name" type="java.lang.String"/>
5282    </method>
5283    <method name="toString" return="java.lang.String"
5284      abstract="false" native="false" synchronized="false"
5285      static="false" final="false" visibility="public"
5286      deprecated="not deprecated">
5287    </method>
5288    <doc>
5289    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5290 <p>
5291 See: http://www.graphviz.org/doc/info/shapes.html
5292
5293 @author phopkins@gmail.com (Pete Hopkins)]]>
5294    </doc>
5295  </class>
5296  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5297  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5298  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5299    abstract="false"
5300    static="false" final="true" visibility="public"
5301    deprecated="not deprecated">
5302    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5303      abstract="false" native="false" synchronized="false"
5304      static="true" final="false" visibility="public"
5305      deprecated="not deprecated">
5306    </method>
5307    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5308      abstract="false" native="false" synchronized="false"
5309      static="true" final="false" visibility="public"
5310      deprecated="not deprecated">
5311      <param name="name" type="java.lang.String"/>
5312    </method>
5313    <method name="toString" return="java.lang.String"
5314      abstract="false" native="false" synchronized="false"
5315      static="false" final="false" visibility="public"
5316      deprecated="not deprecated">
5317    </method>
5318    <doc>
5319    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5320 <p>
5321 See: http://www.graphviz.org/doc/info/attrs.html#k:style
5322
5323 @author phopkins@gmail.com (Pete Hopkins)]]>
5324    </doc>
5325  </class>
5326  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5327  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5328  <interface name="PortIdFactory"    abstract="true"
5329    static="false" final="false" visibility="public"
5330    deprecated="not deprecated">
5331    <method name="getPortId" return="java.lang.String"
5332      abstract="true" native="false" synchronized="false"
5333      static="false" final="false" visibility="public"
5334      deprecated="not deprecated">
5335      <param name="member" type="java.lang.reflect.Member"/>
5336    </method>
5337    <doc>
5338    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5339 rows in {@link com.google.inject.grapher.ImplementationNode}-displaying {@link GraphvizNode}s.
5340
5341 @author phopkins@gmail.com (Pete Hopkins)]]>
5342    </doc>
5343  </interface>
5344  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5345  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5346  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5347    abstract="false"
5348    static="false" final="false" visibility="public"
5349    deprecated="not deprecated">
5350    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5351    <constructor name="PortIdFactoryImpl"
5352      static="false" final="false" visibility="public"
5353      deprecated="not deprecated">
5354    </constructor>
5355    <method name="getPortId" return="java.lang.String"
5356      abstract="false" native="false" synchronized="false"
5357      static="false" final="false" visibility="public"
5358      deprecated="not deprecated">
5359      <param name="member" type="java.lang.reflect.Member"/>
5360    </method>
5361    <doc>
5362    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5363
5364 @author phopkins@gmail.com (Pete Hopkins)]]>
5365    </doc>
5366  </class>
5367  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5368</package>
5369<package name="com.google.inject.jndi">
5370  <!-- start class com.google.inject.jndi.JndiIntegration -->
5371  <class name="JndiIntegration" extends="java.lang.Object"
5372    abstract="false"
5373    static="false" final="false" visibility="public"
5374    deprecated="not deprecated">
5375    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5376      abstract="false" native="false" synchronized="false"
5377      static="true" final="false" visibility="public"
5378      deprecated="not deprecated">
5379      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5380      <param name="name" type="java.lang.String"/>
5381      <doc>
5382      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5383 Example usage:
5384
5385 <pre>
5386 bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5387 </pre>]]>
5388      </doc>
5389    </method>
5390    <doc>
5391    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5392 {@link javax.naming.Context}.
5393
5394 @author crazybob@google.com (Bob Lee)]]>
5395    </doc>
5396  </class>
5397  <!-- end class com.google.inject.jndi.JndiIntegration -->
5398</package>
5399<package name="com.google.inject.matcher">
5400  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5401  <class name="AbstractMatcher" extends="java.lang.Object"
5402    abstract="true"
5403    static="false" final="false" visibility="public"
5404    deprecated="not deprecated">
5405    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5406    <constructor name="AbstractMatcher"
5407      static="false" final="false" visibility="public"
5408      deprecated="not deprecated">
5409    </constructor>
5410    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5411      abstract="false" native="false" synchronized="false"
5412      static="false" final="false" visibility="public"
5413      deprecated="not deprecated">
5414      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5415    </method>
5416    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5417      abstract="false" native="false" synchronized="false"
5418      static="false" final="false" visibility="public"
5419      deprecated="not deprecated">
5420      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5421    </method>
5422    <doc>
5423    <![CDATA[Implements {@code and()} and {@code or()}.
5424
5425 @author crazybob@google.com (Bob Lee)]]>
5426    </doc>
5427  </class>
5428  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5429  <!-- start interface com.google.inject.matcher.Matcher -->
5430  <interface name="Matcher"    abstract="true"
5431    static="false" final="false" visibility="public"
5432    deprecated="not deprecated">
5433    <method name="matches" return="boolean"
5434      abstract="true" native="false" synchronized="false"
5435      static="false" final="false" visibility="public"
5436      deprecated="not deprecated">
5437      <param name="t" type="T"/>
5438      <doc>
5439      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5440      </doc>
5441    </method>
5442    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5443      abstract="true" native="false" synchronized="false"
5444      static="false" final="false" visibility="public"
5445      deprecated="not deprecated">
5446      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5447      <doc>
5448      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5449 given matcher return {@code true}.]]>
5450      </doc>
5451    </method>
5452    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5453      abstract="true" native="false" synchronized="false"
5454      static="false" final="false" visibility="public"
5455      deprecated="not deprecated">
5456      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5457      <doc>
5458      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5459 given matcher return {@code true}.]]>
5460      </doc>
5461    </method>
5462    <doc>
5463    <![CDATA[Returns {@code true} or {@code false} for a given input.
5464
5465 @author crazybob@google.com (Bob Lee)]]>
5466    </doc>
5467  </interface>
5468  <!-- end interface com.google.inject.matcher.Matcher -->
5469  <!-- start class com.google.inject.matcher.Matchers -->
5470  <class name="Matchers" extends="java.lang.Object"
5471    abstract="false"
5472    static="false" final="false" visibility="public"
5473    deprecated="not deprecated">
5474    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5475      abstract="false" native="false" synchronized="false"
5476      static="true" final="false" visibility="public"
5477      deprecated="not deprecated">
5478      <doc>
5479      <![CDATA[Returns a matcher which matches any input.]]>
5480      </doc>
5481    </method>
5482    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5483      abstract="false" native="false" synchronized="false"
5484      static="true" final="false" visibility="public"
5485      deprecated="not deprecated">
5486      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5487      <doc>
5488      <![CDATA[Inverts the given matcher.]]>
5489      </doc>
5490    </method>
5491    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5492      abstract="false" native="false" synchronized="false"
5493      static="true" final="false" visibility="public"
5494      deprecated="not deprecated">
5495      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5496      <doc>
5497      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5498 with a given annotation.]]>
5499      </doc>
5500    </method>
5501    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5502      abstract="false" native="false" synchronized="false"
5503      static="true" final="false" visibility="public"
5504      deprecated="not deprecated">
5505      <param name="annotation" type="java.lang.annotation.Annotation"/>
5506      <doc>
5507      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5508 with a given annotation.]]>
5509      </doc>
5510    </method>
5511    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5512      abstract="false" native="false" synchronized="false"
5513      static="true" final="false" visibility="public"
5514      deprecated="not deprecated">
5515      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5516      <doc>
5517      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5518 the given type).]]>
5519      </doc>
5520    </method>
5521    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5522      abstract="false" native="false" synchronized="false"
5523      static="true" final="false" visibility="public"
5524      deprecated="not deprecated">
5525      <param name="value" type="java.lang.Object"/>
5526      <doc>
5527      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5528      </doc>
5529    </method>
5530    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5531      abstract="false" native="false" synchronized="false"
5532      static="true" final="false" visibility="public"
5533      deprecated="not deprecated">
5534      <param name="value" type="java.lang.Object"/>
5535      <doc>
5536      <![CDATA[Returns a matcher which matches only the given object.]]>
5537      </doc>
5538    </method>
5539    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5540      abstract="false" native="false" synchronized="false"
5541      static="true" final="false" visibility="public"
5542      deprecated="not deprecated">
5543      <param name="targetPackage" type="java.lang.Package"/>
5544      <doc>
5545      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5546 classloader, so classes with the same package name may not have the same package at runtime.]]>
5547      </doc>
5548    </method>
5549    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5550      abstract="false" native="false" synchronized="false"
5551      static="true" final="false" visibility="public"
5552      deprecated="not deprecated">
5553      <param name="targetPackageName" type="java.lang.String"/>
5554      <doc>
5555      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5556 {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5557
5558 @since 2.0]]>
5559      </doc>
5560    </method>
5561    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5562      abstract="false" native="false" synchronized="false"
5563      static="true" final="false" visibility="public"
5564      deprecated="not deprecated">
5565      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5566      <doc>
5567      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5568      </doc>
5569    </method>
5570    <doc>
5571    <![CDATA[Matcher implementations. Supports matching classes and methods.
5572
5573 @author crazybob@google.com (Bob Lee)]]>
5574    </doc>
5575  </class>
5576  <!-- end class com.google.inject.matcher.Matchers -->
5577</package>
5578<package name="com.google.inject.multibindings">
5579  <!-- start class com.google.inject.multibindings.ClassMapKey -->
5580  <class name="ClassMapKey"    abstract="true"
5581    static="false" final="false" visibility="public"
5582    deprecated="not deprecated">
5583    <implements name="java.lang.annotation.Annotation"/>
5584    <doc>
5585    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a class map key.
5586
5587 @since 4.0]]>
5588    </doc>
5589  </class>
5590  <!-- end class com.google.inject.multibindings.ClassMapKey -->
5591  <!-- start class com.google.inject.multibindings.MapBinder -->
5592  <class name="MapBinder" extends="java.lang.Object"
5593    abstract="true"
5594    static="false" final="false" visibility="public"
5595    deprecated="not deprecated">
5596    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5597      abstract="false" native="false" synchronized="false"
5598      static="true" final="false" visibility="public"
5599      deprecated="not deprecated">
5600      <param name="binder" type="com.google.inject.Binder"/>
5601      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5602      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5603      <doc>
5604      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5605 {@link Map} that is itself bound with no binding annotation.]]>
5606      </doc>
5607    </method>
5608    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5609      abstract="false" native="false" synchronized="false"
5610      static="true" final="false" visibility="public"
5611      deprecated="not deprecated">
5612      <param name="binder" type="com.google.inject.Binder"/>
5613      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5614      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5615      <doc>
5616      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5617 {@link Map} that is itself bound with no binding annotation.]]>
5618      </doc>
5619    </method>
5620    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5621      abstract="false" native="false" synchronized="false"
5622      static="true" final="false" visibility="public"
5623      deprecated="not deprecated">
5624      <param name="binder" type="com.google.inject.Binder"/>
5625      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5626      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5627      <param name="annotation" type="java.lang.annotation.Annotation"/>
5628      <doc>
5629      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5630 {@link Map} that is itself bound with {@code annotation}.]]>
5631      </doc>
5632    </method>
5633    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5634      abstract="false" native="false" synchronized="false"
5635      static="true" final="false" visibility="public"
5636      deprecated="not deprecated">
5637      <param name="binder" type="com.google.inject.Binder"/>
5638      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5639      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5640      <param name="annotation" type="java.lang.annotation.Annotation"/>
5641      <doc>
5642      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5643 {@link Map} that is itself bound with {@code annotation}.]]>
5644      </doc>
5645    </method>
5646    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5647      abstract="false" native="false" synchronized="false"
5648      static="true" final="false" visibility="public"
5649      deprecated="not deprecated">
5650      <param name="binder" type="com.google.inject.Binder"/>
5651      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5652      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5653      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5654      <doc>
5655      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5656 {@link Map} that is itself bound with {@code annotationType}.]]>
5657      </doc>
5658    </method>
5659    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5660      abstract="false" native="false" synchronized="false"
5661      static="true" final="false" visibility="public"
5662      deprecated="not deprecated">
5663      <param name="binder" type="com.google.inject.Binder"/>
5664      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5665      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5666      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5667      <doc>
5668      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5669 {@link Map} that is itself bound with {@code annotationType}.]]>
5670      </doc>
5671    </method>
5672    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5673      abstract="true" native="false" synchronized="false"
5674      static="false" final="false" visibility="public"
5675      deprecated="not deprecated">
5676      <doc>
5677      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5678 <p>When multiple equal keys are bound, the value that gets included in the map is
5679 arbitrary.
5680 <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5681 maps that are normally bound, a {@code Map<K, Set<V>>} and
5682 {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5683 all values bound to each key.
5684 <p>
5685 When multiple modules contribute elements to the map, this configuration
5686 option impacts all of them.
5687
5688 @return this map binder
5689 @since 3.0]]>
5690      </doc>
5691    </method>
5692    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5693      abstract="true" native="false" synchronized="false"
5694      static="false" final="false" visibility="public"
5695      deprecated="not deprecated">
5696      <param name="key" type="K"/>
5697      <doc>
5698      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5699 key must be distinct (and non-null). Bound providers will be evaluated each
5700 time the map is injected.
5701
5702 <p>It is an error to call this method without also calling one of the
5703 {@code to} methods on the returned binding builder.
5704
5705 <p>Scoping elements independently is supported. Use the {@code in} method
5706 to specify a binding scope.]]>
5707      </doc>
5708    </method>
5709    <doc>
5710    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5711 a complete map. MapBinder is intended for use in your application's module:
5712 <pre><code>
5713 public class SnacksModule extends AbstractModule {
5714   protected void configure() {
5715     MapBinder&lt;String, Snack&gt; mapbinder
5716         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5717     mapbinder.addBinding("twix").toInstance(new Twix());
5718     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5719     mapbinder.addBinding("skittles").to(Skittles.class);
5720   }
5721 }</code></pre>
5722
5723 <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5724 injected:
5725 <pre><code>
5726 class SnackMachine {
5727   {@literal @}Inject
5728   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5729 }</code></pre>
5730
5731 <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5732 {@code Map<K, Provider<V>>} for lazy value provision:
5733 <pre><code>
5734 class SnackMachine {
5735   {@literal @}Inject
5736   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5737 }</code></pre>
5738
5739 <p>Contributing mapbindings from different modules is supported. For example,
5740 it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5741 create their own {@code MapBinder<String, Snack>}, and to each contribute
5742 bindings to the snacks map. When that map is injected, it will contain
5743 entries from both modules.
5744
5745 <p>The map's iteration order is consistent with the binding order. This is
5746 convenient when multiple elements are contributed by the same module because
5747 that module can order its bindings appropriately. Avoid relying on the
5748 iteration order of elements contributed by different modules, since there is
5749 no equivalent mechanism to order modules.
5750
5751 <p>The map is unmodifiable.  Elements can only be added to the map by
5752 configuring the MapBinder.  Elements can never be removed from the map.
5753
5754 <p>Values are resolved at map injection time. If a value is bound to a
5755 provider, that provider's get method will be called each time the map is
5756 injected (unless the binding is also scoped, or a map of providers is injected).
5757
5758 <p>Annotations are used to create different maps of the same key/value
5759 type. Each distinct annotation gets its own independent map.
5760
5761 <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5762 once, map injection will fail. However, use {@link #permitDuplicates()} in
5763 order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5764 {@code Map<K, Set<Provider<V>>} will be added.
5765
5766 <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5767 throw an unchecked exception.
5768
5769 <p><strong>Values must be non-null to use map injection.</strong> If any
5770 value is null, map injection will fail (although injecting a map of providers
5771 will not).
5772
5773 @author dpb@google.com (David P. Baker)]]>
5774    </doc>
5775  </class>
5776  <!-- end class com.google.inject.multibindings.MapBinder -->
5777  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5778  <interface name="MapBinderBinding"    abstract="true"
5779    static="false" final="false" visibility="public"
5780    deprecated="not deprecated">
5781    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5782      abstract="true" native="false" synchronized="false"
5783      static="false" final="false" visibility="public"
5784      deprecated="not deprecated">
5785      <doc>
5786      <![CDATA[Returns the {@link Key} for the map.]]>
5787      </doc>
5788    </method>
5789    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5790      abstract="true" native="false" synchronized="false"
5791      static="false" final="false" visibility="public"
5792      deprecated="not deprecated">
5793      <doc>
5794      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5795 <p>
5796 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5797 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5798 <code>TypeLiteral&lt;String></code>.]]>
5799      </doc>
5800    </method>
5801    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5802      abstract="true" native="false" synchronized="false"
5803      static="false" final="false" visibility="public"
5804      deprecated="not deprecated">
5805      <doc>
5806      <![CDATA[Returns the TypeLiteral describing the values of the map.
5807 <p>
5808 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5809 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5810 <code>TypeLiteral&lt;Snack></code>.]]>
5811      </doc>
5812    </method>
5813    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5814      abstract="true" native="false" synchronized="false"
5815      static="false" final="false" visibility="public"
5816      deprecated="not deprecated">
5817      <doc>
5818      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5819 to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5820 This is only supported on bindings returned from an injector. This will throw
5821 {@link UnsupportedOperationException} if it is called on an element retrieved from
5822 {@link Elements#getElements}.
5823 <p>
5824 The elements will always match the type Map's generic type. For example, if getMapKey returns a
5825 key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5826 <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5827      </doc>
5828    </method>
5829    <method name="permitsDuplicates" return="boolean"
5830      abstract="true" native="false" synchronized="false"
5831      static="false" final="false" visibility="public"
5832      deprecated="not deprecated">
5833      <doc>
5834      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5835 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5836 MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5837      </doc>
5838    </method>
5839    <method name="containsElement" return="boolean"
5840      abstract="true" native="false" synchronized="false"
5841      static="false" final="false" visibility="public"
5842      deprecated="not deprecated">
5843      <param name="element" type="com.google.inject.spi.Element"/>
5844      <doc>
5845      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5846 given Element in order to support building and injecting the map. This will work for
5847 MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5848 only necessary if you are working with elements retrieved from modules (without an Injector),
5849 otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5850 <p>
5851 If you need to introspect the details of the map, such as the keys, values or if it permits
5852 duplicates, it is necessary to pass the elements through an Injector and use
5853 {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5854      </doc>
5855    </method>
5856    <doc>
5857    <![CDATA[A binding for a MapBinder.
5858 <p>
5859 Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5860 &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5861 Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5862 MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5863 bindings can be validated to be derived from this MapBinderBinding using
5864 {@link #containsElement(Element)}.
5865
5866 @param <T> The fully qualified type of the map, including Map. For example:
5867          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5868
5869 @since 3.0
5870 @author sameb@google.com (Sam Berlin)]]>
5871    </doc>
5872  </interface>
5873  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5874  <!-- start class com.google.inject.multibindings.MapKey -->
5875  <class name="MapKey"    abstract="true"
5876    static="false" final="false" visibility="public"
5877    deprecated="not deprecated">
5878    <implements name="java.lang.annotation.Annotation"/>
5879    <doc>
5880    <![CDATA[Allows users define customized key type annotations for map bindings by annotating an annotation
5881 of a {@code Map}'s key type. The custom key annotation can be applied to methods also annotated
5882 with {@literal @}{@link ProvidesIntoMap}.
5883
5884 <p>A {@link StringMapKey} and {@link ClassMapKey} are provided for convenience with maps whose
5885 keys are strings or classes. For maps with enums or primitive types as keys, you must provide
5886 your own MapKey annotation, such as this one for an enum:
5887
5888 <pre>
5889 {@literal @}MapKey(unwrapValue = true)
5890 {@literal @}Retention(RUNTIME)
5891 public {@literal @}interface MyCustomEnumKey {
5892   MyCustomEnum value();
5893 }
5894 </pre>
5895
5896 You can also use the whole annotation as the key, if {@code unwrapValue=false}.
5897 When unwrapValue is false, the annotation type will be the key type for the injected map and
5898 the annotation instances will be the key values. If {@code unwrapValue=true}, the value() type
5899 will be the key type for injected map and the value() instances will be the keys values.
5900
5901 @since 4.0]]>
5902    </doc>
5903  </class>
5904  <!-- end class com.google.inject.multibindings.MapKey -->
5905  <!-- start class com.google.inject.multibindings.Multibinder -->
5906  <class name="Multibinder" extends="java.lang.Object"
5907    abstract="true"
5908    static="false" final="false" visibility="public"
5909    deprecated="not deprecated">
5910    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5911      abstract="false" native="false" synchronized="false"
5912      static="true" final="false" visibility="public"
5913      deprecated="not deprecated">
5914      <param name="binder" type="com.google.inject.Binder"/>
5915      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5916      <doc>
5917      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5918 itself bound with no binding annotation.]]>
5919      </doc>
5920    </method>
5921    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5922      abstract="false" native="false" synchronized="false"
5923      static="true" final="false" visibility="public"
5924      deprecated="not deprecated">
5925      <param name="binder" type="com.google.inject.Binder"/>
5926      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5927      <doc>
5928      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5929 itself bound with no binding annotation.]]>
5930      </doc>
5931    </method>
5932    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5933      abstract="false" native="false" synchronized="false"
5934      static="true" final="false" visibility="public"
5935      deprecated="not deprecated">
5936      <param name="binder" type="com.google.inject.Binder"/>
5937      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5938      <param name="annotation" type="java.lang.annotation.Annotation"/>
5939      <doc>
5940      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5941 itself bound with {@code annotation}.]]>
5942      </doc>
5943    </method>
5944    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5945      abstract="false" native="false" synchronized="false"
5946      static="true" final="false" visibility="public"
5947      deprecated="not deprecated">
5948      <param name="binder" type="com.google.inject.Binder"/>
5949      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5950      <param name="annotation" type="java.lang.annotation.Annotation"/>
5951      <doc>
5952      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5953 itself bound with {@code annotation}.]]>
5954      </doc>
5955    </method>
5956    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5957      abstract="false" native="false" synchronized="false"
5958      static="true" final="false" visibility="public"
5959      deprecated="not deprecated">
5960      <param name="binder" type="com.google.inject.Binder"/>
5961      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5962      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5963      <doc>
5964      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5965 itself bound with {@code annotationType}.]]>
5966      </doc>
5967    </method>
5968    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5969      abstract="false" native="false" synchronized="false"
5970      static="true" final="false" visibility="public"
5971      deprecated="not deprecated">
5972      <param name="binder" type="com.google.inject.Binder"/>
5973      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
5974      <doc>
5975      <![CDATA[Returns a new multibinder that collects instances of the key's type in a {@link Set} that is
5976 itself bound with the annotation (if any) of the key.
5977
5978 @since 4.0]]>
5979      </doc>
5980    </method>
5981    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5982      abstract="false" native="false" synchronized="false"
5983      static="true" final="false" visibility="public"
5984      deprecated="not deprecated">
5985      <param name="binder" type="com.google.inject.Binder"/>
5986      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5987      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5988      <doc>
5989      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5990 itself bound with {@code annotationType}.]]>
5991      </doc>
5992    </method>
5993    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5994      abstract="true" native="false" synchronized="false"
5995      static="false" final="false" visibility="public"
5996      deprecated="not deprecated">
5997      <doc>
5998      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5999 bound, the one that gets included is arbitrary. When multiple modules contribute elements to
6000 the set, this configuration option impacts all of them.
6001
6002 @return this multibinder
6003 @since 3.0]]>
6004      </doc>
6005    </method>
6006    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6007      abstract="true" native="false" synchronized="false"
6008      static="false" final="false" visibility="public"
6009      deprecated="not deprecated">
6010      <doc>
6011      <![CDATA[Returns a binding builder used to add a new element in the set. Each
6012 bound element must have a distinct value. Bound providers will be
6013 evaluated each time the set is injected.
6014
6015 <p>It is an error to call this method without also calling one of the
6016 {@code to} methods on the returned binding builder.
6017
6018 <p>Scoping elements independently is supported. Use the {@code in} method
6019 to specify a binding scope.]]>
6020      </doc>
6021    </method>
6022    <doc>
6023    <![CDATA[An API to bind multiple values separately, only to later inject them as a
6024 complete collection. Multibinder is intended for use in your application's
6025 module:
6026 <pre><code>
6027 public class SnacksModule extends AbstractModule {
6028   protected void configure() {
6029     Multibinder&lt;Snack&gt; multibinder
6030         = Multibinder.newSetBinder(binder(), Snack.class);
6031     multibinder.addBinding().toInstance(new Twix());
6032     multibinder.addBinding().toProvider(SnickersProvider.class);
6033     multibinder.addBinding().to(Skittles.class);
6034   }
6035 }</code></pre>
6036
6037 <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
6038 <pre><code>
6039 class SnackMachine {
6040   {@literal @}Inject
6041   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
6042 }</code></pre>
6043
6044 If desired, {@link Collection}{@code <Provider<Snack>>} can also be injected.
6045
6046 <p>Contributing multibindings from different modules is supported. For
6047 example, it is okay for both {@code CandyModule} and {@code ChipsModule}
6048 to create their own {@code Multibinder<Snack>}, and to each contribute
6049 bindings to the set of snacks. When that set is injected, it will contain
6050 elements from both modules.
6051
6052 <p>The set's iteration order is consistent with the binding order. This is
6053 convenient when multiple elements are contributed by the same module because
6054 that module can order its bindings appropriately. Avoid relying on the
6055 iteration order of elements contributed by different modules, since there is
6056 no equivalent mechanism to order modules.
6057
6058 <p>The set is unmodifiable.  Elements can only be added to the set by
6059 configuring the multibinder.  Elements can never be removed from the set.
6060
6061 <p>Elements are resolved at set injection time. If an element is bound to a
6062 provider, that provider's get method will be called each time the set is
6063 injected (unless the binding is also scoped).
6064
6065 <p>Annotations are be used to create different sets of the same element
6066 type. Each distinct annotation gets its own independent collection of
6067 elements.
6068
6069 <p><strong>Elements must be distinct.</strong> If multiple bound elements
6070 have the same value, set injection will fail.
6071
6072 <p><strong>Elements must be non-null.</strong> If any set element is null,
6073 set injection will fail.
6074
6075 @author jessewilson@google.com (Jesse Wilson)]]>
6076    </doc>
6077  </class>
6078  <!-- end class com.google.inject.multibindings.Multibinder -->
6079  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
6080  <interface name="MultibinderBinding"    abstract="true"
6081    static="false" final="false" visibility="public"
6082    deprecated="not deprecated">
6083    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
6084      abstract="true" native="false" synchronized="false"
6085      static="false" final="false" visibility="public"
6086      deprecated="not deprecated">
6087      <doc>
6088      <![CDATA[Returns the key for the set.]]>
6089      </doc>
6090    </method>
6091    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
6092      abstract="true" native="false" synchronized="false"
6093      static="false" final="false" visibility="public"
6094      deprecated="not deprecated">
6095      <doc>
6096      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6097 <p>
6098 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6099 key of <code>Set&lt;String></code>, then this will always return a
6100 <code>TypeLiteral&lt;String></code>.]]>
6101      </doc>
6102    </method>
6103    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6104      abstract="true" native="false" synchronized="false"
6105      static="false" final="false" visibility="public"
6106      deprecated="not deprecated">
6107      <doc>
6108      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6109 injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6110 retrieved from {@link Elements#getElements}.
6111 <p>
6112 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6113 key of <code>Set&lt;String></code>, then this will always return a list of type
6114 <code>List&lt;Binding&lt;String>></code>.]]>
6115      </doc>
6116    </method>
6117    <method name="permitsDuplicates" return="boolean"
6118      abstract="true" native="false" synchronized="false"
6119      static="false" final="false" visibility="public"
6120      deprecated="not deprecated">
6121      <doc>
6122      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6123 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6124 MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6125      </doc>
6126    </method>
6127    <method name="containsElement" return="boolean"
6128      abstract="true" native="false" synchronized="false"
6129      static="false" final="false" visibility="public"
6130      deprecated="not deprecated">
6131      <param name="element" type="com.google.inject.spi.Element"/>
6132      <doc>
6133      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6134 derive the elements of the set and other bindings that Multibinder uses internally. This will
6135 work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6136 Usually this is only necessary if you are working with elements retrieved from modules (without
6137 an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6138 <p>
6139 If you need to introspect the details of the set, such as the values or if it permits
6140 duplicates, it is necessary to pass the elements through an Injector and use
6141 {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6142      </doc>
6143    </method>
6144    <doc>
6145    <![CDATA[A binding for a Multibinder.
6146
6147 @param <T> The fully qualified type of the set, including Set. For example:
6148          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6149
6150 @since 3.0
6151 @author sameb@google.com (Sam Berlin)]]>
6152    </doc>
6153  </interface>
6154  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6155  <!-- start class com.google.inject.multibindings.MultibindingsScanner -->
6156  <class name="MultibindingsScanner" extends="java.lang.Object"
6157    abstract="false"
6158    static="false" final="false" visibility="public"
6159    deprecated="not deprecated">
6160    <method name="asModule" return="com.google.inject.Module"
6161      abstract="false" native="false" synchronized="false"
6162      static="true" final="false" visibility="public"
6163      deprecated="not deprecated">
6164      <doc>
6165      <![CDATA[Returns a module that, when installed, will scan all modules for methods with the annotations
6166 {@literal @}{@link ProvidesIntoMap}, {@literal @}{@link ProvidesIntoSet}, and
6167 {@literal @}{@link ProvidesIntoOptional}.
6168
6169 <p>This is a convenience method, equivalent to doing
6170 {@code binder().scanModulesForAnnotatedMethods(MultibindingsScanner.scanner())}.]]>
6171      </doc>
6172    </method>
6173    <method name="scanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
6174      abstract="false" native="false" synchronized="false"
6175      static="true" final="false" visibility="public"
6176      deprecated="not deprecated">
6177      <doc>
6178      <![CDATA[Returns a {@link ModuleAnnotatedMethodScanner} that, when bound, will scan all modules for
6179 methods with the annotations {@literal @}{@link ProvidesIntoMap},
6180 {@literal @}{@link ProvidesIntoSet}, and {@literal @}{@link ProvidesIntoOptional}.]]>
6181      </doc>
6182    </method>
6183    <doc>
6184    <![CDATA[Scans a module for annotations that signal multibindings, mapbindings, and optional bindings.
6185
6186 @since 4.0]]>
6187    </doc>
6188  </class>
6189  <!-- end class com.google.inject.multibindings.MultibindingsScanner -->
6190  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6191  <interface name="MultibindingsTargetVisitor"    abstract="true"
6192    static="false" final="false" visibility="public"
6193    deprecated="not deprecated">
6194    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6195    <method name="visit" return="V"
6196      abstract="true" native="false" synchronized="false"
6197      static="false" final="false" visibility="public"
6198      deprecated="not deprecated">
6199      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6200      <doc>
6201      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6202      </doc>
6203    </method>
6204    <method name="visit" return="V"
6205      abstract="true" native="false" synchronized="false"
6206      static="false" final="false" visibility="public"
6207      deprecated="not deprecated">
6208      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6209      <doc>
6210      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6211      </doc>
6212    </method>
6213    <method name="visit" return="V"
6214      abstract="true" native="false" synchronized="false"
6215      static="false" final="false" visibility="public"
6216      deprecated="not deprecated">
6217      <param name="optionalbinding" type="com.google.inject.multibindings.OptionalBinderBinding&lt;? extends T&gt;"/>
6218      <doc>
6219      <![CDATA[Visits a binding created through {@link OptionalBinder}.
6220
6221 @since 4.0]]>
6222      </doc>
6223    </method>
6224    <doc>
6225    <![CDATA[A visitor for the multibinder extension.
6226 <p>
6227 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6228 {@link Multibinder}, {@link MapBinder} or {@link OptionalBinderBinding} will be visited through
6229 this interface.
6230
6231 @since 3.0
6232 @author sameb@google.com (Sam Berlin)]]>
6233    </doc>
6234  </interface>
6235  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6236  <!-- start class com.google.inject.multibindings.OptionalBinder -->
6237  <class name="OptionalBinder" extends="java.lang.Object"
6238    abstract="true"
6239    static="false" final="false" visibility="public"
6240    deprecated="not deprecated">
6241    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6242      abstract="false" native="false" synchronized="false"
6243      static="true" final="false" visibility="public"
6244      deprecated="not deprecated">
6245      <param name="binder" type="com.google.inject.Binder"/>
6246      <param name="type" type="java.lang.Class&lt;T&gt;"/>
6247    </method>
6248    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6249      abstract="false" native="false" synchronized="false"
6250      static="true" final="false" visibility="public"
6251      deprecated="not deprecated">
6252      <param name="binder" type="com.google.inject.Binder"/>
6253      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
6254    </method>
6255    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6256      abstract="false" native="false" synchronized="false"
6257      static="true" final="false" visibility="public"
6258      deprecated="not deprecated">
6259      <param name="binder" type="com.google.inject.Binder"/>
6260      <param name="type" type="com.google.inject.Key&lt;T&gt;"/>
6261    </method>
6262    <method name="setDefault" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6263      abstract="true" native="false" synchronized="false"
6264      static="false" final="false" visibility="public"
6265      deprecated="not deprecated">
6266      <doc>
6267      <![CDATA[Returns a binding builder used to set the default value that will be injected.
6268 The binding set by this method will be ignored if {@link #setBinding} is called.
6269
6270 <p>It is an error to call this method without also calling one of the {@code to}
6271 methods on the returned binding builder.]]>
6272      </doc>
6273    </method>
6274    <method name="setBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6275      abstract="true" native="false" synchronized="false"
6276      static="false" final="false" visibility="public"
6277      deprecated="not deprecated">
6278      <doc>
6279      <![CDATA[Returns a binding builder used to set the actual value that will be injected.
6280 This overrides any binding set by {@link #setDefault}.
6281
6282 <p>It is an error to call this method without also calling one of the {@code to}
6283 methods on the returned binding builder.]]>
6284      </doc>
6285    </method>
6286    <doc>
6287    <![CDATA[An API to bind optional values, optionally with a default value.
6288 OptionalBinder fulfills two roles: <ol>
6289 <li>It allows a framework to define an injection point that may or
6290     may not be bound by users.
6291 <li>It allows a framework to supply a default value that can be changed
6292     by users.
6293 </ol>
6294
6295 <p>When an OptionalBinder is added, it will always supply the bindings:
6296 {@code Optional<T>} and {@code Optional<Provider<T>>}.  If
6297 {@link #setBinding} or {@link #setDefault} are called, it will also
6298 bind {@code T}.
6299
6300 <p>{@code setDefault} is intended for use by frameworks that need a default
6301 value.  User code can call {@code setBinding} to override the default.
6302 <b>Warning: Even if setBinding is called, the default binding
6303 will still exist in the object graph.  If it is a singleton, it will be
6304 instantiated in {@code Stage.PRODUCTION}.</b>
6305
6306 <p>If setDefault or setBinding are linked to Providers, the Provider may return
6307 {@code null}.  If it does, the Optional bindings will be absent.  Binding
6308 setBinding to a Provider that returns null will not cause OptionalBinder
6309 to fall back to the setDefault binding.
6310
6311 <p>If neither setDefault nor setBinding are called, it will try to link to a
6312 user-supplied binding of the same type.  If no binding exists, the optionals
6313 will be absent.  Otherwise, if a user-supplied binding of that type exists,
6314 or if setBinding or setDefault are called, the optionals will return present
6315 if they are bound to a non-null value.
6316
6317 <p>Values are resolved at injection time. If a value is bound to a
6318 provider, that provider's get method will be called each time the optional
6319 is injected (unless the binding is also scoped, or an optional of provider is
6320 injected).
6321
6322 <p>Annotations are used to create different optionals of the same key/value
6323 type. Each distinct annotation gets its own independent binding.
6324
6325 <pre><code>
6326 public class FrameworkModule extends AbstractModule {
6327   protected void configure() {
6328     OptionalBinder.newOptionalBinder(binder(), Renamer.class);
6329   }
6330 }</code></pre>
6331
6332 <p>With this module, an {@link Optional}{@code <Renamer>} can now be
6333 injected.  With no other bindings, the optional will be absent.
6334 Users can specify bindings in one of two ways:
6335
6336 <p>Option 1:
6337 <pre><code>
6338 public class UserRenamerModule extends AbstractModule {
6339   protected void configure() {
6340     bind(Renamer.class).to(ReplacingRenamer.class);
6341   }
6342 }</code></pre>
6343
6344 <p>or Option 2:
6345 <pre><code>
6346 public class UserRenamerModule extends AbstractModule {
6347   protected void configure() {
6348     OptionalBinder.newOptionalBinder(binder(), Renamer.class)
6349         .setBinding().to(ReplacingRenamer.class);
6350   }
6351 }</code></pre>
6352 With both options, the {@code Optional<Renamer>} will be present and supply the
6353 ReplacingRenamer.
6354
6355 <p>Default values can be supplied using:
6356 <pre><code>
6357 public class FrameworkModule extends AbstractModule {
6358   protected void configure() {
6359     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6360         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6361   }
6362 }</code></pre>
6363 With the above module, code can inject an {@code @LookupUrl String} and it
6364 will supply the DEFAULT_LOOKUP_URL.  A user can change this value by binding
6365 <pre><code>
6366 public class UserLookupModule extends AbstractModule {
6367   protected void configure() {
6368     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6369         .setBinding().toInstance(CUSTOM_LOOKUP_URL);
6370   }
6371 }</code></pre>
6372 ... which will override the default value.
6373
6374 <p>If one module uses setDefault the only way to override the default is to use setBinding.
6375 It is an error for a user to specify the binding without using OptionalBinder if
6376 setDefault or setBinding are called.  For example,
6377 <pre><code>
6378 public class FrameworkModule extends AbstractModule {
6379   protected void configure() {
6380     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6381         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6382   }
6383 }
6384 public class UserLookupModule extends AbstractModule {
6385   protected void configure() {
6386     bind(Key.get(String.class, LookupUrl.class)).toInstance(CUSTOM_LOOKUP_URL);
6387   }
6388 }</code></pre>
6389 ... would generate an error, because both the framework and the user are trying to bind
6390 {@code @LookupUrl String}.
6391
6392 @author sameb@google.com (Sam Berlin)
6393 @since 4.0]]>
6394    </doc>
6395  </class>
6396  <!-- end class com.google.inject.multibindings.OptionalBinder -->
6397  <!-- start interface com.google.inject.multibindings.OptionalBinderBinding -->
6398  <interface name="OptionalBinderBinding"    abstract="true"
6399    static="false" final="false" visibility="public"
6400    deprecated="not deprecated">
6401    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
6402      abstract="true" native="false" synchronized="false"
6403      static="false" final="false" visibility="public"
6404      deprecated="not deprecated">
6405      <doc>
6406      <![CDATA[Returns the {@link Key} for this binding.]]>
6407      </doc>
6408    </method>
6409    <method name="getDefaultBinding" return="com.google.inject.Binding&lt;?&gt;"
6410      abstract="true" native="false" synchronized="false"
6411      static="false" final="false" visibility="public"
6412      deprecated="not deprecated">
6413      <doc>
6414      <![CDATA[Returns the default binding (set by {@link OptionalBinder#setDefault}) if one exists or null
6415 if no default binding is set. This will throw {@link UnsupportedOperationException} if it is
6416 called on an element retrieved from {@link Elements#getElements}.
6417 <p>
6418 The Binding's type will always match the type Optional's generic type. For example, if getKey
6419 returns a key of <code>Optional&lt;String></code>, then this will always return a
6420 <code>Binding&lt;String></code>.]]>
6421      </doc>
6422    </method>
6423    <method name="getActualBinding" return="com.google.inject.Binding&lt;?&gt;"
6424      abstract="true" native="false" synchronized="false"
6425      static="false" final="false" visibility="public"
6426      deprecated="not deprecated">
6427      <doc>
6428      <![CDATA[Returns the actual binding (set by {@link OptionalBinder#setBinding}) or null if not set.
6429 This will throw {@link UnsupportedOperationException} if it is called on an element retrieved
6430 from {@link Elements#getElements}.
6431 <p>
6432 The Binding's type will always match the type Optional's generic type. For example, if getKey
6433 returns a key of <code>Optional&lt;String></code>, then this will always return a
6434 <code>Binding&lt;String></code>.]]>
6435      </doc>
6436    </method>
6437    <method name="containsElement" return="boolean"
6438      abstract="true" native="false" synchronized="false"
6439      static="false" final="false" visibility="public"
6440      deprecated="not deprecated">
6441      <param name="element" type="com.google.inject.spi.Element"/>
6442      <doc>
6443      <![CDATA[Returns true if this OptionalBinder contains the given Element in order to build the optional
6444 binding or uses the given Element in order to support building and injecting its data. This
6445 will work for OptionalBinderBinding retrieved from an injector and
6446 {@link Elements#getElements}. Usually this is only necessary if you are working with elements
6447 retrieved from modules (without an Injector), otherwise {@link #getDefaultBinding} and
6448 {@link #getActualBinding} are better options.]]>
6449      </doc>
6450    </method>
6451    <doc>
6452    <![CDATA[A binding for a OptionalBinder.
6453
6454 <p>Although OptionalBinders may be injected through a variety of types
6455 {@code T}, {@code Optional<T>}, {@code Optional<Provider<T>>}, etc..), an
6456 OptionalBinderBinding exists only on the Binding associated with the
6457 {@code Optional<T>} key.  Other bindings can be validated to be derived from this
6458 OptionalBinderBinding using {@link #containsElement}.
6459
6460 @param <T> The fully qualified type of the optional binding, including Optional.
6461        For example: {@code Optional<String>}.
6462
6463 @since 4.0
6464 @author sameb@google.com (Sam Berlin)]]>
6465    </doc>
6466  </interface>
6467  <!-- end interface com.google.inject.multibindings.OptionalBinderBinding -->
6468  <!-- start class com.google.inject.multibindings.ProvidesIntoMap -->
6469  <class name="ProvidesIntoMap"    abstract="true"
6470    static="false" final="false" visibility="public"
6471    deprecated="not deprecated">
6472    <implements name="java.lang.annotation.Annotation"/>
6473    <doc>
6474    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link MapBinder}.
6475 The method's return type, binding annotation and additional key annotation determines
6476 what Map this will contribute to. For example,
6477
6478 <pre>
6479 {@literal @}ProvidesIntoMap
6480 {@literal @}StringMapKey("Foo")
6481 {@literal @}Named("plugins")
6482 Plugin provideFooUrl(FooManager fm) { returm fm.getPlugin(); }
6483
6484 {@literal @}ProvidesIntoMap
6485 {@literal @}StringMapKey("Bar")
6486 {@literal @}Named("urls")
6487 Plugin provideBarUrl(BarManager bm) { return bm.getPlugin(); }
6488 </pre>
6489
6490 will add two items to the {@code @Named("urls") Map<String, Plugin>} map. The key 'Foo'
6491 will map to the provideFooUrl method, and the key 'Bar' will map to the provideBarUrl method.
6492 The values are bound as providers and will be evaluated at injection time.
6493
6494 <p>Because the key is specified as an annotation, only Strings, Classes, enums, primitive
6495 types and annotation instances are supported as keys.
6496
6497 @author sameb@google.com (Sam Berlin)
6498 @since 4.0]]>
6499    </doc>
6500  </class>
6501  <!-- end class com.google.inject.multibindings.ProvidesIntoMap -->
6502  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional -->
6503  <class name="ProvidesIntoOptional"    abstract="true"
6504    static="false" final="false" visibility="public"
6505    deprecated="not deprecated">
6506    <implements name="java.lang.annotation.Annotation"/>
6507    <doc>
6508    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6509 The method's return type and binding annotation determines what Optional this will
6510 contribute to. For example,
6511
6512 <pre>
6513 {@literal @}ProvidesIntoOptional(DEFAULT)
6514 {@literal @}Named("url")
6515 String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6516
6517 {@literal @}ProvidesIntoOptional(ACTUAL)
6518 {@literal @}Named("url")
6519 String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6520 </pre>
6521
6522 will set the default value of {@code @Named("url") Optional<String>} to foo's URL,
6523 and then override it to bar's URL.
6524
6525 @author sameb@google.com (Sam Berlin)
6526 @since 4.0]]>
6527    </doc>
6528  </class>
6529  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional -->
6530  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6531  <class name="ProvidesIntoOptional.Type" extends="java.lang.Enum&lt;com.google.inject.multibindings.ProvidesIntoOptional.Type&gt;"
6532    abstract="false"
6533    static="true" final="true" visibility="public"
6534    deprecated="not deprecated">
6535    <method name="values" return="com.google.inject.multibindings.ProvidesIntoOptional.Type[]"
6536      abstract="false" native="false" synchronized="false"
6537      static="true" final="false" visibility="public"
6538      deprecated="not deprecated">
6539    </method>
6540    <method name="valueOf" return="com.google.inject.multibindings.ProvidesIntoOptional.Type"
6541      abstract="false" native="false" synchronized="false"
6542      static="true" final="false" visibility="public"
6543      deprecated="not deprecated">
6544      <param name="name" type="java.lang.String"/>
6545    </method>
6546    <doc>
6547    <![CDATA[@since 4.0]]>
6548    </doc>
6549  </class>
6550  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6551  <!-- start class com.google.inject.multibindings.ProvidesIntoSet -->
6552  <class name="ProvidesIntoSet"    abstract="true"
6553    static="false" final="false" visibility="public"
6554    deprecated="not deprecated">
6555    <implements name="java.lang.annotation.Annotation"/>
6556    <doc>
6557    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6558 The method's return type and binding annotation determines what Set this will
6559 contribute to. For example,
6560
6561 <pre>
6562 {@literal @}ProvidesIntoSet
6563 {@literal @}Named("urls")
6564 String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6565
6566 {@literal @}ProvidesIntoSet
6567 {@literal @}Named("urls")
6568 String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6569 </pre>
6570
6571 will add two items to the {@code @Named("urls") Set<String>} set. The items are bound as
6572 providers and will be evaluated at injection time.
6573
6574 @author sameb@google.com (Sam Berlin)
6575 @since 4.0]]>
6576    </doc>
6577  </class>
6578  <!-- end class com.google.inject.multibindings.ProvidesIntoSet -->
6579  <!-- start class com.google.inject.multibindings.StringMapKey -->
6580  <class name="StringMapKey"    abstract="true"
6581    static="false" final="false" visibility="public"
6582    deprecated="not deprecated">
6583    <implements name="java.lang.annotation.Annotation"/>
6584    <doc>
6585    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a string map key.
6586
6587 @since 4.0]]>
6588    </doc>
6589  </class>
6590  <!-- end class com.google.inject.multibindings.StringMapKey -->
6591</package>
6592<package name="com.google.inject.name">
6593  <!-- start class com.google.inject.name.Named -->
6594  <class name="Named"    abstract="true"
6595    static="false" final="false" visibility="public"
6596    deprecated="not deprecated">
6597    <implements name="java.lang.annotation.Annotation"/>
6598    <doc>
6599    <![CDATA[Annotates named things.
6600
6601 @author crazybob@google.com (Bob Lee)]]>
6602    </doc>
6603  </class>
6604  <!-- end class com.google.inject.name.Named -->
6605  <!-- start class com.google.inject.name.Names -->
6606  <class name="Names" extends="java.lang.Object"
6607    abstract="false"
6608    static="false" final="false" visibility="public"
6609    deprecated="not deprecated">
6610    <method name="named" return="com.google.inject.name.Named"
6611      abstract="false" native="false" synchronized="false"
6612      static="true" final="false" visibility="public"
6613      deprecated="not deprecated">
6614      <param name="name" type="java.lang.String"/>
6615      <doc>
6616      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6617      </doc>
6618    </method>
6619    <method name="bindProperties"
6620      abstract="false" native="false" synchronized="false"
6621      static="true" final="false" visibility="public"
6622      deprecated="not deprecated">
6623      <param name="binder" type="com.google.inject.Binder"/>
6624      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6625      <doc>
6626      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6627 {@code properties}.]]>
6628      </doc>
6629    </method>
6630    <method name="bindProperties"
6631      abstract="false" native="false" synchronized="false"
6632      static="true" final="false" visibility="public"
6633      deprecated="not deprecated">
6634      <param name="binder" type="com.google.inject.Binder"/>
6635      <param name="properties" type="java.util.Properties"/>
6636      <doc>
6637      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6638 method binds all properties including those inherited from
6639 {@link Properties#defaults defaults}.]]>
6640      </doc>
6641    </method>
6642    <doc>
6643    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6644
6645 @author crazybob@google.com (Bob Lee)]]>
6646    </doc>
6647  </class>
6648  <!-- end class com.google.inject.name.Names -->
6649</package>
6650<package name="com.google.inject.persist">
6651  <!-- start class com.google.inject.persist.PersistFilter -->
6652  <class name="PersistFilter" extends="java.lang.Object"
6653    abstract="false"
6654    static="false" final="true" visibility="public"
6655    deprecated="not deprecated">
6656    <implements name="javax.servlet.Filter"/>
6657    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6658      static="false" final="false" visibility="public"
6659      deprecated="not deprecated">
6660    </constructor>
6661    <method name="init"
6662      abstract="false" native="false" synchronized="false"
6663      static="false" final="false" visibility="public"
6664      deprecated="not deprecated">
6665      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
6666      <exception name="ServletException" type="javax.servlet.ServletException"/>
6667    </method>
6668    <method name="destroy"
6669      abstract="false" native="false" synchronized="false"
6670      static="false" final="false" visibility="public"
6671      deprecated="not deprecated">
6672    </method>
6673    <method name="doFilter"
6674      abstract="false" native="false" synchronized="false"
6675      static="false" final="false" visibility="public"
6676      deprecated="not deprecated">
6677      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
6678      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
6679      <param name="filterChain" type="javax.servlet.FilterChain"/>
6680      <exception name="IOException" type="java.io.IOException"/>
6681      <exception name="ServletException" type="javax.servlet.ServletException"/>
6682    </method>
6683    <doc>
6684    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6685 guice-persist manage the lifecycle of active units of work.
6686 The filter automatically starts and stops the relevant {@link PersistService}
6687 upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6688 {@link javax.servlet.Filter#destroy()} respectively.
6689
6690 <p> To be able to use the open session-in-view pattern (i.e. work per request),
6691 register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6692 important that you register this filter before any other filter.
6693
6694 For multiple providers, you should register this filter once per provider, inside
6695 a private module for each persist module installed (this must be the same private
6696 module where the specific persist module is itself installed).
6697
6698 <p>
6699 Example configuration:
6700 <pre>{@code
6701  public class MyModule extends ServletModule {
6702    public void configureServlets() {
6703      filter("/*").through(PersistFilter.class);
6704
6705      serve("/index.html").with(MyHtmlServlet.class);
6706      // Etc.
6707    }
6708  }
6709 }</pre>
6710 <p>
6711 This filter is thread safe and allows you to create injectors concurrently
6712 and deploy multiple guice-persist modules within the same injector, or even
6713 multiple injectors with persist modules withing the same JVM or web app.
6714 <p>
6715 This filter requires the Guice Servlet extension.
6716
6717 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6718    </doc>
6719  </class>
6720  <!-- end class com.google.inject.persist.PersistFilter -->
6721  <!-- start class com.google.inject.persist.PersistModule -->
6722  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6723    abstract="true"
6724    static="false" final="false" visibility="public"
6725    deprecated="not deprecated">
6726    <constructor name="PersistModule"
6727      static="false" final="false" visibility="public"
6728      deprecated="not deprecated">
6729    </constructor>
6730    <method name="configure"
6731      abstract="false" native="false" synchronized="false"
6732      static="false" final="true" visibility="protected"
6733      deprecated="not deprecated">
6734    </method>
6735    <method name="configurePersistence"
6736      abstract="true" native="false" synchronized="false"
6737      static="false" final="false" visibility="protected"
6738      deprecated="not deprecated">
6739    </method>
6740    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6741      abstract="true" native="false" synchronized="false"
6742      static="false" final="false" visibility="protected"
6743      deprecated="not deprecated">
6744    </method>
6745    <doc>
6746    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6747 providers.
6748
6749 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6750    </doc>
6751  </class>
6752  <!-- end class com.google.inject.persist.PersistModule -->
6753  <!-- start interface com.google.inject.persist.PersistService -->
6754  <interface name="PersistService"    abstract="true"
6755    static="false" final="false" visibility="public"
6756    deprecated="not deprecated">
6757    <method name="start"
6758      abstract="true" native="false" synchronized="false"
6759      static="false" final="false" visibility="public"
6760      deprecated="not deprecated">
6761      <doc>
6762      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6763 use. For instance, with JPA, it creates an EntityManagerFactory and may
6764 open connection pools. This method must be called by your code prior to
6765 using any guice-persist or JPA artifacts. If already started,
6766 calling this method does nothing, if already stopped, it also does
6767 nothing.]]>
6768      </doc>
6769    </method>
6770    <method name="stop"
6771      abstract="true" native="false" synchronized="false"
6772      static="false" final="false" visibility="public"
6773      deprecated="not deprecated">
6774      <doc>
6775      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6776 closes the {@code EntityManagerFactory}. If already stopped, calling this
6777 method does nothing. If not yet started, it also does nothing.]]>
6778      </doc>
6779    </method>
6780    <doc>
6781    <![CDATA[Persistence provider service. Use this to manage the overall
6782 startup and stop of the persistence module(s).
6783
6784 TODO(dhanji): Integrate with Service API when appropriate.
6785
6786 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6787    </doc>
6788  </interface>
6789  <!-- end interface com.google.inject.persist.PersistService -->
6790  <!-- start class com.google.inject.persist.Transactional -->
6791  <class name="Transactional"    abstract="true"
6792    static="false" final="false" visibility="public"
6793    deprecated="not deprecated">
6794    <implements name="java.lang.annotation.Annotation"/>
6795    <doc>
6796    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6797 Consult the documentation on https://github.com/google/guice/wiki/GuicePersist for detailed
6798 semantics.
6799 Marking a method {@code @Transactional} will start a new transaction before the method
6800 executes and commit it after the method returns.
6801 <p>
6802 If the method throws an exception, the transaction will be rolled back <em>unless</em>
6803 you have specifically requested not to in the {@link #ignore()} clause.
6804 <p>
6805 Similarly, the set of exceptions that will trigger a rollback can be defined in
6806 the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6807 rollback.
6808
6809 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6810    </doc>
6811  </class>
6812  <!-- end class com.google.inject.persist.Transactional -->
6813  <!-- start interface com.google.inject.persist.UnitOfWork -->
6814  <interface name="UnitOfWork"    abstract="true"
6815    static="false" final="false" visibility="public"
6816    deprecated="not deprecated">
6817    <method name="begin"
6818      abstract="true" native="false" synchronized="false"
6819      static="false" final="false" visibility="public"
6820      deprecated="not deprecated">
6821      <doc>
6822      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6823 is already one open, the invocation will do nothing. In this way, you can define arbitrary
6824 units-of-work that nest within one another safely.
6825
6826 Transaction semantics are not affected.]]>
6827      </doc>
6828    </method>
6829    <method name="end"
6830      abstract="true" native="false" synchronized="false"
6831      static="false" final="false" visibility="public"
6832      deprecated="not deprecated">
6833      <doc>
6834      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6835 layer to close. If there is no Unit of work open, then the call returns silently. You can
6836 safely invoke end() repeatedly.
6837 <p>
6838 Transaction semantics are not affected.]]>
6839      </doc>
6840    </method>
6841    <doc>
6842    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6843 work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6844 of work is required. Starting and ending a unit of work directly corresponds to opening and
6845 closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6846 <p> The
6847 Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6848 end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6849 behind thread-locality of Unit of Work semantics).
6850
6851 <ul>
6852   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6853   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6854   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6855       background or bootstrap thread) is probably a good use case.</li>
6856  </ul>
6857
6858 @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6859    </doc>
6860  </interface>
6861  <!-- end interface com.google.inject.persist.UnitOfWork -->
6862</package>
6863<package name="com.google.inject.persist.finder">
6864  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6865  <class name="DynamicFinder" extends="java.lang.Object"
6866    abstract="false"
6867    static="false" final="true" visibility="public"
6868    deprecated="not deprecated">
6869    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6870      static="false" final="false" visibility="public"
6871      deprecated="not deprecated">
6872    </constructor>
6873    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6874      abstract="false" native="false" synchronized="false"
6875      static="true" final="false" visibility="public"
6876      deprecated="not deprecated">
6877      <param name="method" type="java.lang.reflect.Method"/>
6878      <doc>
6879      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6880
6881 @param method a method you want to test as a dynamic finder]]>
6882      </doc>
6883    </method>
6884    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6885      abstract="false" native="false" synchronized="false"
6886      static="false" final="false" visibility="public"
6887      deprecated="not deprecated">
6888    </method>
6889    <doc>
6890    <![CDATA[Utility that helps you introspect dynamic finder methods.
6891
6892 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6893    </doc>
6894  </class>
6895  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6896  <!-- start class com.google.inject.persist.finder.Finder -->
6897  <class name="Finder"    abstract="true"
6898    static="false" final="false" visibility="public"
6899    deprecated="not deprecated">
6900    <implements name="java.lang.annotation.Annotation"/>
6901    <doc>
6902    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6903 specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6904
6905 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6906    </doc>
6907  </class>
6908  <!-- end class com.google.inject.persist.finder.Finder -->
6909  <!-- start class com.google.inject.persist.finder.FirstResult -->
6910  <class name="FirstResult"    abstract="true"
6911    static="false" final="false" visibility="public"
6912    deprecated="not deprecated">
6913    <implements name="java.lang.annotation.Annotation"/>
6914    <doc>
6915    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6916 the index of the first result in the result set you are interested in.
6917 Useful for paging result sets. Complemented by {@link MaxResults}.
6918
6919 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6920    </doc>
6921  </class>
6922  <!-- end class com.google.inject.persist.finder.FirstResult -->
6923  <!-- start class com.google.inject.persist.finder.MaxResults -->
6924  <class name="MaxResults"    abstract="true"
6925    static="false" final="false" visibility="public"
6926    deprecated="not deprecated">
6927    <implements name="java.lang.annotation.Annotation"/>
6928    <doc>
6929    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6930 the maximum size of returned result window. Usefule for paging result sets.
6931 Complement of {@link FirstResult}.
6932
6933 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6934    </doc>
6935  </class>
6936  <!-- end class com.google.inject.persist.finder.MaxResults -->
6937</package>
6938<package name="com.google.inject.persist.jpa">
6939  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6940  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6941    abstract="false"
6942    static="false" final="true" visibility="public"
6943    deprecated="not deprecated">
6944    <constructor name="JpaPersistModule" type="java.lang.String"
6945      static="false" final="false" visibility="public"
6946      deprecated="not deprecated">
6947    </constructor>
6948    <method name="configurePersistence"
6949      abstract="false" native="false" synchronized="false"
6950      static="false" final="false" visibility="protected"
6951      deprecated="not deprecated">
6952    </method>
6953    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6954      abstract="false" native="false" synchronized="false"
6955      static="false" final="false" visibility="protected"
6956      deprecated="not deprecated">
6957    </method>
6958    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6959      abstract="false" native="false" synchronized="false"
6960      static="false" final="false" visibility="public"
6961      deprecated="not deprecated">
6962      <param name="properties" type="java.util.Map&lt;?, ?&gt;"/>
6963      <doc>
6964      <![CDATA[Configures the JPA persistence provider with a set of properties.
6965
6966 @param properties A set of name value pairs that configure a JPA persistence
6967     provider as per the specification.
6968 @since 4.0 (since 3.0 with a parameter type of {@code java.util.Properties})]]>
6969      </doc>
6970    </method>
6971    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6972      abstract="false" native="false" synchronized="false"
6973      static="false" final="false" visibility="public"
6974      deprecated="not deprecated">
6975      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6976      <doc>
6977      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6978
6979 @param iface Any interface type whose methods are all dynamic finders.]]>
6980      </doc>
6981    </method>
6982    <doc>
6983    <![CDATA[JPA provider for guice persist.
6984
6985 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6986    </doc>
6987  </class>
6988  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6989</package>
6990<package name="com.google.inject.servlet">
6991  <!-- start class com.google.inject.servlet.GuiceFilter -->
6992  <class name="GuiceFilter" extends="java.lang.Object"
6993    abstract="false"
6994    static="false" final="false" visibility="public"
6995    deprecated="not deprecated">
6996    <implements name="javax.servlet.Filter"/>
6997    <constructor name="GuiceFilter"
6998      static="false" final="false" visibility="public"
6999      deprecated="not deprecated">
7000    </constructor>
7001    <method name="doFilter"
7002      abstract="false" native="false" synchronized="false"
7003      static="false" final="false" visibility="public"
7004      deprecated="not deprecated">
7005      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
7006      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
7007      <param name="filterChain" type="javax.servlet.FilterChain"/>
7008      <exception name="IOException" type="java.io.IOException"/>
7009      <exception name="ServletException" type="javax.servlet.ServletException"/>
7010    </method>
7011    <method name="init"
7012      abstract="false" native="false" synchronized="false"
7013      static="false" final="false" visibility="public"
7014      deprecated="not deprecated">
7015      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
7016      <exception name="ServletException" type="javax.servlet.ServletException"/>
7017    </method>
7018    <method name="destroy"
7019      abstract="false" native="false" synchronized="false"
7020      static="false" final="false" visibility="public"
7021      deprecated="not deprecated">
7022    </method>
7023    <doc>
7024    <![CDATA[<p>
7025 Apply this filter in web.xml above all other filters (typically), to all requests where you plan
7026  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
7027  and servlets:
7028  <pre>
7029  &lt;filter&gt;
7030    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7031    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
7032  &lt;/filter&gt;
7033
7034  &lt;filter-mapping&gt;
7035    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7036    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
7037  &lt;/filter-mapping&gt;
7038  </pre>
7039
7040 This filter must appear before every filter that makes use of Guice injection or servlet
7041 scopes functionality. Typically, you will only register this filter in web.xml and register
7042 any other filters (and servlets) using a {@link ServletModule}.
7043
7044 @author crazybob@google.com (Bob Lee)
7045 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
7046    </doc>
7047  </class>
7048  <!-- end class com.google.inject.servlet.GuiceFilter -->
7049  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
7050  <class name="GuiceServletContextListener" extends="java.lang.Object"
7051    abstract="true"
7052    static="false" final="false" visibility="public"
7053    deprecated="not deprecated">
7054    <implements name="javax.servlet.ServletContextListener"/>
7055    <constructor name="GuiceServletContextListener"
7056      static="false" final="false" visibility="public"
7057      deprecated="not deprecated">
7058    </constructor>
7059    <method name="contextInitialized"
7060      abstract="false" native="false" synchronized="false"
7061      static="false" final="false" visibility="public"
7062      deprecated="not deprecated">
7063      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7064    </method>
7065    <method name="contextDestroyed"
7066      abstract="false" native="false" synchronized="false"
7067      static="false" final="false" visibility="public"
7068      deprecated="not deprecated">
7069      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7070    </method>
7071    <method name="getInjector" return="com.google.inject.Injector"
7072      abstract="true" native="false" synchronized="false"
7073      static="false" final="false" visibility="protected"
7074      deprecated="not deprecated">
7075      <doc>
7076      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
7077 injector.]]>
7078      </doc>
7079    </method>
7080    <doc>
7081    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
7082 class as a logical place to create and configure your injector. This will ensure the injector
7083 is created when the web application is deployed.
7084
7085 @author Kevin Bourrillion (kevinb@google.com)
7086 @since 2.0]]>
7087    </doc>
7088  </class>
7089  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
7090  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
7091  <interface name="InstanceFilterBinding"    abstract="true"
7092    static="false" final="false" visibility="public"
7093    deprecated="not deprecated">
7094    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7095    <method name="getFilterInstance" return="javax.servlet.Filter"
7096      abstract="true" native="false" synchronized="false"
7097      static="false" final="false" visibility="public"
7098      deprecated="not deprecated">
7099      <doc>
7100      <![CDATA[Returns the filter instance that will be used.]]>
7101      </doc>
7102    </method>
7103    <doc>
7104    <![CDATA[A binding to a single instance of a filter.
7105
7106 @author sameb@google.com
7107 @since 3.0]]>
7108    </doc>
7109  </interface>
7110  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
7111  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
7112  <interface name="InstanceServletBinding"    abstract="true"
7113    static="false" final="false" visibility="public"
7114    deprecated="not deprecated">
7115    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7116    <method name="getServletInstance" return="javax.servlet.http.HttpServlet"
7117      abstract="true" native="false" synchronized="false"
7118      static="false" final="false" visibility="public"
7119      deprecated="not deprecated">
7120      <doc>
7121      <![CDATA[Returns the servlet instance that will be used.]]>
7122      </doc>
7123    </method>
7124    <doc>
7125    <![CDATA[A binding to a single instance of a servlet.
7126
7127 @author sameb@google.com
7128 @since 3.0]]>
7129    </doc>
7130  </interface>
7131  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
7132  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
7133  <interface name="LinkedFilterBinding"    abstract="true"
7134    static="false" final="false" visibility="public"
7135    deprecated="not deprecated">
7136    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7137    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"
7138      abstract="true" native="false" synchronized="false"
7139      static="false" final="false" visibility="public"
7140      deprecated="not deprecated">
7141      <doc>
7142      <![CDATA[Returns the key used to lookup the filter instance.]]>
7143      </doc>
7144    </method>
7145    <doc>
7146    <![CDATA[A linked binding to a filter.
7147
7148 @author sameb@google.com
7149 @since 3.0]]>
7150    </doc>
7151  </interface>
7152  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
7153  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
7154  <interface name="LinkedServletBinding"    abstract="true"
7155    static="false" final="false" visibility="public"
7156    deprecated="not deprecated">
7157    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7158    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"
7159      abstract="true" native="false" synchronized="false"
7160      static="false" final="false" visibility="public"
7161      deprecated="not deprecated">
7162      <doc>
7163      <![CDATA[Returns the key used to lookup the servlet instance.]]>
7164      </doc>
7165    </method>
7166    <doc>
7167    <![CDATA[A linked binding to a servlet.
7168
7169 @author sameb@google.com
7170 @since 3.0]]>
7171    </doc>
7172  </interface>
7173  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
7174  <!-- start class com.google.inject.servlet.RequestParameters -->
7175  <class name="RequestParameters"    abstract="true"
7176    static="false" final="false" visibility="public"
7177    deprecated="not deprecated">
7178    <implements name="java.lang.annotation.Annotation"/>
7179    <doc>
7180    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
7181 when you want the HTTP request parameter map to be injected.
7182
7183 @author crazybob@google.com (Bob Lee)]]>
7184    </doc>
7185  </class>
7186  <!-- end class com.google.inject.servlet.RequestParameters -->
7187  <!-- start class com.google.inject.servlet.RequestScoped -->
7188  <class name="RequestScoped"    abstract="true"
7189    static="false" final="false" visibility="public"
7190    deprecated="not deprecated">
7191    <implements name="java.lang.annotation.Annotation"/>
7192    <doc>
7193    <![CDATA[Apply this to implementation classes when you want one instance per request.
7194
7195 @author crazybob@google.com (Bob Lee)]]>
7196    </doc>
7197  </class>
7198  <!-- end class com.google.inject.servlet.RequestScoped -->
7199  <!-- start class com.google.inject.servlet.ScopingException -->
7200  <class name="ScopingException" extends="java.lang.IllegalStateException"
7201    abstract="false"
7202    static="false" final="true" visibility="public"
7203    deprecated="not deprecated">
7204    <constructor name="ScopingException" type="java.lang.String"
7205      static="false" final="false" visibility="public"
7206      deprecated="not deprecated">
7207    </constructor>
7208    <doc>
7209    <![CDATA[Exception thrown when there was a failure entering request scope.
7210
7211 @author Chris Nokleberg
7212 @since 4.0]]>
7213    </doc>
7214  </class>
7215  <!-- end class com.google.inject.servlet.ScopingException -->
7216  <!-- start class com.google.inject.servlet.ScopingOnly -->
7217  <class name="ScopingOnly"    abstract="true"
7218    static="false" final="false" visibility="public"
7219    deprecated="not deprecated">
7220    <implements name="java.lang.annotation.Annotation"/>
7221    <doc>
7222    <![CDATA[Annotates a {@link GuiceFilter} that provides scope functionality, but
7223 doesn't dispatch to {@link ServletModule} bound servlets or filters.
7224
7225 @author iqshum@google.com (Isaac Shum)
7226 @since 4.0]]>
7227    </doc>
7228  </class>
7229  <!-- end class com.google.inject.servlet.ScopingOnly -->
7230  <!-- start class com.google.inject.servlet.ServletModule -->
7231  <class name="ServletModule" extends="com.google.inject.AbstractModule"
7232    abstract="false"
7233    static="false" final="false" visibility="public"
7234    deprecated="not deprecated">
7235    <constructor name="ServletModule"
7236      static="false" final="false" visibility="public"
7237      deprecated="not deprecated">
7238    </constructor>
7239    <method name="configure"
7240      abstract="false" native="false" synchronized="false"
7241      static="false" final="true" visibility="protected"
7242      deprecated="not deprecated">
7243    </method>
7244    <method name="configureServlets"
7245      abstract="false" native="false" synchronized="false"
7246      static="false" final="false" visibility="protected"
7247      deprecated="not deprecated">
7248      <doc>
7249      <![CDATA[<h3>Servlet Mapping EDSL</h3>
7250
7251 <p> Part of the EDSL builder language for configuring servlets
7252 and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
7253 Filters and servlets are configured here using simple java method calls. Here is a typical
7254 example of registering a filter when creating your Guice injector:
7255
7256 <pre>
7257   Guice.createInjector(..., new ServletModule() {
7258
7259     {@literal @}Override
7260     protected void configureServlets() {
7261       <b>serve("*.html").with(MyServlet.class)</b>
7262     }
7263   }
7264 </pre>
7265
7266 This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
7267 any web pages ending in {@code .html}. You can also use a path-style syntax to register
7268 servlets:
7269
7270 <pre>
7271       <b>serve("/my/*").with(MyServlet.class)</b>
7272 </pre>
7273
7274 Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
7275 directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
7276 your module. Mapping a servlet that is bound under any other scope is an error.
7277
7278 <p>
7279 <h4>Dispatch Order</h4>
7280 You are free to register as many servlets and filters as you like this way. They will
7281 be compared and dispatched in the order in which the filter methods are called:
7282
7283 <pre>
7284
7285   Guice.createInjector(..., new ServletModule() {
7286
7287     {@literal @}Override
7288     protected void configureServlets() {
7289       filter("/*").through(MyFilter.class);
7290       filter("*.css").through(MyCssFilter.class);
7291       filter("*.jpg").through(new MyJpgFilter());
7292       // etc..
7293
7294       serve("*.html").with(MyServlet.class);
7295       serve("/my/*").with(MyServlet.class);
7296       serve("*.jpg").with(new MyServlet());
7297       // etc..
7298      }
7299    }
7300 </pre>
7301 This will traverse down the list of rules in lexical order. For example, a url
7302  "{@code /my/file.js}" (after it runs through the matching filters) will first
7303  be compared against the servlet mapping:
7304
7305 <pre>
7306       serve("*.html").with(MyServlet.class);
7307 </pre>
7308 And failing that, it will descend to the next servlet mapping:
7309
7310 <pre>
7311       serve("/my/*").with(MyServlet.class);
7312 </pre>
7313
7314 Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
7315 two mapping rules can also be written in more compact form using varargs syntax:
7316
7317 <pre>
7318       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
7319 </pre>
7320
7321 This way you can map several URI patterns to the same servlet. A similar syntax is
7322 also available for filter mappings.
7323
7324 <p>
7325 <h4>Regular Expressions</h4>
7326 You can also map servlets (or filters) to URIs using regular expressions:
7327 <pre>
7328    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
7329 </pre>
7330
7331 This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
7332 <ul>
7333 <li>http://www.google.com/ajax.html</li>
7334 <li>http://www.google.com/content/ajax/index</li>
7335 <li>http://www.google.com/it/is_totally_ajaxian</li>
7336 </ul>
7337
7338
7339 <h3>Initialization Parameters</h3>
7340
7341 Servlets (and filters) allow you to pass in init params
7342 using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
7343 Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
7344 name/value pairs. For example, to initialize {@code MyServlet} with two parameters
7345 ({@code name="Dhanji", site="google.com"}) you could write:
7346
7347 <pre>
7348  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
7349  params.put("name", "Dhanji");
7350  params.put("site", "google.com");
7351
7352  ...
7353      serve("/*").with(MyServlet.class, <b>params</b>)
7354 </pre>
7355
7356 <p>
7357 <h3>Binding Keys</h3>
7358
7359 You can also bind keys rather than classes. This lets you hide
7360 implementations with package-local visbility and expose them using
7361 only a Guice module and an annotation:
7362
7363 <pre>
7364  ...
7365      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
7366 </pre>
7367
7368 Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
7369 custom binding annotation. Elsewhere (in one of your own modules) you can bind this
7370 filter's implementation:
7371
7372 <pre>
7373   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
7374 </pre>
7375
7376 See {@link com.google.inject.Binder} for more information on binding syntax.
7377
7378 <p>
7379 <h3>Multiple Modules</h3>
7380
7381 It is sometimes useful to capture servlet and filter mappings from multiple different
7382 modules. This is essential if you want to package and offer drop-in Guice plugins that
7383 provide servlet functionality.
7384
7385 <p>
7386 Guice Servlet allows you to register several instances of {@code ServletModule} to your
7387 injector. The order in which these modules are installed determines the dispatch order
7388 of filters and the precedence order of servlets. For example, if you had two servlet modules,
7389 {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
7390 to the same URI pattern, {@code "/*"}:
7391
7392 <p>
7393 In {@code RpcModule}:
7394 <pre>
7395     filter("/*").through(RpcFilter.class);
7396 </pre>
7397
7398 In {@code WebServiceModule}:
7399 <pre>
7400     filter("/*").through(WebServiceFilter.class);
7401 </pre>
7402
7403 Then the order in which these filters are dispatched is determined by the order in which
7404 the modules are installed:
7405
7406 <pre>
7407   <b>install(new WebServiceModule());</b>
7408   install(new RpcModule());
7409 </pre>
7410
7411 In the case shown above {@code WebServiceFilter} will run first.
7412
7413 @since 2.0]]>
7414      </doc>
7415    </method>
7416    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7417      abstract="false" native="false" synchronized="false"
7418      static="false" final="true" visibility="protected"
7419      deprecated="not deprecated">
7420      <param name="urlPattern" type="java.lang.String"/>
7421      <param name="morePatterns" type="java.lang.String[]"/>
7422      <doc>
7423      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7424 @since 2.0]]>
7425      </doc>
7426    </method>
7427    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7428      abstract="false" native="false" synchronized="false"
7429      static="false" final="true" visibility="protected"
7430      deprecated="not deprecated">
7431      <param name="regex" type="java.lang.String"/>
7432      <param name="regexes" type="java.lang.String[]"/>
7433      <doc>
7434      <![CDATA[@param regex Any Java-style regular expression.
7435 @since 2.0]]>
7436      </doc>
7437    </method>
7438    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7439      abstract="false" native="false" synchronized="false"
7440      static="false" final="true" visibility="protected"
7441      deprecated="not deprecated">
7442      <param name="urlPattern" type="java.lang.String"/>
7443      <param name="morePatterns" type="java.lang.String[]"/>
7444      <doc>
7445      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7446 @since 2.0]]>
7447      </doc>
7448    </method>
7449    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7450      abstract="false" native="false" synchronized="false"
7451      static="false" final="true" visibility="protected"
7452      deprecated="not deprecated">
7453      <param name="regex" type="java.lang.String"/>
7454      <param name="regexes" type="java.lang.String[]"/>
7455      <doc>
7456      <![CDATA[@param regex Any Java-style regular expression.
7457 @since 2.0]]>
7458      </doc>
7459    </method>
7460    <method name="getServletContext" return="javax.servlet.ServletContext"
7461      abstract="false" native="false" synchronized="false"
7462      static="false" final="true" visibility="protected"
7463      deprecated="not deprecated">
7464      <doc>
7465      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
7466 create your injector. Otherwise, it returns null.
7467 @return The current servlet context.
7468 @since 3.0]]>
7469      </doc>
7470    </method>
7471    <doc>
7472    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
7473 objects so you can inject the request, response, session, etc.
7474
7475 <p>
7476 You should subclass this module to register servlets and
7477 filters in the {@link #configureServlets()} method.
7478
7479 @author crazybob@google.com (Bob Lee)
7480 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
7481    </doc>
7482  </class>
7483  <!-- end class com.google.inject.servlet.ServletModule -->
7484  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7485  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
7486    static="true" final="false" visibility="public"
7487    deprecated="not deprecated">
7488    <method name="through"
7489      abstract="true" native="false" synchronized="false"
7490      static="false" final="false" visibility="public"
7491      deprecated="not deprecated">
7492      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7493    </method>
7494    <method name="through"
7495      abstract="true" native="false" synchronized="false"
7496      static="false" final="false" visibility="public"
7497      deprecated="not deprecated">
7498      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7499    </method>
7500    <method name="through"
7501      abstract="true" native="false" synchronized="false"
7502      static="false" final="false" visibility="public"
7503      deprecated="not deprecated">
7504      <param name="filter" type="javax.servlet.Filter"/>
7505      <doc>
7506      <![CDATA[@since 3.0]]>
7507      </doc>
7508    </method>
7509    <method name="through"
7510      abstract="true" native="false" synchronized="false"
7511      static="false" final="false" visibility="public"
7512      deprecated="not deprecated">
7513      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7514      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7515    </method>
7516    <method name="through"
7517      abstract="true" native="false" synchronized="false"
7518      static="false" final="false" visibility="public"
7519      deprecated="not deprecated">
7520      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7521      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7522    </method>
7523    <method name="through"
7524      abstract="true" native="false" synchronized="false"
7525      static="false" final="false" visibility="public"
7526      deprecated="not deprecated">
7527      <param name="filter" type="javax.servlet.Filter"/>
7528      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7529      <doc>
7530      <![CDATA[@since 3.0]]>
7531      </doc>
7532    </method>
7533    <doc>
7534    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7535
7536 @since 2.0]]>
7537    </doc>
7538  </interface>
7539  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7540  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7541  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7542    static="true" final="false" visibility="public"
7543    deprecated="not deprecated">
7544    <method name="with"
7545      abstract="true" native="false" synchronized="false"
7546      static="false" final="false" visibility="public"
7547      deprecated="not deprecated">
7548      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7549    </method>
7550    <method name="with"
7551      abstract="true" native="false" synchronized="false"
7552      static="false" final="false" visibility="public"
7553      deprecated="not deprecated">
7554      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7555    </method>
7556    <method name="with"
7557      abstract="true" native="false" synchronized="false"
7558      static="false" final="false" visibility="public"
7559      deprecated="not deprecated">
7560      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7561      <doc>
7562      <![CDATA[@since 3.0]]>
7563      </doc>
7564    </method>
7565    <method name="with"
7566      abstract="true" native="false" synchronized="false"
7567      static="false" final="false" visibility="public"
7568      deprecated="not deprecated">
7569      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7570      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7571    </method>
7572    <method name="with"
7573      abstract="true" native="false" synchronized="false"
7574      static="false" final="false" visibility="public"
7575      deprecated="not deprecated">
7576      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7577      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7578    </method>
7579    <method name="with"
7580      abstract="true" native="false" synchronized="false"
7581      static="false" final="false" visibility="public"
7582      deprecated="not deprecated">
7583      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7584      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7585      <doc>
7586      <![CDATA[@since 3.0]]>
7587      </doc>
7588    </method>
7589    <doc>
7590    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7591
7592 @since 2.0]]>
7593    </doc>
7594  </interface>
7595  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7596  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7597  <interface name="ServletModuleBinding"    abstract="true"
7598    static="false" final="false" visibility="public"
7599    deprecated="not deprecated">
7600    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7601      abstract="true" native="false" synchronized="false"
7602      static="false" final="false" visibility="public"
7603      deprecated="not deprecated">
7604      <doc>
7605      <![CDATA[Returns the pattern type that this binding was created with.]]>
7606      </doc>
7607    </method>
7608    <method name="getPattern" return="java.lang.String"
7609      abstract="true" native="false" synchronized="false"
7610      static="false" final="false" visibility="public"
7611      deprecated="not deprecated">
7612      <doc>
7613      <![CDATA[Returns the pattern used to match against the binding.]]>
7614      </doc>
7615    </method>
7616    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7617      abstract="true" native="false" synchronized="false"
7618      static="false" final="false" visibility="public"
7619      deprecated="not deprecated">
7620      <doc>
7621      <![CDATA[Returns any context params supplied when creating the binding.]]>
7622      </doc>
7623    </method>
7624    <method name="matchesUri" return="boolean"
7625      abstract="true" native="false" synchronized="false"
7626      static="false" final="false" visibility="public"
7627      deprecated="not deprecated">
7628      <param name="uri" type="java.lang.String"/>
7629      <doc>
7630      <![CDATA[Returns true if the given URI will match this binding.]]>
7631      </doc>
7632    </method>
7633    <doc>
7634    <![CDATA[A binding created by {@link ServletModule}.
7635
7636 @author sameb@google.com (Sam Berlin)
7637 @since 3.0]]>
7638    </doc>
7639  </interface>
7640  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7641  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7642  <interface name="ServletModuleTargetVisitor"    abstract="true"
7643    static="false" final="false" visibility="public"
7644    deprecated="not deprecated">
7645    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7646    <method name="visit" return="V"
7647      abstract="true" native="false" synchronized="false"
7648      static="false" final="false" visibility="public"
7649      deprecated="not deprecated">
7650      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7651      <doc>
7652      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7653 {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7654
7655 If multiple patterns were specified, this will be called multiple times.]]>
7656      </doc>
7657    </method>
7658    <method name="visit" return="V"
7659      abstract="true" native="false" synchronized="false"
7660      static="false" final="false" visibility="public"
7661      deprecated="not deprecated">
7662      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7663      <doc>
7664      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7665 {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7666
7667 If multiple patterns were specified, this will be called multiple times.]]>
7668      </doc>
7669    </method>
7670    <method name="visit" return="V"
7671      abstract="true" native="false" synchronized="false"
7672      static="false" final="false" visibility="public"
7673      deprecated="not deprecated">
7674      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7675      <doc>
7676      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7677 {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7678
7679 If multiple patterns were specified, this will be called multiple times.]]>
7680      </doc>
7681    </method>
7682    <method name="visit" return="V"
7683      abstract="true" native="false" synchronized="false"
7684      static="false" final="false" visibility="public"
7685      deprecated="not deprecated">
7686      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7687      <doc>
7688      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7689 {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7690
7691 If multiple patterns were specified, this will be called multiple times.]]>
7692      </doc>
7693    </method>
7694    <doc>
7695    <![CDATA[A visitor for the servlet extension.
7696
7697 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7698 {@link ServletModule} will be visited through this interface.
7699
7700 @since 3.0
7701 @author sameb@google.com (Sam Berlin)]]>
7702    </doc>
7703  </interface>
7704  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7705  <!-- start class com.google.inject.servlet.ServletScopes -->
7706  <class name="ServletScopes" extends="java.lang.Object"
7707    abstract="false"
7708    static="false" final="false" visibility="public"
7709    deprecated="not deprecated">
7710    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7711      abstract="false" native="false" synchronized="false"
7712      static="true" final="false" visibility="public"
7713      deprecated="not deprecated">
7714      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7715      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7716      <doc>
7717      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7718 HTTP request in another thread. This acts as a way of transporting
7719 request context data from the request processing thread to to worker
7720 threads.
7721 <p>
7722 There are some limitations:
7723 <ul>
7724   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7725      transported.</li>
7726   <li>State changes to the HttpServletRequest after this method is called
7727      will not be seen in the continued thread.</li>
7728   <li>Only the HttpServletRequest, ServletContext and request parameter
7729      map are available in the continued thread. The response and session
7730      are not available.</li>
7731 </ul>
7732
7733 <p>The returned callable will throw a {@link ScopingException} when called
7734 if the HTTP request scope is still active on the current thread.
7735
7736 @param callable code to be executed in another thread, which depends on
7737     the request scope.
7738 @param seedMap the initial set of scoped instances for Guice to seed the
7739     request scope with.  To seed a key with null, use {@code null} as
7740     the value.
7741 @return a callable that will invoke the given callable, making the request
7742     context available to it.
7743 @throws OutOfScopeException if this method is called from a non-request
7744     thread, or if the request has completed.
7745
7746 @since 3.0]]>
7747      </doc>
7748    </method>
7749    <method name="transferRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7750      abstract="false" native="false" synchronized="false"
7751      static="true" final="false" visibility="public"
7752      deprecated="not deprecated">
7753      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7754      <doc>
7755      <![CDATA[Wraps the given callable in a contextual callable that "transfers" the
7756 request to another thread. This acts as a way of transporting
7757 request context data from the current thread to a future thread.
7758
7759 <p>As opposed to {@link #continueRequest}, this method propagates all
7760 existing scoped objects. The primary use case is in server implementations
7761 where you can detach the request processing thread while waiting for data,
7762 and reattach to a different thread to finish processing at a later time.
7763
7764 <p>Because request-scoped objects are not typically thread-safe, the
7765 callable returned by this method must not be run on a different thread
7766 until the current request scope has terminated. The returned callable will
7767 block until the current thread has released the request scope.
7768
7769 @param callable code to be executed in another thread, which depends on
7770     the request scope.
7771 @return a callable that will invoke the given callable, making the request
7772     context available to it.
7773 @throws OutOfScopeException if this method is called from a non-request
7774     thread, or if the request has completed.
7775 @since 4.0]]>
7776      </doc>
7777    </method>
7778    <method name="isRequestScoped" return="boolean"
7779      abstract="false" native="false" synchronized="false"
7780      static="true" final="false" visibility="public"
7781      deprecated="not deprecated">
7782      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
7783      <doc>
7784      <![CDATA[Returns true if {@code binding} is request-scoped. If the binding is a
7785 {@link com.google.inject.spi.LinkedKeyBinding linked key binding} and
7786 belongs to an injector (i. e. it was retrieved via
7787 {@link Injector#getBinding Injector.getBinding()}), then this method will
7788 also return true if the target binding is request-scoped.
7789
7790 @since 4.0]]>
7791      </doc>
7792    </method>
7793    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7794      abstract="false" native="false" synchronized="false"
7795      static="true" final="false" visibility="public"
7796      deprecated="not deprecated">
7797      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7798      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7799      <doc>
7800      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7801 as the HTTP request scope, but is used if no HTTP request scope is in
7802 progress. In this way, keys can be scoped as @RequestScoped and exist
7803 in non-HTTP requests (for example: RPC requests) as well as in HTTP
7804 request threads.
7805
7806 <p>The returned callable will throw a {@link ScopingException} when called
7807 if there is a request scope already active on the current thread.
7808
7809 @param callable code to be executed which depends on the request scope.
7810     Typically in another thread, but not necessarily so.
7811 @param seedMap the initial set of scoped instances for Guice to seed the
7812     request scope with.  To seed a key with null, use {@code null} as
7813     the value.
7814 @return a callable that when called will run inside the a request scope
7815     that exposes the instances in the {@code seedMap} as scoped keys.
7816 @since 3.0]]>
7817      </doc>
7818    </method>
7819    <field name="REQUEST" type="com.google.inject.Scope"
7820      transient="false" volatile="false"
7821      static="true" final="true" visibility="public"
7822      deprecated="not deprecated">
7823      <doc>
7824      <![CDATA[HTTP servlet request scope.]]>
7825      </doc>
7826    </field>
7827    <field name="SESSION" type="com.google.inject.Scope"
7828      transient="false" volatile="false"
7829      static="true" final="true" visibility="public"
7830      deprecated="not deprecated">
7831      <doc>
7832      <![CDATA[HTTP session scope.]]>
7833      </doc>
7834    </field>
7835    <doc>
7836    <![CDATA[Servlet scopes.
7837
7838 @author crazybob@google.com (Bob Lee)]]>
7839    </doc>
7840  </class>
7841  <!-- end class com.google.inject.servlet.ServletScopes -->
7842  <!-- start class com.google.inject.servlet.SessionScoped -->
7843  <class name="SessionScoped"    abstract="true"
7844    static="false" final="false" visibility="public"
7845    deprecated="not deprecated">
7846    <implements name="java.lang.annotation.Annotation"/>
7847    <doc>
7848    <![CDATA[Apply this to implementation classes when you want one instance per session.
7849
7850 @see com.google.inject.Scopes#SINGLETON
7851 @author crazybob@google.com (Bob Lee)]]>
7852    </doc>
7853  </class>
7854  <!-- end class com.google.inject.servlet.SessionScoped -->
7855  <!-- start class com.google.inject.servlet.UriPatternType -->
7856  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7857    abstract="false"
7858    static="false" final="true" visibility="public"
7859    deprecated="not deprecated">
7860    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7861      abstract="false" native="false" synchronized="false"
7862      static="true" final="false" visibility="public"
7863      deprecated="not deprecated">
7864    </method>
7865    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7866      abstract="false" native="false" synchronized="false"
7867      static="true" final="false" visibility="public"
7868      deprecated="not deprecated">
7869      <param name="name" type="java.lang.String"/>
7870    </method>
7871    <doc>
7872    <![CDATA[An enumeration of the available URI-pattern matching styles
7873
7874 @since 3.0]]>
7875    </doc>
7876  </class>
7877  <!-- end class com.google.inject.servlet.UriPatternType -->
7878</package>
7879<package name="com.google.inject.spi">
7880  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
7881  <interface name="BindingScopingVisitor"    abstract="true"
7882    static="false" final="false" visibility="public"
7883    deprecated="not deprecated">
7884    <method name="visitEagerSingleton" return="V"
7885      abstract="true" native="false" synchronized="false"
7886      static="false" final="false" visibility="public"
7887      deprecated="not deprecated">
7888      <doc>
7889      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
7890 injector bindings.]]>
7891      </doc>
7892    </method>
7893    <method name="visitScope" return="V"
7894      abstract="true" native="false" synchronized="false"
7895      static="false" final="false" visibility="public"
7896      deprecated="not deprecated">
7897      <param name="scope" type="com.google.inject.Scope"/>
7898      <doc>
7899      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
7900      </doc>
7901    </method>
7902    <method name="visitScopeAnnotation" return="V"
7903      abstract="true" native="false" synchronized="false"
7904      static="false" final="false" visibility="public"
7905      deprecated="not deprecated">
7906      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7907      <doc>
7908      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
7909 that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
7910 Scope) Binder.bindScope()}.]]>
7911      </doc>
7912    </method>
7913    <method name="visitNoScoping" return="V"
7914      abstract="true" native="false" synchronized="false"
7915      static="false" final="false" visibility="public"
7916      deprecated="not deprecated">
7917      <doc>
7918      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
7919 injector should use scoping annotations to find a scope. On an injector, it indicates that
7920 no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
7921 is linked to a scoped binding.]]>
7922      </doc>
7923    </method>
7924    <doc>
7925    <![CDATA[Visits each of the strategies used to scope an injection.
7926
7927 @param <V> any type to be returned by the visit method. Use {@link Void} with
7928     {@code return null} if no return type is needed.
7929 @since 2.0]]>
7930    </doc>
7931  </interface>
7932  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
7933  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
7934  <interface name="BindingTargetVisitor"    abstract="true"
7935    static="false" final="false" visibility="public"
7936    deprecated="not deprecated">
7937    <method name="visit" return="V"
7938      abstract="true" native="false" synchronized="false"
7939      static="false" final="false" visibility="public"
7940      deprecated="not deprecated">
7941      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7942      <doc>
7943      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
7944 found in both module and injector bindings.]]>
7945      </doc>
7946    </method>
7947    <method name="visit" return="V"
7948      abstract="true" native="false" synchronized="false"
7949      static="false" final="false" visibility="public"
7950      deprecated="not deprecated">
7951      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7952      <doc>
7953      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
7954 injections. This target is found in both module and injector bindings.]]>
7955      </doc>
7956    </method>
7957    <method name="visit" return="V"
7958      abstract="true" native="false" synchronized="false"
7959      static="false" final="false" visibility="public"
7960      deprecated="not deprecated">
7961      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7962      <doc>
7963      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
7964 that provider's {@code get} method is invoked. This target is found in both module and injector
7965 bindings.]]>
7966      </doc>
7967    </method>
7968    <method name="visit" return="V"
7969      abstract="true" native="false" synchronized="false"
7970      static="false" final="false" visibility="public"
7971      deprecated="not deprecated">
7972      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7973      <doc>
7974      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
7975 target is found in both module and injector bindings.]]>
7976      </doc>
7977    </method>
7978    <method name="visit" return="V"
7979      abstract="true" native="false" synchronized="false"
7980      static="false" final="false" visibility="public"
7981      deprecated="not deprecated">
7982      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7983      <doc>
7984      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
7985 found in injector bindings.]]>
7986      </doc>
7987    </method>
7988    <method name="visit" return="V"
7989      abstract="true" native="false" synchronized="false"
7990      static="false" final="false" visibility="public"
7991      deprecated="not deprecated">
7992      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7993      <doc>
7994      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
7995 that the injector should use its implicit binding strategies to resolve injections.]]>
7996      </doc>
7997    </method>
7998    <method name="visit" return="V"
7999      abstract="true" native="false" synchronized="false"
8000      static="false" final="false" visibility="public"
8001      deprecated="not deprecated">
8002      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8003      <doc>
8004      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
8005 {@code constructor}. This target is found only on injector bindings.]]>
8006      </doc>
8007    </method>
8008    <method name="visit" return="V"
8009      abstract="true" native="false" synchronized="false"
8010      static="false" final="false" visibility="public"
8011      deprecated="not deprecated">
8012      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8013      <doc>
8014      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
8015 has the same binding annotation but a different type. This target is found only on injector
8016 bindings.]]>
8017      </doc>
8018    </method>
8019    <method name="visit" return="V"
8020      abstract="true" native="false" synchronized="false"
8021      static="false" final="false" visibility="public"
8022      deprecated="not deprecated">
8023      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8024      <doc>
8025      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
8026 provided type. This target is found only on injector bindings.]]>
8027      </doc>
8028    </method>
8029    <doc>
8030    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
8031
8032 @param <V> any type to be returned by the visit method. Use {@link Void} with
8033     {@code return null} if no return type is needed.
8034 @since 2.0]]>
8035    </doc>
8036  </interface>
8037  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
8038  <!-- start interface com.google.inject.spi.ConstructorBinding -->
8039  <interface name="ConstructorBinding"    abstract="true"
8040    static="false" final="false" visibility="public"
8041    deprecated="not deprecated">
8042    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8043    <implements name="com.google.inject.spi.HasDependencies"/>
8044    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
8045      abstract="true" native="false" synchronized="false"
8046      static="false" final="false" visibility="public"
8047      deprecated="not deprecated">
8048      <doc>
8049      <![CDATA[Gets the constructor this binding injects.]]>
8050      </doc>
8051    </method>
8052    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8053      abstract="true" native="false" synchronized="false"
8054      static="false" final="false" visibility="public"
8055      deprecated="not deprecated">
8056      <doc>
8057      <![CDATA[Returns all instance method and field injection points on {@code type}.
8058
8059 @return a possibly empty set of injection points. The set has a specified iteration order. All
8060      fields are returned and then all methods. Within the fields, supertype fields are returned
8061      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
8062      </doc>
8063    </method>
8064    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
8065      abstract="true" native="false" synchronized="false"
8066      static="false" final="false" visibility="public"
8067      deprecated="not deprecated">
8068      <doc>
8069      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
8070
8071 @return a possibly empty map]]>
8072      </doc>
8073    </method>
8074    <doc>
8075    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
8076 instantiated by invoking the constructor.
8077
8078 @author jessewilson@google.com (Jesse Wilson)
8079 @since 2.0]]>
8080    </doc>
8081  </interface>
8082  <!-- end interface com.google.inject.spi.ConstructorBinding -->
8083  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
8084  <interface name="ConvertedConstantBinding"    abstract="true"
8085    static="false" final="false" visibility="public"
8086    deprecated="not deprecated">
8087    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8088    <implements name="com.google.inject.spi.HasDependencies"/>
8089    <method name="getValue" return="T"
8090      abstract="true" native="false" synchronized="false"
8091      static="false" final="false" visibility="public"
8092      deprecated="not deprecated">
8093      <doc>
8094      <![CDATA[Returns the converted value.]]>
8095      </doc>
8096    </method>
8097    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
8098      abstract="true" native="false" synchronized="false"
8099      static="false" final="false" visibility="public"
8100      deprecated="not deprecated">
8101      <doc>
8102      <![CDATA[Returns the type converter binding used to convert the constant.
8103
8104 @since 3.0]]>
8105      </doc>
8106    </method>
8107    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
8108      abstract="true" native="false" synchronized="false"
8109      static="false" final="false" visibility="public"
8110      deprecated="not deprecated">
8111      <doc>
8112      <![CDATA[Returns the key for the source binding. That binding can be retrieved from an injector using
8113 {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8114      </doc>
8115    </method>
8116    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8117      abstract="true" native="false" synchronized="false"
8118      static="false" final="false" visibility="public"
8119      deprecated="not deprecated">
8120      <doc>
8121      <![CDATA[Returns a singleton set containing only the converted key.]]>
8122      </doc>
8123    </method>
8124    <doc>
8125    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
8126 binding annotation but a different type.
8127
8128 @author jessewilson@google.com (Jesse Wilson)
8129 @since 2.0]]>
8130    </doc>
8131  </interface>
8132  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
8133  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
8134  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
8135    abstract="false"
8136    static="false" final="false" visibility="public"
8137    deprecated="not deprecated">
8138    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
8139    <constructor name="DefaultBindingScopingVisitor"
8140      static="false" final="false" visibility="public"
8141      deprecated="not deprecated">
8142    </constructor>
8143    <method name="visitOther" return="V"
8144      abstract="false" native="false" synchronized="false"
8145      static="false" final="false" visibility="protected"
8146      deprecated="not deprecated">
8147      <doc>
8148      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8149      </doc>
8150    </method>
8151    <method name="visitEagerSingleton" return="V"
8152      abstract="false" native="false" synchronized="false"
8153      static="false" final="false" visibility="public"
8154      deprecated="not deprecated">
8155    </method>
8156    <method name="visitScope" return="V"
8157      abstract="false" native="false" synchronized="false"
8158      static="false" final="false" visibility="public"
8159      deprecated="not deprecated">
8160      <param name="scope" type="com.google.inject.Scope"/>
8161    </method>
8162    <method name="visitScopeAnnotation" return="V"
8163      abstract="false" native="false" synchronized="false"
8164      static="false" final="false" visibility="public"
8165      deprecated="not deprecated">
8166      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8167    </method>
8168    <method name="visitNoScoping" return="V"
8169      abstract="false" native="false" synchronized="false"
8170      static="false" final="false" visibility="public"
8171      deprecated="not deprecated">
8172    </method>
8173    <doc>
8174    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8175 {@link #visitOther()}, returning its result.
8176
8177 @param <V> any type to be returned by the visit method. Use {@link Void} with
8178     {@code return null} if no return type is needed.
8179
8180 @author jessewilson@google.com (Jesse Wilson)
8181 @since 2.0]]>
8182    </doc>
8183  </class>
8184  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
8185  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
8186  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
8187    abstract="true"
8188    static="false" final="false" visibility="public"
8189    deprecated="not deprecated">
8190    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
8191    <constructor name="DefaultBindingTargetVisitor"
8192      static="false" final="false" visibility="public"
8193      deprecated="not deprecated">
8194    </constructor>
8195    <method name="visitOther" return="V"
8196      abstract="false" native="false" synchronized="false"
8197      static="false" final="false" visibility="protected"
8198      deprecated="not deprecated">
8199      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
8200      <doc>
8201      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8202      </doc>
8203    </method>
8204    <method name="visit" return="V"
8205      abstract="false" native="false" synchronized="false"
8206      static="false" final="false" visibility="public"
8207      deprecated="not deprecated">
8208      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8209    </method>
8210    <method name="visit" return="V"
8211      abstract="false" native="false" synchronized="false"
8212      static="false" final="false" visibility="public"
8213      deprecated="not deprecated">
8214      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8215    </method>
8216    <method name="visit" return="V"
8217      abstract="false" native="false" synchronized="false"
8218      static="false" final="false" visibility="public"
8219      deprecated="not deprecated">
8220      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8221    </method>
8222    <method name="visit" return="V"
8223      abstract="false" native="false" synchronized="false"
8224      static="false" final="false" visibility="public"
8225      deprecated="not deprecated">
8226      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8227    </method>
8228    <method name="visit" return="V"
8229      abstract="false" native="false" synchronized="false"
8230      static="false" final="false" visibility="public"
8231      deprecated="not deprecated">
8232      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8233    </method>
8234    <method name="visit" return="V"
8235      abstract="false" native="false" synchronized="false"
8236      static="false" final="false" visibility="public"
8237      deprecated="not deprecated">
8238      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8239    </method>
8240    <method name="visit" return="V"
8241      abstract="false" native="false" synchronized="false"
8242      static="false" final="false" visibility="public"
8243      deprecated="not deprecated">
8244      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8245    </method>
8246    <method name="visit" return="V"
8247      abstract="false" native="false" synchronized="false"
8248      static="false" final="false" visibility="public"
8249      deprecated="not deprecated">
8250      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8251    </method>
8252    <method name="visit" return="V"
8253      abstract="false" native="false" synchronized="false"
8254      static="false" final="false" visibility="public"
8255      deprecated="not deprecated">
8256      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8257    </method>
8258    <doc>
8259    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
8260 #visitOther(Binding)}, returning its result.
8261
8262 @param <V> any type to be returned by the visit method. Use {@link Void} with
8263     {@code return null} if no return type is needed.
8264
8265 @author jessewilson@google.com (Jesse Wilson)
8266 @since 2.0]]>
8267    </doc>
8268  </class>
8269  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
8270  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
8271  <class name="DefaultElementVisitor" extends="java.lang.Object"
8272    abstract="true"
8273    static="false" final="false" visibility="public"
8274    deprecated="not deprecated">
8275    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
8276    <constructor name="DefaultElementVisitor"
8277      static="false" final="false" visibility="public"
8278      deprecated="not deprecated">
8279    </constructor>
8280    <method name="visitOther" return="V"
8281      abstract="false" native="false" synchronized="false"
8282      static="false" final="false" visibility="protected"
8283      deprecated="not deprecated">
8284      <param name="element" type="com.google.inject.spi.Element"/>
8285      <doc>
8286      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8287      </doc>
8288    </method>
8289    <method name="visit" return="V"
8290      abstract="false" native="false" synchronized="false"
8291      static="false" final="false" visibility="public"
8292      deprecated="not deprecated">
8293      <param name="message" type="com.google.inject.spi.Message"/>
8294    </method>
8295    <method name="visit" return="V"
8296      abstract="false" native="false" synchronized="false"
8297      static="false" final="false" visibility="public"
8298      deprecated="not deprecated">
8299      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8300    </method>
8301    <method name="visit" return="V"
8302      abstract="false" native="false" synchronized="false"
8303      static="false" final="false" visibility="public"
8304      deprecated="not deprecated">
8305      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
8306    </method>
8307    <method name="visit" return="V"
8308      abstract="false" native="false" synchronized="false"
8309      static="false" final="false" visibility="public"
8310      deprecated="not deprecated">
8311      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
8312    </method>
8313    <method name="visit" return="V"
8314      abstract="false" native="false" synchronized="false"
8315      static="false" final="false" visibility="public"
8316      deprecated="not deprecated">
8317      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
8318    </method>
8319    <method name="visit" return="V"
8320      abstract="false" native="false" synchronized="false"
8321      static="false" final="false" visibility="public"
8322      deprecated="not deprecated">
8323      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8324    </method>
8325    <method name="visit" return="V"
8326      abstract="false" native="false" synchronized="false"
8327      static="false" final="false" visibility="public"
8328      deprecated="not deprecated">
8329      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8330    </method>
8331    <method name="visit" return="V"
8332      abstract="false" native="false" synchronized="false"
8333      static="false" final="false" visibility="public"
8334      deprecated="not deprecated">
8335      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
8336    </method>
8337    <method name="visit" return="V"
8338      abstract="false" native="false" synchronized="false"
8339      static="false" final="false" visibility="public"
8340      deprecated="not deprecated">
8341      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
8342    </method>
8343    <method name="visit" return="V"
8344      abstract="false" native="false" synchronized="false"
8345      static="false" final="false" visibility="public"
8346      deprecated="not deprecated">
8347      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8348    </method>
8349    <method name="visit" return="V"
8350      abstract="false" native="false" synchronized="false"
8351      static="false" final="false" visibility="public"
8352      deprecated="not deprecated">
8353      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8354    </method>
8355    <method name="visit" return="V"
8356      abstract="false" native="false" synchronized="false"
8357      static="false" final="false" visibility="public"
8358      deprecated="not deprecated">
8359      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8360    </method>
8361    <method name="visit" return="V"
8362      abstract="false" native="false" synchronized="false"
8363      static="false" final="false" visibility="public"
8364      deprecated="not deprecated">
8365      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8366    </method>
8367    <method name="visit" return="V"
8368      abstract="false" native="false" synchronized="false"
8369      static="false" final="false" visibility="public"
8370      deprecated="not deprecated">
8371      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8372    </method>
8373    <method name="visit" return="V"
8374      abstract="false" native="false" synchronized="false"
8375      static="false" final="false" visibility="public"
8376      deprecated="not deprecated">
8377      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8378    </method>
8379    <method name="visit" return="V"
8380      abstract="false" native="false" synchronized="false"
8381      static="false" final="false" visibility="public"
8382      deprecated="not deprecated">
8383      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8384    </method>
8385    <method name="visit" return="V"
8386      abstract="false" native="false" synchronized="false"
8387      static="false" final="false" visibility="public"
8388      deprecated="not deprecated">
8389      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8390    </method>
8391    <doc>
8392    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8393 {@link #visitOther(Element)}, returning its result.
8394
8395 @param <V> any type to be returned by the visit method. Use {@link Void} with
8396     {@code return null} if no return type is needed.
8397
8398 @author sberlin@gmail.com (Sam Berlin)
8399 @since 2.0]]>
8400    </doc>
8401  </class>
8402  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
8403  <!-- start class com.google.inject.spi.Dependency -->
8404  <class name="Dependency" extends="java.lang.Object"
8405    abstract="false"
8406    static="false" final="true" visibility="public"
8407    deprecated="not deprecated">
8408    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
8409      abstract="false" native="false" synchronized="false"
8410      static="true" final="false" visibility="public"
8411      deprecated="not deprecated">
8412      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
8413      <doc>
8414      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
8415 nullable.]]>
8416      </doc>
8417    </method>
8418    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8419      abstract="false" native="false" synchronized="false"
8420      static="true" final="false" visibility="public"
8421      deprecated="not deprecated">
8422      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
8423      <doc>
8424      <![CDATA[Returns the dependencies from the given injection points.]]>
8425      </doc>
8426    </method>
8427    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8428      abstract="false" native="false" synchronized="false"
8429      static="false" final="false" visibility="public"
8430      deprecated="not deprecated">
8431      <doc>
8432      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
8433      </doc>
8434    </method>
8435    <method name="isNullable" return="boolean"
8436      abstract="false" native="false" synchronized="false"
8437      static="false" final="false" visibility="public"
8438      deprecated="not deprecated">
8439      <doc>
8440      <![CDATA[Returns true if null is a legal value for this dependency.]]>
8441      </doc>
8442    </method>
8443    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
8444      abstract="false" native="false" synchronized="false"
8445      static="false" final="false" visibility="public"
8446      deprecated="not deprecated">
8447      <doc>
8448      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
8449 attached to a particular injection point.]]>
8450      </doc>
8451    </method>
8452    <method name="getParameterIndex" return="int"
8453      abstract="false" native="false" synchronized="false"
8454      static="false" final="false" visibility="public"
8455      deprecated="not deprecated">
8456      <doc>
8457      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
8458 this dependency does not belong to a parameter list. Only method and constuctor dependencies
8459 are elements in a parameter list.]]>
8460      </doc>
8461    </method>
8462    <method name="hashCode" return="int"
8463      abstract="false" native="false" synchronized="false"
8464      static="false" final="false" visibility="public"
8465      deprecated="not deprecated">
8466    </method>
8467    <method name="equals" return="boolean"
8468      abstract="false" native="false" synchronized="false"
8469      static="false" final="false" visibility="public"
8470      deprecated="not deprecated">
8471      <param name="o" type="java.lang.Object"/>
8472    </method>
8473    <method name="toString" return="java.lang.String"
8474      abstract="false" native="false" synchronized="false"
8475      static="false" final="false" visibility="public"
8476      deprecated="not deprecated">
8477    </method>
8478    <doc>
8479    <![CDATA[A variable that can be resolved by an injector.
8480
8481 <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
8482 that's attached to a constructor, method or field.
8483
8484 @author crazybob@google.com (Bob Lee)
8485 @author jessewilson@google.com (Jesse Wilson)
8486 @since 2.0]]>
8487    </doc>
8488  </class>
8489  <!-- end class com.google.inject.spi.Dependency -->
8490  <!-- start class com.google.inject.spi.DependencyAndSource -->
8491  <class name="DependencyAndSource" extends="java.lang.Object"
8492    abstract="false"
8493    static="false" final="true" visibility="public"
8494    deprecated="not deprecated">
8495    <constructor name="DependencyAndSource" type="com.google.inject.spi.Dependency&lt;?&gt;, java.lang.Object"
8496      static="false" final="false" visibility="public"
8497      deprecated="not deprecated">
8498    </constructor>
8499    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;?&gt;"
8500      abstract="false" native="false" synchronized="false"
8501      static="false" final="false" visibility="public"
8502      deprecated="not deprecated">
8503      <doc>
8504      <![CDATA[Returns the Dependency, if one exists. For anything that can be referenced
8505 by {@link Injector#getBinding}, a dependency exists. A dependency will not
8506 exist (and this will return null) for types initialized with
8507 {@link Binder#requestInjection} or {@link Injector#injectMembers(Object)},
8508 nor will it exist for objects injected into Providers bound with
8509 LinkedBindingBuilder#toProvider(Provider).]]>
8510      </doc>
8511    </method>
8512    <method name="getBindingSource" return="java.lang.String"
8513      abstract="false" native="false" synchronized="false"
8514      static="false" final="false" visibility="public"
8515      deprecated="not deprecated">
8516      <doc>
8517      <![CDATA[Returns a string describing where this dependency was bound. If the binding
8518 was just-in-time, there is no valid binding source, so this describes the
8519 class in question.]]>
8520      </doc>
8521    </method>
8522    <method name="toString" return="java.lang.String"
8523      abstract="false" native="false" synchronized="false"
8524      static="false" final="false" visibility="public"
8525      deprecated="not deprecated">
8526    </method>
8527    <doc>
8528    <![CDATA[A combination of a {@link Dependency} and the {@link Binding#getSource()
8529 source} where the dependency was bound.
8530
8531 @author sameb@google.com (Sam Berlin)
8532 @since 4.0]]>
8533    </doc>
8534  </class>
8535  <!-- end class com.google.inject.spi.DependencyAndSource -->
8536  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
8537  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
8538    abstract="false"
8539    static="false" final="true" visibility="public"
8540    deprecated="not deprecated">
8541    <implements name="com.google.inject.spi.Element"/>
8542    <method name="getSource" return="java.lang.Object"
8543      abstract="false" native="false" synchronized="false"
8544      static="false" final="false" visibility="public"
8545      deprecated="not deprecated">
8546    </method>
8547    <method name="applyTo"
8548      abstract="false" native="false" synchronized="false"
8549      static="false" final="false" visibility="public"
8550      deprecated="not deprecated">
8551      <param name="binder" type="com.google.inject.Binder"/>
8552    </method>
8553    <method name="acceptVisitor" return="T"
8554      abstract="false" native="false" synchronized="false"
8555      static="false" final="false" visibility="public"
8556      deprecated="not deprecated">
8557      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8558    </method>
8559    <doc>
8560    <![CDATA[A request to disable circular proxies.
8561
8562 @author sameb@google.com (Sam Berlin)
8563 @since 3.0]]>
8564    </doc>
8565  </class>
8566  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
8567  <!-- start interface com.google.inject.spi.Element -->
8568  <interface name="Element"    abstract="true"
8569    static="false" final="false" visibility="public"
8570    deprecated="not deprecated">
8571    <method name="getSource" return="java.lang.Object"
8572      abstract="true" native="false" synchronized="false"
8573      static="false" final="false" visibility="public"
8574      deprecated="not deprecated">
8575      <doc>
8576      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
8577 configured. Used by Guice in the production of descriptive error messages.
8578
8579 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8580 example. Tools should simply call {@code toString()} on the source object if the type is
8581 unfamiliar.]]>
8582      </doc>
8583    </method>
8584    <method name="acceptVisitor" return="T"
8585      abstract="true" native="false" synchronized="false"
8586      static="false" final="false" visibility="public"
8587      deprecated="not deprecated">
8588      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8589      <doc>
8590      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
8591
8592 @param visitor to call back on]]>
8593      </doc>
8594    </method>
8595    <method name="applyTo"
8596      abstract="true" native="false" synchronized="false"
8597      static="false" final="false" visibility="public"
8598      deprecated="not deprecated">
8599      <param name="binder" type="com.google.inject.Binder"/>
8600      <doc>
8601      <![CDATA[Writes this module element to the given binder (optional operation).
8602
8603 @param binder to apply configuration element to
8604 @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
8605     element.]]>
8606      </doc>
8607    </method>
8608    <doc>
8609    <![CDATA[A core component of a module or injector.
8610
8611 <p>The elements of a module can be inspected, validated and rewritten. Use {@link
8612 Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
8613 from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
8614 This can be used for static analysis and generation of Guice modules.
8615
8616 <p>The elements of an injector can be inspected and exercised. Use {@link
8617 com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
8618
8619 @author jessewilson@google.com (Jesse Wilson)
8620 @author crazybob@google.com (Bob Lee)
8621 @since 2.0]]>
8622    </doc>
8623  </interface>
8624  <!-- end interface com.google.inject.spi.Element -->
8625  <!-- start class com.google.inject.spi.Elements -->
8626  <class name="Elements" extends="java.lang.Object"
8627    abstract="false"
8628    static="false" final="true" visibility="public"
8629    deprecated="not deprecated">
8630    <constructor name="Elements"
8631      static="false" final="false" visibility="public"
8632      deprecated="not deprecated">
8633    </constructor>
8634    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8635      abstract="false" native="false" synchronized="false"
8636      static="true" final="false" visibility="public"
8637      deprecated="not deprecated">
8638      <param name="modules" type="com.google.inject.Module[]"/>
8639      <doc>
8640      <![CDATA[Records the elements executed by {@code modules}.]]>
8641      </doc>
8642    </method>
8643    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8644      abstract="false" native="false" synchronized="false"
8645      static="true" final="false" visibility="public"
8646      deprecated="not deprecated">
8647      <param name="stage" type="com.google.inject.Stage"/>
8648      <param name="modules" type="com.google.inject.Module[]"/>
8649      <doc>
8650      <![CDATA[Records the elements executed by {@code modules}.]]>
8651      </doc>
8652    </method>
8653    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8654      abstract="false" native="false" synchronized="false"
8655      static="true" final="false" visibility="public"
8656      deprecated="not deprecated">
8657      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8658      <doc>
8659      <![CDATA[Records the elements executed by {@code modules}.]]>
8660      </doc>
8661    </method>
8662    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8663      abstract="false" native="false" synchronized="false"
8664      static="true" final="false" visibility="public"
8665      deprecated="not deprecated">
8666      <param name="stage" type="com.google.inject.Stage"/>
8667      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8668      <doc>
8669      <![CDATA[Records the elements executed by {@code modules}.]]>
8670      </doc>
8671    </method>
8672    <method name="getModule" return="com.google.inject.Module"
8673      abstract="false" native="false" synchronized="false"
8674      static="true" final="false" visibility="public"
8675      deprecated="not deprecated">
8676      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8677      <doc>
8678      <![CDATA[Returns the module composed of {@code elements}.]]>
8679      </doc>
8680    </method>
8681    <doc>
8682    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8683 Element#applyTo(Binder) rewritten}.
8684
8685 @author jessewilson@google.com (Jesse Wilson)
8686 @since 2.0]]>
8687    </doc>
8688  </class>
8689  <!-- end class com.google.inject.spi.Elements -->
8690  <!-- start class com.google.inject.spi.ElementSource -->
8691  <class name="ElementSource" extends="java.lang.Object"
8692    abstract="false"
8693    static="false" final="true" visibility="public"
8694    deprecated="not deprecated">
8695    <method name="getOriginalElementSource" return="com.google.inject.spi.ElementSource"
8696      abstract="false" native="false" synchronized="false"
8697      static="false" final="false" visibility="public"
8698      deprecated="not deprecated">
8699      <doc>
8700      <![CDATA[Returns the {@link ElementSource} of the element this was created or copied from. If this was
8701 not created or copied from another element, returns {@code null}.]]>
8702      </doc>
8703    </method>
8704    <method name="getDeclaringSource" return="java.lang.Object"
8705      abstract="false" native="false" synchronized="false"
8706      static="false" final="false" visibility="public"
8707      deprecated="not deprecated">
8708      <doc>
8709      <![CDATA[Returns a single location in source code that defines the element. It can be any object
8710 such as {@link java.lang.reflect.Constructor}, {@link java.lang.reflect.Method},
8711 {@link java.lang.reflect.Field}, {@link StackTraceElement}, etc. For
8712 example, if the element is created from a method annotated by {@literal @Provides}, the
8713 declaring source of element would be the method itself.]]>
8714      </doc>
8715    </method>
8716    <method name="getModuleClassNames" return="java.util.List&lt;java.lang.String&gt;"
8717      abstract="false" native="false" synchronized="false"
8718      static="false" final="false" visibility="public"
8719      deprecated="not deprecated">
8720      <doc>
8721      <![CDATA[Returns the class names of modules involved in creating this {@link Element}. The first
8722 element (index 0) is the class name of module that defined the element, and the last element
8723 is the class name of root module.]]>
8724      </doc>
8725    </method>
8726    <method name="getModuleConfigurePositionsInStackTrace" return="java.util.List&lt;java.lang.Integer&gt;"
8727      abstract="false" native="false" synchronized="false"
8728      static="false" final="false" visibility="public"
8729      deprecated="not deprecated">
8730      <doc>
8731      <![CDATA[Returns the position of {@link com.google.inject.Module#configure configure(Binder)} method
8732 call in the {@link #getStackTrace stack trace} for modules that their classes returned by
8733 {@link #getModuleClassNames}. For example, if the stack trace looks like the following:
8734 <p>
8735 {@code
8736  0 - Binder.bind(),
8737  1 - ModuleTwo.configure(),
8738  2 - Binder.install(),
8739  3 - ModuleOne.configure(),
8740  4 - theRest().
8741 }
8742 <p>
8743 1 and 3 are returned.
8744 <p>
8745 In the cases where stack trace is not available (i.e., the stack trace was not collected),
8746 it returns -1 for all module positions.]]>
8747      </doc>
8748    </method>
8749    <method name="getStackTrace" return="java.lang.StackTraceElement[]"
8750      abstract="false" native="false" synchronized="false"
8751      static="false" final="false" visibility="public"
8752      deprecated="not deprecated">
8753      <doc>
8754      <![CDATA[Returns the sequence of method calls that ends at one of {@link com.google.inject.Binder}
8755 {@code bindXXX()} methods and eventually defines the element. Note that
8756 {@link #getStackTrace} lists {@link StackTraceElement StackTraceElements} in reverse
8757 chronological order. The first element (index zero) is the last method call and the last
8758 element is the first method invocation. In the cases where stack trace is not available
8759 (i.e.,the stack trace was not collected), it returns an empty array.]]>
8760      </doc>
8761    </method>
8762    <method name="toString" return="java.lang.String"
8763      abstract="false" native="false" synchronized="false"
8764      static="false" final="false" visibility="public"
8765      deprecated="not deprecated">
8766      <doc>
8767      <![CDATA[Returns {@code getDeclaringSource().toString()} value.]]>
8768      </doc>
8769    </method>
8770    <doc>
8771    <![CDATA[Contains information about where and how an {@link Element element} was
8772 bound.
8773 <p>
8774 The {@link #getDeclaringSource() declaring source} refers to a location in
8775 source code that defines the Guice {@link Element element}. For example, if
8776 the element is created from a method annotated by {@literal @Provides}, the
8777 declaring source of element would be the method itself.
8778 <p>
8779 The {@link #getStackTrace()} refers to the sequence of calls ends at one of
8780 {@link com.google.inject.Binder} {@code bindXXX()} methods and eventually
8781 defines the element. Note that {@link #getStackTrace()} lists
8782 {@link StackTraceElement StackTraceElements} in reverse chronological order.
8783 The first element (index zero) is the last method call and the last element
8784 is the first method invocation. By default, the stack trace is not collected.
8785 The default behavior can be changed by setting the
8786 {@code guice_include_stack_traces} flag value. The value can be either
8787 {@code OFF}, {@code ONLY_FOR_DECLARING_SOURCE} or {@code COMPLETE}. Note that
8788 collecting stack traces for every binding can cause a performance hit when
8789 the injector is created.
8790 <p>
8791 The sequence of class names of {@link com.google.inject.Module modules}
8792 involved in the element creation can be retrieved by
8793 {@link #getModuleClassNames()}. Similar to {@link #getStackTrace()}, the
8794 order is reverse chronological. The first module (index 0) is the module that
8795 installs the {@link Element element}. The last module is the root module.
8796 <p>
8797 In order to support the cases where a Guice {@link Element element} is
8798 created from another Guice {@link Element element} (original) (e.g., by
8799 {@link Element#applyTo}), it also provides a reference to the original
8800 element source ({@link #getOriginalElementSource()}).
8801
8802 @since 4.0]]>
8803    </doc>
8804  </class>
8805  <!-- end class com.google.inject.spi.ElementSource -->
8806  <!-- start interface com.google.inject.spi.ElementVisitor -->
8807  <interface name="ElementVisitor"    abstract="true"
8808    static="false" final="false" visibility="public"
8809    deprecated="not deprecated">
8810    <method name="visit" return="V"
8811      abstract="true" native="false" synchronized="false"
8812      static="false" final="false" visibility="public"
8813      deprecated="not deprecated">
8814      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8815      <doc>
8816      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8817 instances of the type.]]>
8818      </doc>
8819    </method>
8820    <method name="visit" return="V"
8821      abstract="true" native="false" synchronized="false"
8822      static="false" final="false" visibility="public"
8823      deprecated="not deprecated">
8824      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8825      <doc>
8826      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8827      </doc>
8828    </method>
8829    <method name="visit" return="V"
8830      abstract="true" native="false" synchronized="false"
8831      static="false" final="false" visibility="public"
8832      deprecated="not deprecated">
8833      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8834      <doc>
8835      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8836      </doc>
8837    </method>
8838    <method name="visit" return="V"
8839      abstract="true" native="false" synchronized="false"
8840      static="false" final="false" visibility="public"
8841      deprecated="not deprecated">
8842      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8843      <doc>
8844      <![CDATA[Visit a registration of type converters for matching target types.]]>
8845      </doc>
8846    </method>
8847    <method name="visit" return="V"
8848      abstract="true" native="false" synchronized="false"
8849      static="false" final="false" visibility="public"
8850      deprecated="not deprecated">
8851      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8852      <doc>
8853      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8854      </doc>
8855    </method>
8856    <method name="visit" return="V"
8857      abstract="true" native="false" synchronized="false"
8858      static="false" final="false" visibility="public"
8859      deprecated="not deprecated">
8860      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8861      <doc>
8862      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8863      </doc>
8864    </method>
8865    <method name="visit" return="V"
8866      abstract="true" native="false" synchronized="false"
8867      static="false" final="false" visibility="public"
8868      deprecated="not deprecated">
8869      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8870      <doc>
8871      <![CDATA[Visit a lookup of the provider for a type.]]>
8872      </doc>
8873    </method>
8874    <method name="visit" return="V"
8875      abstract="true" native="false" synchronized="false"
8876      static="false" final="false" visibility="public"
8877      deprecated="not deprecated">
8878      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8879      <doc>
8880      <![CDATA[Visit a lookup of the members injector.]]>
8881      </doc>
8882    </method>
8883    <method name="visit" return="V"
8884      abstract="true" native="false" synchronized="false"
8885      static="false" final="false" visibility="public"
8886      deprecated="not deprecated">
8887      <param name="message" type="com.google.inject.spi.Message"/>
8888      <doc>
8889      <![CDATA[Visit an error message and the context in which it occured.]]>
8890      </doc>
8891    </method>
8892    <method name="visit" return="V"
8893      abstract="true" native="false" synchronized="false"
8894      static="false" final="false" visibility="public"
8895      deprecated="not deprecated">
8896      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
8897      <doc>
8898      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
8899 private binder}.]]>
8900      </doc>
8901    </method>
8902    <method name="visit" return="V"
8903      abstract="true" native="false" synchronized="false"
8904      static="false" final="false" visibility="public"
8905      deprecated="not deprecated">
8906      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8907      <doc>
8908      <![CDATA[Visit an injectable type listener binding.]]>
8909      </doc>
8910    </method>
8911    <method name="visit" return="V"
8912      abstract="true" native="false" synchronized="false"
8913      static="false" final="false" visibility="public"
8914      deprecated="not deprecated">
8915      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8916      <doc>
8917      <![CDATA[Visit a provision listener binding.
8918
8919 @since 4.0]]>
8920      </doc>
8921    </method>
8922    <method name="visit" return="V"
8923      abstract="true" native="false" synchronized="false"
8924      static="false" final="false" visibility="public"
8925      deprecated="not deprecated">
8926      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8927      <doc>
8928      <![CDATA[Visit a require explicit bindings command.
8929
8930 @since 3.0]]>
8931      </doc>
8932    </method>
8933    <method name="visit" return="V"
8934      abstract="true" native="false" synchronized="false"
8935      static="false" final="false" visibility="public"
8936      deprecated="not deprecated">
8937      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8938      <doc>
8939      <![CDATA[Visit a disable circular proxies command.
8940
8941 @since 3.0]]>
8942      </doc>
8943    </method>
8944    <method name="visit" return="V"
8945      abstract="true" native="false" synchronized="false"
8946      static="false" final="false" visibility="public"
8947      deprecated="not deprecated">
8948      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8949      <doc>
8950      <![CDATA[Visit a require explicit {@literal @}{@link Inject} command.
8951
8952 @since 4.0]]>
8953      </doc>
8954    </method>
8955    <method name="visit" return="V"
8956      abstract="true" native="false" synchronized="false"
8957      static="false" final="false" visibility="public"
8958      deprecated="not deprecated">
8959      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8960      <doc>
8961      <![CDATA[Visit a require exact binding annotations command.
8962
8963 @since 4.0]]>
8964      </doc>
8965    </method>
8966    <method name="visit" return="V"
8967      abstract="true" native="false" synchronized="false"
8968      static="false" final="false" visibility="public"
8969      deprecated="not deprecated">
8970      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8971      <doc>
8972      <![CDATA[Visits a {@link Binder#scanModulesForAnnotatedMethods} command.
8973
8974 @since 4.0]]>
8975      </doc>
8976    </method>
8977    <doc>
8978    <![CDATA[Visit elements.
8979
8980 @param <V> any type to be returned by the visit method. Use {@link Void} with
8981     {@code return null} if no return type is needed.
8982
8983 @since 2.0]]>
8984    </doc>
8985  </interface>
8986  <!-- end interface com.google.inject.spi.ElementVisitor -->
8987  <!-- start interface com.google.inject.spi.ExposedBinding -->
8988  <interface name="ExposedBinding"    abstract="true"
8989    static="false" final="false" visibility="public"
8990    deprecated="not deprecated">
8991    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8992    <implements name="com.google.inject.spi.HasDependencies"/>
8993    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
8994      abstract="true" native="false" synchronized="false"
8995      static="false" final="false" visibility="public"
8996      deprecated="not deprecated">
8997      <doc>
8998      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
8999      </doc>
9000    </method>
9001    <method name="applyTo"
9002      abstract="true" native="false" synchronized="false"
9003      static="false" final="false" visibility="public"
9004      deprecated="not deprecated">
9005      <param name="binder" type="com.google.inject.Binder"/>
9006      <doc>
9007      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
9008      </doc>
9009    </method>
9010    <doc>
9011    <![CDATA[A binding to a key exposed from an enclosed private environment.
9012
9013 @author jessewilson@google.com (Jesse Wilson)
9014 @since 2.0]]>
9015    </doc>
9016  </interface>
9017  <!-- end interface com.google.inject.spi.ExposedBinding -->
9018  <!-- start interface com.google.inject.spi.HasDependencies -->
9019  <interface name="HasDependencies"    abstract="true"
9020    static="false" final="false" visibility="public"
9021    deprecated="not deprecated">
9022    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9023      abstract="true" native="false" synchronized="false"
9024      static="false" final="false" visibility="public"
9025      deprecated="not deprecated">
9026      <doc>
9027      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
9028 known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
9029 included in the returned set.
9030
9031 @return a possibly empty set]]>
9032      </doc>
9033    </method>
9034    <doc>
9035    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
9036 providers} and instances that expose their dependencies explicitly.
9037
9038 @author jessewilson@google.com (Jesse Wilson)
9039 @since 2.0]]>
9040    </doc>
9041  </interface>
9042  <!-- end interface com.google.inject.spi.HasDependencies -->
9043  <!-- start interface com.google.inject.spi.InjectionListener -->
9044  <interface name="InjectionListener"    abstract="true"
9045    static="false" final="false" visibility="public"
9046    deprecated="not deprecated">
9047    <method name="afterInjection"
9048      abstract="true" native="false" synchronized="false"
9049      static="false" final="false" visibility="public"
9050      deprecated="not deprecated">
9051      <param name="injectee" type="I"/>
9052      <doc>
9053      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
9054
9055 @param injectee instance that Guice injected dependencies into]]>
9056      </doc>
9057    </method>
9058    <doc>
9059    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
9060 injections, post-injection initialization, and more.
9061
9062 @author crazybob@google.com (Bob Lee)
9063 @author jessewilson@google.com (Jesse Wilson)
9064 @since 2.0]]>
9065    </doc>
9066  </interface>
9067  <!-- end interface com.google.inject.spi.InjectionListener -->
9068  <!-- start class com.google.inject.spi.InjectionPoint -->
9069  <class name="InjectionPoint" extends="java.lang.Object"
9070    abstract="false"
9071    static="false" final="true" visibility="public"
9072    deprecated="not deprecated">
9073    <method name="getMember" return="java.lang.reflect.Member"
9074      abstract="false" native="false" synchronized="false"
9075      static="false" final="false" visibility="public"
9076      deprecated="not deprecated">
9077      <doc>
9078      <![CDATA[Returns the injected constructor, field, or method.]]>
9079      </doc>
9080    </method>
9081    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9082      abstract="false" native="false" synchronized="false"
9083      static="false" final="false" visibility="public"
9084      deprecated="not deprecated">
9085      <doc>
9086      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
9087 constructor, the dependencies will correspond to that member's parameters. Field injection
9088 points always have a single dependency for the field itself.
9089
9090 @return a possibly-empty list]]>
9091      </doc>
9092    </method>
9093    <method name="isOptional" return="boolean"
9094      abstract="false" native="false" synchronized="false"
9095      static="false" final="false" visibility="public"
9096      deprecated="not deprecated">
9097      <doc>
9098      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
9099 for all required dependencies. Both explicit bindings (as specified in a module), and implicit
9100 bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
9101 constructors etc.) may be used to satisfy optional injection points.]]>
9102      </doc>
9103    </method>
9104    <method name="isToolable" return="boolean"
9105      abstract="false" native="false" synchronized="false"
9106      static="false" final="false" visibility="public"
9107      deprecated="not deprecated">
9108      <doc>
9109      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
9110
9111 @since 3.0]]>
9112      </doc>
9113    </method>
9114    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
9115      abstract="false" native="false" synchronized="false"
9116      static="false" final="false" visibility="public"
9117      deprecated="not deprecated">
9118      <doc>
9119      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
9120 parameterized type, the result will include more type information than the member's {@link
9121 Member#getDeclaringClass() raw declaring class}.
9122
9123 @since 3.0]]>
9124      </doc>
9125    </method>
9126    <method name="equals" return="boolean"
9127      abstract="false" native="false" synchronized="false"
9128      static="false" final="false" visibility="public"
9129      deprecated="not deprecated">
9130      <param name="o" type="java.lang.Object"/>
9131    </method>
9132    <method name="hashCode" return="int"
9133      abstract="false" native="false" synchronized="false"
9134      static="false" final="false" visibility="public"
9135      deprecated="not deprecated">
9136    </method>
9137    <method name="toString" return="java.lang.String"
9138      abstract="false" native="false" synchronized="false"
9139      static="false" final="false" visibility="public"
9140      deprecated="not deprecated">
9141    </method>
9142    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9143      abstract="false" native="false" synchronized="false"
9144      static="true" final="false" visibility="public"
9145      deprecated="not deprecated">
9146      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9147      <doc>
9148      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
9149 constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
9150 type literal.
9151
9152 @param constructor any single constructor present on {@code type}.
9153
9154 @since 3.0]]>
9155      </doc>
9156    </method>
9157    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9158      abstract="false" native="false" synchronized="false"
9159      static="true" final="false" visibility="public"
9160      deprecated="not deprecated">
9161      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9162      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
9163      <doc>
9164      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
9165
9166 @param constructor any single constructor present on {@code type}.
9167 @param type the concrete type that defines {@code constructor}.
9168
9169 @since 3.0]]>
9170      </doc>
9171    </method>
9172    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9173      abstract="false" native="false" synchronized="false"
9174      static="true" final="false" visibility="public"
9175      deprecated="not deprecated">
9176      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9177      <doc>
9178      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9179
9180 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9181     or a no-arguments constructor that is not private.
9182 @throws ConfigurationException if there is no injectable constructor, more than one injectable
9183     constructor, or if parameters of the injectable constructor are malformed, such as a
9184     parameter with multiple binding annotations.]]>
9185      </doc>
9186    </method>
9187    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9188      abstract="false" native="false" synchronized="false"
9189      static="true" final="false" visibility="public"
9190      deprecated="not deprecated">
9191      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9192      <doc>
9193      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9194
9195 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9196     or a no-arguments constructor that is not private.
9197 @throws ConfigurationException if there is no injectable constructor, more than one injectable
9198     constructor, or if parameters of the injectable constructor are malformed, such as a
9199     parameter with multiple binding annotations.]]>
9200      </doc>
9201    </method>
9202    <method name="forMethod" return="com.google.inject.spi.InjectionPoint"
9203      abstract="false" native="false" synchronized="false"
9204      static="true" final="false" visibility="public"
9205      deprecated="not deprecated">
9206      <param name="method" type="java.lang.reflect.Method"/>
9207      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9208      <doc>
9209      <![CDATA[Returns a new injection point for the specified method of {@code type}.
9210 This is useful for extensions that need to build dependency graphs from
9211 arbitrary methods.
9212
9213 @param method any single method present on {@code type}.
9214 @param type the concrete type that defines {@code method}.
9215
9216 @since 4.0]]>
9217      </doc>
9218    </method>
9219    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9220      abstract="false" native="false" synchronized="false"
9221      static="true" final="false" visibility="public"
9222      deprecated="not deprecated">
9223      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9224      <doc>
9225      <![CDATA[Returns all static method and field injection points on {@code type}.
9226
9227 @return a possibly empty set of injection points. The set has a specified iteration order. All
9228      fields are returned and then all methods. Within the fields, supertype fields are returned
9229      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9230 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9231      a field with multiple binding annotations. The exception's {@link
9232      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9233      of the valid injection points.]]>
9234      </doc>
9235    </method>
9236    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9237      abstract="false" native="false" synchronized="false"
9238      static="true" final="false" visibility="public"
9239      deprecated="not deprecated">
9240      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9241      <doc>
9242      <![CDATA[Returns all static method and field injection points on {@code type}.
9243
9244 @return a possibly empty set of injection points. The set has a specified iteration order. All
9245      fields are returned and then all methods. Within the fields, supertype fields are returned
9246      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9247 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9248      a field with multiple binding annotations. The exception's {@link
9249      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9250      of the valid injection points.]]>
9251      </doc>
9252    </method>
9253    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9254      abstract="false" native="false" synchronized="false"
9255      static="true" final="false" visibility="public"
9256      deprecated="not deprecated">
9257      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9258      <doc>
9259      <![CDATA[Returns all instance method and field injection points on {@code type}.
9260
9261 @return a possibly empty set of injection points. The set has a specified iteration order. All
9262      fields are returned and then all methods. Within the fields, supertype fields are returned
9263      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9264 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9265      a field with multiple binding annotations. The exception's {@link
9266      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9267      of the valid injection points.]]>
9268      </doc>
9269    </method>
9270    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9271      abstract="false" native="false" synchronized="false"
9272      static="true" final="false" visibility="public"
9273      deprecated="not deprecated">
9274      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9275      <doc>
9276      <![CDATA[Returns all instance method and field injection points on {@code type}.
9277
9278 @return a possibly empty set of injection points. The set has a specified iteration order. All
9279      fields are returned and then all methods. Within the fields, supertype fields are returned
9280      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9281 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9282      a field with multiple binding annotations. The exception's {@link
9283      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9284      of the valid injection points.]]>
9285      </doc>
9286    </method>
9287    <doc>
9288    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
9289 {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
9290 omit the annotation.
9291
9292 @author crazybob@google.com (Bob Lee)
9293 @since 2.0]]>
9294    </doc>
9295  </class>
9296  <!-- end class com.google.inject.spi.InjectionPoint -->
9297  <!-- start class com.google.inject.spi.InjectionRequest -->
9298  <class name="InjectionRequest" extends="java.lang.Object"
9299    abstract="false"
9300    static="false" final="true" visibility="public"
9301    deprecated="not deprecated">
9302    <implements name="com.google.inject.spi.Element"/>
9303    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
9304      static="false" final="false" visibility="public"
9305      deprecated="not deprecated">
9306    </constructor>
9307    <method name="getSource" return="java.lang.Object"
9308      abstract="false" native="false" synchronized="false"
9309      static="false" final="false" visibility="public"
9310      deprecated="not deprecated">
9311    </method>
9312    <method name="getInstance" return="T"
9313      abstract="false" native="false" synchronized="false"
9314      static="false" final="false" visibility="public"
9315      deprecated="not deprecated">
9316    </method>
9317    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9318      abstract="false" native="false" synchronized="false"
9319      static="false" final="false" visibility="public"
9320      deprecated="not deprecated">
9321    </method>
9322    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9323      abstract="false" native="false" synchronized="false"
9324      static="false" final="false" visibility="public"
9325      deprecated="not deprecated">
9326      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9327      <doc>
9328      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
9329 this request.
9330
9331 @return a possibly empty set of injection points. The set has a specified iteration order. All
9332      fields are returned and then all methods. Within the fields, supertype fields are returned
9333      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9334 @throws ConfigurationException if there is a malformed injection point on the class of {@code
9335      instance}, such as a field with multiple binding annotations. The exception's {@link
9336      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9337      of the valid injection points.]]>
9338      </doc>
9339    </method>
9340    <method name="acceptVisitor" return="R"
9341      abstract="false" native="false" synchronized="false"
9342      static="false" final="false" visibility="public"
9343      deprecated="not deprecated">
9344      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
9345    </method>
9346    <method name="applyTo"
9347      abstract="false" native="false" synchronized="false"
9348      static="false" final="false" visibility="public"
9349      deprecated="not deprecated">
9350      <param name="binder" type="com.google.inject.Binder"/>
9351    </method>
9352    <doc>
9353    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
9354 explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
9355 requestInjection()} statements:
9356 <pre>
9357     requestInjection(serviceInstance);</pre>
9358
9359 @author mikeward@google.com (Mike Ward)
9360 @since 2.0]]>
9361    </doc>
9362  </class>
9363  <!-- end class com.google.inject.spi.InjectionRequest -->
9364  <!-- start interface com.google.inject.spi.InstanceBinding -->
9365  <interface name="InstanceBinding"    abstract="true"
9366    static="false" final="false" visibility="public"
9367    deprecated="not deprecated">
9368    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9369    <implements name="com.google.inject.spi.HasDependencies"/>
9370    <method name="getInstance" return="T"
9371      abstract="true" native="false" synchronized="false"
9372      static="false" final="false" visibility="public"
9373      deprecated="not deprecated">
9374      <doc>
9375      <![CDATA[Returns the user-supplied instance.]]>
9376      </doc>
9377    </method>
9378    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9379      abstract="true" native="false" synchronized="false"
9380      static="false" final="false" visibility="public"
9381      deprecated="not deprecated">
9382      <doc>
9383      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
9384 time only.
9385
9386 @return a possibly empty set]]>
9387      </doc>
9388    </method>
9389    <doc>
9390    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
9391
9392 @author jessewilson@google.com (Jesse Wilson)
9393 @since 2.0]]>
9394    </doc>
9395  </interface>
9396  <!-- end interface com.google.inject.spi.InstanceBinding -->
9397  <!-- start class com.google.inject.spi.InterceptorBinding -->
9398  <class name="InterceptorBinding" extends="java.lang.Object"
9399    abstract="false"
9400    static="false" final="true" visibility="public"
9401    deprecated="not deprecated">
9402    <implements name="com.google.inject.spi.Element"/>
9403    <method name="getSource" return="java.lang.Object"
9404      abstract="false" native="false" synchronized="false"
9405      static="false" final="false" visibility="public"
9406      deprecated="not deprecated">
9407    </method>
9408    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
9409      abstract="false" native="false" synchronized="false"
9410      static="false" final="false" visibility="public"
9411      deprecated="not deprecated">
9412    </method>
9413    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
9414      abstract="false" native="false" synchronized="false"
9415      static="false" final="false" visibility="public"
9416      deprecated="not deprecated">
9417    </method>
9418    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
9419      abstract="false" native="false" synchronized="false"
9420      static="false" final="false" visibility="public"
9421      deprecated="not deprecated">
9422    </method>
9423    <method name="acceptVisitor" return="T"
9424      abstract="false" native="false" synchronized="false"
9425      static="false" final="false" visibility="public"
9426      deprecated="not deprecated">
9427      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9428    </method>
9429    <method name="applyTo"
9430      abstract="false" native="false" synchronized="false"
9431      static="false" final="false" visibility="public"
9432      deprecated="not deprecated">
9433      <param name="binder" type="com.google.inject.Binder"/>
9434    </method>
9435    <doc>
9436    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
9437 explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
9438 Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
9439 <pre>
9440     bindInterceptor(Matchers.subclassesOf(MyAction.class),
9441         Matchers.annotatedWith(Transactional.class),
9442         new MyTransactionInterceptor());</pre>
9443
9444 or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
9445 org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
9446
9447 @author jessewilson@google.com (Jesse Wilson)
9448 @since 2.0]]>
9449    </doc>
9450  </class>
9451  <!-- end class com.google.inject.spi.InterceptorBinding -->
9452  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
9453  <interface name="LinkedKeyBinding"    abstract="true"
9454    static="false" final="false" visibility="public"
9455    deprecated="not deprecated">
9456    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9457    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
9458      abstract="true" native="false" synchronized="false"
9459      static="false" final="false" visibility="public"
9460      deprecated="not deprecated">
9461      <doc>
9462      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
9463 injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
9464      </doc>
9465    </method>
9466    <doc>
9467    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
9468
9469 @author jessewilson@google.com (Jesse Wilson)
9470 @since 2.0]]>
9471    </doc>
9472  </interface>
9473  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
9474  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
9475  <class name="MembersInjectorLookup" extends="java.lang.Object"
9476    abstract="false"
9477    static="false" final="true" visibility="public"
9478    deprecated="not deprecated">
9479    <implements name="com.google.inject.spi.Element"/>
9480    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
9481      static="false" final="false" visibility="public"
9482      deprecated="not deprecated">
9483    </constructor>
9484    <method name="getSource" return="java.lang.Object"
9485      abstract="false" native="false" synchronized="false"
9486      static="false" final="false" visibility="public"
9487      deprecated="not deprecated">
9488    </method>
9489    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9490      abstract="false" native="false" synchronized="false"
9491      static="false" final="false" visibility="public"
9492      deprecated="not deprecated">
9493      <doc>
9494      <![CDATA[Gets the type containing the members to be injected.]]>
9495      </doc>
9496    </method>
9497    <method name="acceptVisitor" return="T"
9498      abstract="false" native="false" synchronized="false"
9499      static="false" final="false" visibility="public"
9500      deprecated="not deprecated">
9501      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9502    </method>
9503    <method name="initializeDelegate"
9504      abstract="false" native="false" synchronized="false"
9505      static="false" final="false" visibility="public"
9506      deprecated="not deprecated">
9507      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
9508      <doc>
9509      <![CDATA[Sets the actual members injector.
9510
9511 @throws IllegalStateException if the delegate is already set]]>
9512      </doc>
9513    </method>
9514    <method name="applyTo"
9515      abstract="false" native="false" synchronized="false"
9516      static="false" final="false" visibility="public"
9517      deprecated="not deprecated">
9518      <param name="binder" type="com.google.inject.Binder"/>
9519    </method>
9520    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
9521      abstract="false" native="false" synchronized="false"
9522      static="false" final="false" visibility="public"
9523      deprecated="not deprecated">
9524      <doc>
9525      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
9526 The delegate will be initialized when this element is processed, or otherwise used to create
9527 an injector.]]>
9528      </doc>
9529    </method>
9530    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9531      abstract="false" native="false" synchronized="false"
9532      static="false" final="false" visibility="public"
9533      deprecated="not deprecated">
9534      <doc>
9535      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
9536 initialized, which usually happens when the injector is created. The members injector will
9537 throw an {@code IllegalStateException} if you try to use it beforehand.]]>
9538      </doc>
9539    </method>
9540    <doc>
9541    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
9542 {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
9543 <pre>
9544     MembersInjector&lt;PaymentService&gt; membersInjector
9545         = getMembersInjector(PaymentService.class);</pre>
9546
9547 @author crazybob@google.com (Bob Lee)
9548 @since 2.0]]>
9549    </doc>
9550  </class>
9551  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
9552  <!-- start class com.google.inject.spi.Message -->
9553  <class name="Message" extends="java.lang.Object"
9554    abstract="false"
9555    static="false" final="true" visibility="public"
9556    deprecated="not deprecated">
9557    <implements name="java.io.Serializable"/>
9558    <implements name="com.google.inject.spi.Element"/>
9559    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
9560      static="false" final="false" visibility="public"
9561      deprecated="not deprecated">
9562      <doc>
9563      <![CDATA[@since 2.0]]>
9564      </doc>
9565    </constructor>
9566    <constructor name="Message" type="java.lang.String, java.lang.Throwable"
9567      static="false" final="false" visibility="public"
9568      deprecated="not deprecated">
9569      <doc>
9570      <![CDATA[@since 4.0]]>
9571      </doc>
9572    </constructor>
9573    <constructor name="Message" type="java.lang.Object, java.lang.String"
9574      static="false" final="false" visibility="public"
9575      deprecated="not deprecated">
9576    </constructor>
9577    <constructor name="Message" type="java.lang.String"
9578      static="false" final="false" visibility="public"
9579      deprecated="not deprecated">
9580    </constructor>
9581    <method name="getSource" return="java.lang.String"
9582      abstract="false" native="false" synchronized="false"
9583      static="false" final="false" visibility="public"
9584      deprecated="not deprecated">
9585    </method>
9586    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
9587      abstract="false" native="false" synchronized="false"
9588      static="false" final="false" visibility="public"
9589      deprecated="not deprecated">
9590      <doc>
9591      <![CDATA[@since 2.0]]>
9592      </doc>
9593    </method>
9594    <method name="getMessage" return="java.lang.String"
9595      abstract="false" native="false" synchronized="false"
9596      static="false" final="false" visibility="public"
9597      deprecated="not deprecated">
9598      <doc>
9599      <![CDATA[Gets the error message text.]]>
9600      </doc>
9601    </method>
9602    <method name="acceptVisitor" return="T"
9603      abstract="false" native="false" synchronized="false"
9604      static="false" final="false" visibility="public"
9605      deprecated="not deprecated">
9606      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9607      <doc>
9608      <![CDATA[@since 2.0]]>
9609      </doc>
9610    </method>
9611    <method name="getCause" return="java.lang.Throwable"
9612      abstract="false" native="false" synchronized="false"
9613      static="false" final="false" visibility="public"
9614      deprecated="not deprecated">
9615      <doc>
9616      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
9617 message was not caused by a throwable.
9618
9619 @since 2.0]]>
9620      </doc>
9621    </method>
9622    <method name="toString" return="java.lang.String"
9623      abstract="false" native="false" synchronized="false"
9624      static="false" final="false" visibility="public"
9625      deprecated="not deprecated">
9626    </method>
9627    <method name="hashCode" return="int"
9628      abstract="false" native="false" synchronized="false"
9629      static="false" final="false" visibility="public"
9630      deprecated="not deprecated">
9631    </method>
9632    <method name="equals" return="boolean"
9633      abstract="false" native="false" synchronized="false"
9634      static="false" final="false" visibility="public"
9635      deprecated="not deprecated">
9636      <param name="o" type="java.lang.Object"/>
9637    </method>
9638    <method name="applyTo"
9639      abstract="false" native="false" synchronized="false"
9640      static="false" final="false" visibility="public"
9641      deprecated="not deprecated">
9642      <param name="binder" type="com.google.inject.Binder"/>
9643      <doc>
9644      <![CDATA[@since 2.0]]>
9645      </doc>
9646    </method>
9647    <doc>
9648    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
9649 Guice and its extensions. Messages can be created explicitly in a module using {@link
9650 com.google.inject.Binder#addError(Throwable) addError()} statements:
9651 <pre>
9652     try {
9653       bindPropertiesFromFile();
9654     } catch (IOException e) {
9655       addError(e);
9656     }</pre>
9657
9658 @author crazybob@google.com (Bob Lee)]]>
9659    </doc>
9660  </class>
9661  <!-- end class com.google.inject.spi.Message -->
9662  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9663  <class name="ModuleAnnotatedMethodScanner" extends="java.lang.Object"
9664    abstract="true"
9665    static="false" final="false" visibility="public"
9666    deprecated="not deprecated">
9667    <constructor name="ModuleAnnotatedMethodScanner"
9668      static="false" final="false" visibility="public"
9669      deprecated="not deprecated">
9670    </constructor>
9671    <method name="annotationClasses" return="java.util.Set&lt;? extends java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&gt;"
9672      abstract="true" native="false" synchronized="false"
9673      static="false" final="false" visibility="public"
9674      deprecated="not deprecated">
9675      <doc>
9676      <![CDATA[Returns the annotations this should scan for. Every method in the module that has one of these
9677 annotations will create a Provider binding, with the return value of the binding being what's
9678 provided and the parameters of the method being dependencies of the provider.]]>
9679      </doc>
9680    </method>
9681    <method name="prepareMethod" return="com.google.inject.Key&lt;T&gt;"
9682      abstract="true" native="false" synchronized="false"
9683      static="false" final="false" visibility="public"
9684      deprecated="not deprecated">
9685      <param name="binder" type="com.google.inject.Binder"/>
9686      <param name="annotation" type="java.lang.annotation.Annotation"/>
9687      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9688      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
9689      <doc>
9690      <![CDATA[Prepares a method for binding. This {@code key} parameter is the key discovered from looking at
9691 the binding annotation and return value of the method. Implementations can modify the key to
9692 instead bind to another key. For example, Multibinder may want to change
9693 {@code @SetProvides String provideFoo()} to bind into a unique Key within the multibinder
9694 instead of binding {@code String}.
9695
9696 <p>The injection point and annotation are provided in case the implementation wants to set the
9697 key based on the property of the annotation or if any additional preparation is needed for any
9698 of the dependencies. The annotation is guaranteed to be an instance of one the classes returned
9699 by {@link #annotationClasses}.]]>
9700      </doc>
9701    </method>
9702    <doc>
9703    <![CDATA[Allows extensions to scan modules for annotated methods and bind those methods
9704 as providers, similar to {@code @Provides} methods.
9705
9706 @since 4.0]]>
9707    </doc>
9708  </class>
9709  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9710  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9711  <class name="ModuleAnnotatedMethodScannerBinding" extends="java.lang.Object"
9712    abstract="false"
9713    static="false" final="true" visibility="public"
9714    deprecated="not deprecated">
9715    <implements name="com.google.inject.spi.Element"/>
9716    <constructor name="ModuleAnnotatedMethodScannerBinding" type="java.lang.Object, com.google.inject.spi.ModuleAnnotatedMethodScanner"
9717      static="false" final="false" visibility="public"
9718      deprecated="not deprecated">
9719    </constructor>
9720    <method name="getSource" return="java.lang.Object"
9721      abstract="false" native="false" synchronized="false"
9722      static="false" final="false" visibility="public"
9723      deprecated="not deprecated">
9724    </method>
9725    <method name="getScanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
9726      abstract="false" native="false" synchronized="false"
9727      static="false" final="false" visibility="public"
9728      deprecated="not deprecated">
9729    </method>
9730    <method name="acceptVisitor" return="T"
9731      abstract="false" native="false" synchronized="false"
9732      static="false" final="false" visibility="public"
9733      deprecated="not deprecated">
9734      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9735    </method>
9736    <method name="applyTo"
9737      abstract="false" native="false" synchronized="false"
9738      static="false" final="false" visibility="public"
9739      deprecated="not deprecated">
9740      <param name="binder" type="com.google.inject.Binder"/>
9741    </method>
9742    <method name="toString" return="java.lang.String"
9743      abstract="false" native="false" synchronized="false"
9744      static="false" final="false" visibility="public"
9745      deprecated="not deprecated">
9746    </method>
9747    <doc>
9748    <![CDATA[Represents a call to {@link Binder#scanModulesForAnnotatedMethods} in a module.
9749
9750 @author sameb@google.com (Sam Berlin)
9751 @since 4.0]]>
9752    </doc>
9753  </class>
9754  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9755  <!-- start interface com.google.inject.spi.PrivateElements -->
9756  <interface name="PrivateElements"    abstract="true"
9757    static="false" final="false" visibility="public"
9758    deprecated="not deprecated">
9759    <implements name="com.google.inject.spi.Element"/>
9760    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
9761      abstract="true" native="false" synchronized="false"
9762      static="false" final="false" visibility="public"
9763      deprecated="not deprecated">
9764      <doc>
9765      <![CDATA[Returns the configuration information in this private environment.]]>
9766      </doc>
9767    </method>
9768    <method name="getInjector" return="com.google.inject.Injector"
9769      abstract="true" native="false" synchronized="false"
9770      static="false" final="false" visibility="public"
9771      deprecated="not deprecated">
9772      <doc>
9773      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
9774 been used to create an injector.]]>
9775      </doc>
9776    </method>
9777    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
9778      abstract="true" native="false" synchronized="false"
9779      static="false" final="false" visibility="public"
9780      deprecated="not deprecated">
9781      <doc>
9782      <![CDATA[Returns the unique exposed keys for these private elements.]]>
9783      </doc>
9784    </method>
9785    <method name="getExposedSource" return="java.lang.Object"
9786      abstract="true" native="false" synchronized="false"
9787      static="false" final="false" visibility="public"
9788      deprecated="not deprecated">
9789      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
9790      <doc>
9791      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
9792 exposed. Used by Guice in the production of descriptive error messages.
9793
9794 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
9795 example. Tools should simply call {@code toString()} on the source object if the type is
9796 unfamiliar.
9797
9798 @param key one of the keys exposed by this module.]]>
9799      </doc>
9800    </method>
9801    <doc>
9802    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
9803 default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
9804
9805 @author jessewilson@google.com (Jesse Wilson)
9806 @since 2.0]]>
9807    </doc>
9808  </interface>
9809  <!-- end interface com.google.inject.spi.PrivateElements -->
9810  <!-- start interface com.google.inject.spi.ProviderBinding -->
9811  <interface name="ProviderBinding"    abstract="true"
9812    static="false" final="false" visibility="public"
9813    deprecated="not deprecated">
9814    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9815    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
9816      abstract="true" native="false" synchronized="false"
9817      static="false" final="false" visibility="public"
9818      deprecated="not deprecated">
9819      <doc>
9820      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
9821 can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
9822 Injector.getBinding(providedKey)}]]>
9823      </doc>
9824    </method>
9825    <doc>
9826    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
9827 is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
9828
9829 @author jessewilson@google.com (Jesse Wilson)
9830 @since 2.0]]>
9831    </doc>
9832  </interface>
9833  <!-- end interface com.google.inject.spi.ProviderBinding -->
9834  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
9835  <interface name="ProviderInstanceBinding"    abstract="true"
9836    static="false" final="false" visibility="public"
9837    deprecated="not deprecated">
9838    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9839    <implements name="com.google.inject.spi.HasDependencies"/>
9840    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
9841      abstract="true" native="false" synchronized="false"
9842      static="false" final="false" visibility="public"
9843      deprecated="Use {@link #getUserSuppliedProvider} instead.">
9844      <doc>
9845      <![CDATA[If the user supplied a JSR330 binding, then this will wrap that one. To always return the
9846 user-supplied provider, use {@link #getUserSuppliedProvider}.
9847
9848 @deprecated Use {@link #getUserSuppliedProvider} instead.]]>
9849      </doc>
9850    </method>
9851    <method name="getUserSuppliedProvider" return="javax.inject.Provider&lt;? extends T&gt;"
9852      abstract="true" native="false" synchronized="false"
9853      static="false" final="false" visibility="public"
9854      deprecated="not deprecated">
9855      <doc>
9856      <![CDATA[Returns the user-supplied, unscoped provider.
9857 @since 4.0]]>
9858      </doc>
9859    </method>
9860    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9861      abstract="true" native="false" synchronized="false"
9862      static="false" final="false" visibility="public"
9863      deprecated="not deprecated">
9864      <doc>
9865      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
9866 time only.
9867
9868 @return a possibly empty set]]>
9869      </doc>
9870    </method>
9871    <doc>
9872    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
9873 injections.
9874
9875 @author jessewilson@google.com (Jesse Wilson)
9876 @since 2.0]]>
9877    </doc>
9878  </interface>
9879  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
9880  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
9881  <interface name="ProviderKeyBinding"    abstract="true"
9882    static="false" final="false" visibility="public"
9883    deprecated="not deprecated">
9884    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9885    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
9886      abstract="true" native="false" synchronized="false"
9887      static="false" final="false" visibility="public"
9888      deprecated="not deprecated">
9889      <doc>
9890      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
9891 injector using {@link com.google.inject.Injector#getBinding(Key)
9892 Injector.getBinding(providerKey)}]]>
9893      </doc>
9894    </method>
9895    <doc>
9896    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
9897 provider's {@code get} method is invoked.
9898
9899 @author jessewilson@google.com (Jesse Wilson)
9900 @since 2.0]]>
9901    </doc>
9902  </interface>
9903  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
9904  <!-- start class com.google.inject.spi.ProviderLookup -->
9905  <class name="ProviderLookup" extends="java.lang.Object"
9906    abstract="false"
9907    static="false" final="true" visibility="public"
9908    deprecated="not deprecated">
9909    <implements name="com.google.inject.spi.Element"/>
9910    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
9911      static="false" final="false" visibility="public"
9912      deprecated="not deprecated">
9913    </constructor>
9914    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.spi.Dependency&lt;T&gt;"
9915      static="false" final="false" visibility="public"
9916      deprecated="not deprecated">
9917      <doc>
9918      <![CDATA[@since 4.0]]>
9919      </doc>
9920    </constructor>
9921    <method name="getSource" return="java.lang.Object"
9922      abstract="false" native="false" synchronized="false"
9923      static="false" final="false" visibility="public"
9924      deprecated="not deprecated">
9925    </method>
9926    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
9927      abstract="false" native="false" synchronized="false"
9928      static="false" final="false" visibility="public"
9929      deprecated="not deprecated">
9930    </method>
9931    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;T&gt;"
9932      abstract="false" native="false" synchronized="false"
9933      static="false" final="false" visibility="public"
9934      deprecated="not deprecated">
9935      <doc>
9936      <![CDATA[@since 4.0]]>
9937      </doc>
9938    </method>
9939    <method name="acceptVisitor" return="T"
9940      abstract="false" native="false" synchronized="false"
9941      static="false" final="false" visibility="public"
9942      deprecated="not deprecated">
9943      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9944    </method>
9945    <method name="initializeDelegate"
9946      abstract="false" native="false" synchronized="false"
9947      static="false" final="false" visibility="public"
9948      deprecated="not deprecated">
9949      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
9950      <doc>
9951      <![CDATA[Sets the actual provider.
9952
9953 @throws IllegalStateException if the delegate is already set]]>
9954      </doc>
9955    </method>
9956    <method name="applyTo"
9957      abstract="false" native="false" synchronized="false"
9958      static="false" final="false" visibility="public"
9959      deprecated="not deprecated">
9960      <param name="binder" type="com.google.inject.Binder"/>
9961    </method>
9962    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
9963      abstract="false" native="false" synchronized="false"
9964      static="false" final="false" visibility="public"
9965      deprecated="not deprecated">
9966      <doc>
9967      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
9968 will be initialized when this element is processed, or otherwise used to create an injector.]]>
9969      </doc>
9970    </method>
9971    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9972      abstract="false" native="false" synchronized="false"
9973      static="false" final="false" visibility="public"
9974      deprecated="not deprecated">
9975      <doc>
9976      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
9977 which usually happens when the injector is created. The provider will throw an {@code
9978 IllegalStateException} if you try to use it beforehand.]]>
9979      </doc>
9980    </method>
9981    <doc>
9982    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
9983 {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
9984 <pre>
9985     Provider&lt;PaymentService&gt; paymentServiceProvider
9986         = getProvider(PaymentService.class);</pre>
9987
9988 @author jessewilson@google.com (Jesse Wilson)
9989 @since 2.0]]>
9990    </doc>
9991  </class>
9992  <!-- end class com.google.inject.spi.ProviderLookup -->
9993  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
9994  <interface name="ProviderWithDependencies"    abstract="true"
9995    static="false" final="false" visibility="public"
9996    deprecated="not deprecated">
9997    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9998    <implements name="com.google.inject.spi.HasDependencies"/>
9999    <doc>
10000    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
10001 aren't specified in injections, this interface should be used to expose all dependencies.
10002
10003 @since 2.0]]>
10004    </doc>
10005  </interface>
10006  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
10007  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10008  <interface name="ProviderWithExtensionVisitor"    abstract="true"
10009    static="false" final="false" visibility="public"
10010    deprecated="not deprecated">
10011    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10012    <method name="acceptExtensionVisitor" return="V"
10013      abstract="true" native="false" synchronized="false"
10014      static="false" final="false" visibility="public"
10015      deprecated="not deprecated">
10016      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
10017      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
10018      <doc>
10019      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
10020 extension visitor, and if so, visit it using that method. If the visitor is
10021 not an instance of the custom extension visitor, this method <b>MUST</b>
10022 call visitor.visit(binding).
10023 <p>
10024 Due to issues with generics, the type parameters of this method do not
10025 relate to the type of the provider. In practice, the 'B' type will always
10026 be a supertype of 'T'.]]>
10027      </doc>
10028    </method>
10029    <doc>
10030    <![CDATA[A Provider that is part of an extension which supports a custom
10031 BindingTargetVisitor.
10032 <p>
10033 When an extension binds a provider instance, the provider can implement this
10034 interface to allow users using the
10035 {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
10036 custom visitor designed for that extension. A typical implementation within
10037 the extension would look like
10038 <pre>
10039 &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
10040   if(visitor instanceof MyCustomExtensionVisitor) {
10041     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
10042   } else {
10043     return visitor.visit(binding);
10044   }
10045 }</pre>
10046 'MyCustomExtensionVisitor' in the example above would be an interface the
10047 extension provides that users can implement in order to be notified of custom
10048 extension information. These visitor interfaces must extend from
10049 BindingTargetVisitor.
10050
10051 @since 3.0
10052 @author sameb@google.com (Sam Berlin)]]>
10053    </doc>
10054  </interface>
10055  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10056  <!-- start interface com.google.inject.spi.ProvidesMethodBinding -->
10057  <interface name="ProvidesMethodBinding"    abstract="true"
10058    static="false" final="false" visibility="public"
10059    deprecated="not deprecated">
10060    <implements name="com.google.inject.spi.HasDependencies"/>
10061    <method name="getMethod" return="java.lang.reflect.Method"
10062      abstract="true" native="false" synchronized="false"
10063      static="false" final="false" visibility="public"
10064      deprecated="not deprecated">
10065      <doc>
10066      <![CDATA[Returns the method this binding uses.]]>
10067      </doc>
10068    </method>
10069    <method name="getEnclosingInstance" return="java.lang.Object"
10070      abstract="true" native="false" synchronized="false"
10071      static="false" final="false" visibility="public"
10072      deprecated="not deprecated">
10073      <doc>
10074      <![CDATA[Returns the instance of the object the method is defined in.]]>
10075      </doc>
10076    </method>
10077    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10078      abstract="true" native="false" synchronized="false"
10079      static="false" final="false" visibility="public"
10080      deprecated="not deprecated">
10081      <doc>
10082      <![CDATA[Returns the key of the binding.]]>
10083      </doc>
10084    </method>
10085    <method name="getAnnotation" return="java.lang.annotation.Annotation"
10086      abstract="true" native="false" synchronized="false"
10087      static="false" final="false" visibility="public"
10088      deprecated="not deprecated">
10089      <doc>
10090      <![CDATA[Returns the annotation that caused this binding to be created. For {@code @Provides} methods,
10091 this is an instance of the {@code @Provides} annotation. For bindings from
10092 {@link ModuleAnnotatedMethodScanner}, this is the annotation that caused the scanner to produce
10093 the binding.]]>
10094      </doc>
10095    </method>
10096    <doc>
10097    <![CDATA[An {@literal @}{@link Provides} binding or binding produced by a
10098 {@link ModuleAnnotatedMethodScanner}.
10099
10100 @since 4.0
10101 @author sameb@google.com (Sam Berlin)]]>
10102    </doc>
10103  </interface>
10104  <!-- end interface com.google.inject.spi.ProvidesMethodBinding -->
10105  <!-- start interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10106  <interface name="ProvidesMethodTargetVisitor"    abstract="true"
10107    static="false" final="false" visibility="public"
10108    deprecated="not deprecated">
10109    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
10110    <method name="visit" return="V"
10111      abstract="true" native="false" synchronized="false"
10112      static="false" final="false" visibility="public"
10113      deprecated="not deprecated">
10114      <param name="providesMethodBinding" type="com.google.inject.spi.ProvidesMethodBinding&lt;? extends T&gt;"/>
10115      <doc>
10116      <![CDATA[Visits an {@link ProvidesMethodBinding} created with an {@literal @}{@link Provides} method.]]>
10117      </doc>
10118    </method>
10119    <doc>
10120    <![CDATA[A visitor for the {@literal @}{@link Provides} bindings.
10121 <p>
10122 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
10123 {@code @Provides} will be visited through this interface.
10124
10125 @since 4.0
10126 @author sameb@google.com (Sam Berlin)]]>
10127    </doc>
10128  </interface>
10129  <!-- end interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10130  <!-- start interface com.google.inject.spi.ProvisionListener -->
10131  <interface name="ProvisionListener"    abstract="true"
10132    static="false" final="false" visibility="public"
10133    deprecated="not deprecated">
10134    <method name="onProvision"
10135      abstract="true" native="false" synchronized="false"
10136      static="false" final="false" visibility="public"
10137      deprecated="not deprecated">
10138      <param name="provision" type="com.google.inject.spi.ProvisionListener.ProvisionInvocation&lt;T&gt;"/>
10139      <doc>
10140      <![CDATA[Invoked by Guice when an object requires provisioning. Provisioning occurs
10141 when Guice locates and injects the dependencies for a binding. For types
10142 bound to a Provider, provisioning encapsulates the {@link Provider#get}
10143 method. For toInstance or constant bindings, provisioning encapsulates
10144 the injecting of {@literal @}{@code Inject}ed fields or methods.
10145 For other types, provisioning encapsulates the construction of the
10146 object. If a type is bound within a {@link Scope}, provisioning depends on
10147 the scope. Types bound in Singleton scope will only be provisioned once.
10148 Types bound in no scope will be provisioned every time they are injected.
10149 Other scopes define their own behavior for provisioning.
10150 <p>
10151 To perform the provision, call {@link ProvisionInvocation#provision()}.
10152 If you do not explicitly call provision, it will be automatically done after
10153 this method returns.  It is an error to call provision more than once.]]>
10154      </doc>
10155    </method>
10156    <doc>
10157    <![CDATA[Listens for provisioning of objects. Useful for gathering timing information
10158 about provisioning, post-provision initialization, and more.
10159
10160 @author sameb@google.com (Sam Berlin)
10161 @since 4.0]]>
10162    </doc>
10163  </interface>
10164  <!-- end interface com.google.inject.spi.ProvisionListener -->
10165  <!-- start class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10166  <class name="ProvisionListener.ProvisionInvocation" extends="java.lang.Object"
10167    abstract="true"
10168    static="true" final="false" visibility="public"
10169    deprecated="not deprecated">
10170    <constructor name="ProvisionInvocation"
10171      static="false" final="false" visibility="public"
10172      deprecated="not deprecated">
10173    </constructor>
10174    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
10175      abstract="true" native="false" synchronized="false"
10176      static="false" final="false" visibility="public"
10177      deprecated="not deprecated">
10178      <doc>
10179      <![CDATA[Returns the Binding this is provisioning.
10180 <p>
10181 You must not call {@link Provider#get()} on the provider returned by
10182 {@link Binding#getProvider}, otherwise you will get confusing error messages.]]>
10183      </doc>
10184    </method>
10185    <method name="provision" return="T"
10186      abstract="true" native="false" synchronized="false"
10187      static="false" final="false" visibility="public"
10188      deprecated="not deprecated">
10189      <doc>
10190      <![CDATA[Performs the provision, returning the object provisioned.]]>
10191      </doc>
10192    </method>
10193    <method name="getDependencyChain" return="java.util.List&lt;com.google.inject.spi.DependencyAndSource&gt;"
10194      abstract="true" native="false" synchronized="false"
10195      static="false" final="false" visibility="public"
10196      deprecated="not deprecated">
10197      <doc>
10198      <![CDATA[Returns the dependency chain that led to this object being provisioned.]]>
10199      </doc>
10200    </method>
10201    <doc>
10202    <![CDATA[Encapsulates a single act of provisioning.
10203
10204 @since 4.0]]>
10205    </doc>
10206  </class>
10207  <!-- end class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10208  <!-- start class com.google.inject.spi.ProvisionListenerBinding -->
10209  <class name="ProvisionListenerBinding" extends="java.lang.Object"
10210    abstract="false"
10211    static="false" final="true" visibility="public"
10212    deprecated="not deprecated">
10213    <implements name="com.google.inject.spi.Element"/>
10214    <method name="getListeners" return="java.util.List&lt;com.google.inject.spi.ProvisionListener&gt;"
10215      abstract="false" native="false" synchronized="false"
10216      static="false" final="false" visibility="public"
10217      deprecated="not deprecated">
10218      <doc>
10219      <![CDATA[Returns the registered listeners.]]>
10220      </doc>
10221    </method>
10222    <method name="getBindingMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"
10223      abstract="false" native="false" synchronized="false"
10224      static="false" final="false" visibility="public"
10225      deprecated="not deprecated">
10226      <doc>
10227      <![CDATA[Returns the binding matcher which chooses which bindings the listener should be notified of.]]>
10228      </doc>
10229    </method>
10230    <method name="getSource" return="java.lang.Object"
10231      abstract="false" native="false" synchronized="false"
10232      static="false" final="false" visibility="public"
10233      deprecated="not deprecated">
10234    </method>
10235    <method name="acceptVisitor" return="R"
10236      abstract="false" native="false" synchronized="false"
10237      static="false" final="false" visibility="public"
10238      deprecated="not deprecated">
10239      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
10240    </method>
10241    <method name="applyTo"
10242      abstract="false" native="false" synchronized="false"
10243      static="false" final="false" visibility="public"
10244      deprecated="not deprecated">
10245      <param name="binder" type="com.google.inject.Binder"/>
10246    </method>
10247    <doc>
10248    <![CDATA[Binds keys (picked using a Matcher) to a provision listener. Listeners are created explicitly in
10249 a module using {@link Binder#bindListener(Matcher, ProvisionListener...)} statements:
10250
10251 @author sameb@google.com (Sam Berlin)
10252 @since 4.0]]>
10253    </doc>
10254  </class>
10255  <!-- end class com.google.inject.spi.ProvisionListenerBinding -->
10256  <!-- start class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10257  <class name="RequireAtInjectOnConstructorsOption" extends="java.lang.Object"
10258    abstract="false"
10259    static="false" final="true" visibility="public"
10260    deprecated="not deprecated">
10261    <implements name="com.google.inject.spi.Element"/>
10262    <method name="getSource" return="java.lang.Object"
10263      abstract="false" native="false" synchronized="false"
10264      static="false" final="false" visibility="public"
10265      deprecated="not deprecated">
10266    </method>
10267    <method name="applyTo"
10268      abstract="false" native="false" synchronized="false"
10269      static="false" final="false" visibility="public"
10270      deprecated="not deprecated">
10271      <param name="binder" type="com.google.inject.Binder"/>
10272    </method>
10273    <method name="acceptVisitor" return="T"
10274      abstract="false" native="false" synchronized="false"
10275      static="false" final="false" visibility="public"
10276      deprecated="not deprecated">
10277      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10278    </method>
10279    <doc>
10280    <![CDATA[A request to require explicit {@literal @}{@link Inject} annotations on constructors.
10281
10282 @author sameb@google.com (Sam Berlin)
10283 @since 4.0]]>
10284    </doc>
10285  </class>
10286  <!-- end class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10287  <!-- start class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10288  <class name="RequireExactBindingAnnotationsOption" extends="java.lang.Object"
10289    abstract="false"
10290    static="false" final="true" visibility="public"
10291    deprecated="not deprecated">
10292    <implements name="com.google.inject.spi.Element"/>
10293    <method name="getSource" return="java.lang.Object"
10294      abstract="false" native="false" synchronized="false"
10295      static="false" final="false" visibility="public"
10296      deprecated="not deprecated">
10297    </method>
10298    <method name="applyTo"
10299      abstract="false" native="false" synchronized="false"
10300      static="false" final="false" visibility="public"
10301      deprecated="not deprecated">
10302      <param name="binder" type="com.google.inject.Binder"/>
10303    </method>
10304    <method name="acceptVisitor" return="T"
10305      abstract="false" native="false" synchronized="false"
10306      static="false" final="false" visibility="public"
10307      deprecated="not deprecated">
10308      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10309    </method>
10310    <doc>
10311    <![CDATA[A request to require exact binding annotations.
10312
10313 @author sameb@google.com (Sam Berlin)
10314 @since 4.0]]>
10315    </doc>
10316  </class>
10317  <!-- end class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10318  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
10319  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
10320    abstract="false"
10321    static="false" final="true" visibility="public"
10322    deprecated="not deprecated">
10323    <implements name="com.google.inject.spi.Element"/>
10324    <method name="getSource" return="java.lang.Object"
10325      abstract="false" native="false" synchronized="false"
10326      static="false" final="false" visibility="public"
10327      deprecated="not deprecated">
10328    </method>
10329    <method name="applyTo"
10330      abstract="false" native="false" synchronized="false"
10331      static="false" final="false" visibility="public"
10332      deprecated="not deprecated">
10333      <param name="binder" type="com.google.inject.Binder"/>
10334    </method>
10335    <method name="acceptVisitor" return="T"
10336      abstract="false" native="false" synchronized="false"
10337      static="false" final="false" visibility="public"
10338      deprecated="not deprecated">
10339      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10340    </method>
10341    <doc>
10342    <![CDATA[A request to require explicit bindings.
10343
10344 @author sameb@google.com (Sam Berlin)
10345 @since 3.0]]>
10346    </doc>
10347  </class>
10348  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
10349  <!-- start class com.google.inject.spi.ScopeBinding -->
10350  <class name="ScopeBinding" extends="java.lang.Object"
10351    abstract="false"
10352    static="false" final="true" visibility="public"
10353    deprecated="not deprecated">
10354    <implements name="com.google.inject.spi.Element"/>
10355    <method name="getSource" return="java.lang.Object"
10356      abstract="false" native="false" synchronized="false"
10357      static="false" final="false" visibility="public"
10358      deprecated="not deprecated">
10359    </method>
10360    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
10361      abstract="false" native="false" synchronized="false"
10362      static="false" final="false" visibility="public"
10363      deprecated="not deprecated">
10364    </method>
10365    <method name="getScope" return="com.google.inject.Scope"
10366      abstract="false" native="false" synchronized="false"
10367      static="false" final="false" visibility="public"
10368      deprecated="not deprecated">
10369    </method>
10370    <method name="acceptVisitor" return="T"
10371      abstract="false" native="false" synchronized="false"
10372      static="false" final="false" visibility="public"
10373      deprecated="not deprecated">
10374      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10375    </method>
10376    <method name="applyTo"
10377      abstract="false" native="false" synchronized="false"
10378      static="false" final="false" visibility="public"
10379      deprecated="not deprecated">
10380      <param name="binder" type="com.google.inject.Binder"/>
10381    </method>
10382    <doc>
10383    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
10384 explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
10385 statements:
10386 <pre>
10387     Scope recordScope = new RecordScope();
10388     bindScope(RecordScoped.class, new RecordScope());</pre>
10389
10390 @author jessewilson@google.com (Jesse Wilson)
10391 @since 2.0]]>
10392    </doc>
10393  </class>
10394  <!-- end class com.google.inject.spi.ScopeBinding -->
10395  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
10396  <class name="StaticInjectionRequest" extends="java.lang.Object"
10397    abstract="false"
10398    static="false" final="true" visibility="public"
10399    deprecated="not deprecated">
10400    <implements name="com.google.inject.spi.Element"/>
10401    <method name="getSource" return="java.lang.Object"
10402      abstract="false" native="false" synchronized="false"
10403      static="false" final="false" visibility="public"
10404      deprecated="not deprecated">
10405    </method>
10406    <method name="getType" return="java.lang.Class&lt;?&gt;"
10407      abstract="false" native="false" synchronized="false"
10408      static="false" final="false" visibility="public"
10409      deprecated="not deprecated">
10410    </method>
10411    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
10412      abstract="false" native="false" synchronized="false"
10413      static="false" final="false" visibility="public"
10414      deprecated="not deprecated">
10415      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
10416      <doc>
10417      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
10418 request.
10419
10420 @return a possibly empty set of injection points. The set has a specified iteration order. All
10421      fields are returned and then all methods. Within the fields, supertype fields are returned
10422      before subtype fields. Similarly, supertype methods are returned before subtype methods.
10423 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
10424      a field with multiple binding annotations. The exception's {@link
10425      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
10426      of the valid injection points.]]>
10427      </doc>
10428    </method>
10429    <method name="applyTo"
10430      abstract="false" native="false" synchronized="false"
10431      static="false" final="false" visibility="public"
10432      deprecated="not deprecated">
10433      <param name="binder" type="com.google.inject.Binder"/>
10434    </method>
10435    <method name="acceptVisitor" return="T"
10436      abstract="false" native="false" synchronized="false"
10437      static="false" final="false" visibility="public"
10438      deprecated="not deprecated">
10439      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10440    </method>
10441    <doc>
10442    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
10443 explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
10444 requestStaticInjection()} statements:
10445 <pre>
10446     requestStaticInjection(MyLegacyService.class);</pre>
10447
10448 @author jessewilson@google.com (Jesse Wilson)
10449 @since 2.0]]>
10450    </doc>
10451  </class>
10452  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
10453  <!-- start class com.google.inject.spi.Toolable -->
10454  <class name="Toolable"    abstract="true"
10455    static="false" final="false" visibility="public"
10456    deprecated="not deprecated">
10457    <implements name="java.lang.annotation.Annotation"/>
10458    <doc>
10459    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
10460 This is typically useful for for extensions to Guice that perform additional validation in an
10461 injected method or field.  This only applies to objects that are already constructed when
10462 bindings are created (ie., something bound using {@link
10463 com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
10464 com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
10465 com.google.inject.Binder#requestInjection requestInjection}.
10466
10467 @author sberlin@gmail.com (Sam Berlin)
10468 @since 3.0]]>
10469    </doc>
10470  </class>
10471  <!-- end class com.google.inject.spi.Toolable -->
10472  <!-- start interface com.google.inject.spi.TypeConverter -->
10473  <interface name="TypeConverter"    abstract="true"
10474    static="false" final="false" visibility="public"
10475    deprecated="not deprecated">
10476    <method name="convert" return="java.lang.Object"
10477      abstract="true" native="false" synchronized="false"
10478      static="false" final="false" visibility="public"
10479      deprecated="not deprecated">
10480      <param name="value" type="java.lang.String"/>
10481      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
10482      <doc>
10483      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
10484      </doc>
10485    </method>
10486    <doc>
10487    <![CDATA[Converts constant string values to a different type.
10488
10489 @author crazybob@google.com (Bob Lee)
10490 @since 2.0]]>
10491    </doc>
10492  </interface>
10493  <!-- end interface com.google.inject.spi.TypeConverter -->
10494  <!-- start class com.google.inject.spi.TypeConverterBinding -->
10495  <class name="TypeConverterBinding" extends="java.lang.Object"
10496    abstract="false"
10497    static="false" final="true" visibility="public"
10498    deprecated="not deprecated">
10499    <implements name="com.google.inject.spi.Element"/>
10500    <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"
10501      static="false" final="false" visibility="public"
10502      deprecated="not deprecated">
10503      <doc>
10504      <![CDATA[@since 3.0]]>
10505      </doc>
10506    </constructor>
10507    <method name="getSource" return="java.lang.Object"
10508      abstract="false" native="false" synchronized="false"
10509      static="false" final="false" visibility="public"
10510      deprecated="not deprecated">
10511    </method>
10512    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10513      abstract="false" native="false" synchronized="false"
10514      static="false" final="false" visibility="public"
10515      deprecated="not deprecated">
10516    </method>
10517    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
10518      abstract="false" native="false" synchronized="false"
10519      static="false" final="false" visibility="public"
10520      deprecated="not deprecated">
10521    </method>
10522    <method name="acceptVisitor" return="T"
10523      abstract="false" native="false" synchronized="false"
10524      static="false" final="false" visibility="public"
10525      deprecated="not deprecated">
10526      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10527    </method>
10528    <method name="applyTo"
10529      abstract="false" native="false" synchronized="false"
10530      static="false" final="false" visibility="public"
10531      deprecated="not deprecated">
10532      <param name="binder" type="com.google.inject.Binder"/>
10533    </method>
10534    <method name="toString" return="java.lang.String"
10535      abstract="false" native="false" synchronized="false"
10536      static="false" final="false" visibility="public"
10537      deprecated="not deprecated">
10538    </method>
10539    <doc>
10540    <![CDATA[Registration of type converters for matching target types. Instances are created
10541 explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
10542 TypeConverter) convertToTypes()} statements:
10543 <pre>
10544     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
10545
10546 @author jessewilson@google.com (Jesse Wilson)
10547 @since 2.0]]>
10548    </doc>
10549  </class>
10550  <!-- end class com.google.inject.spi.TypeConverterBinding -->
10551  <!-- start interface com.google.inject.spi.TypeEncounter -->
10552  <interface name="TypeEncounter"    abstract="true"
10553    static="false" final="false" visibility="public"
10554    deprecated="not deprecated">
10555    <method name="addError"
10556      abstract="true" native="false" synchronized="false"
10557      static="false" final="false" visibility="public"
10558      deprecated="not deprecated">
10559      <param name="message" type="java.lang.String"/>
10560      <param name="arguments" type="java.lang.Object[]"/>
10561      <doc>
10562      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
10563 time. Unlike throwing an exception, this enable us to continue configuring the Injector and
10564 discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
10565 into the message.]]>
10566      </doc>
10567    </method>
10568    <method name="addError"
10569      abstract="true" native="false" synchronized="false"
10570      static="false" final="false" visibility="public"
10571      deprecated="not deprecated">
10572      <param name="t" type="java.lang.Throwable"/>
10573      <doc>
10574      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
10575 message of which will be presented to the user at a later time. If your type listener calls
10576 something that you worry may fail, you should catch the exception and pass it to this method.]]>
10577      </doc>
10578    </method>
10579    <method name="addError"
10580      abstract="true" native="false" synchronized="false"
10581      static="false" final="false" visibility="public"
10582      deprecated="not deprecated">
10583      <param name="message" type="com.google.inject.spi.Message"/>
10584      <doc>
10585      <![CDATA[Records an error message to be presented to the user at a later time.]]>
10586      </doc>
10587    </method>
10588    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10589      abstract="true" native="false" synchronized="false"
10590      static="false" final="false" visibility="public"
10591      deprecated="not deprecated">
10592      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
10593      <doc>
10594      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
10595 provider will not be valid until the injector has been created. The provider will throw an
10596 {@code IllegalStateException} if you try to use it beforehand.]]>
10597      </doc>
10598    </method>
10599    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10600      abstract="true" native="false" synchronized="false"
10601      static="false" final="false" visibility="public"
10602      deprecated="not deprecated">
10603      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10604      <doc>
10605      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
10606 provider will not be valid until the injector has been created. The provider will throw an
10607 {@code IllegalStateException} if you try to use it beforehand.]]>
10608      </doc>
10609    </method>
10610    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10611      abstract="true" native="false" synchronized="false"
10612      static="false" final="false" visibility="public"
10613      deprecated="not deprecated">
10614      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
10615      <doc>
10616      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10617 of the given type {@code T}. The returned members injector will not be valid until the main
10618 injector has been created. The members injector will throw an {@code IllegalStateException}
10619 if you try to use it beforehand.
10620
10621 @param typeLiteral type to get members injector for]]>
10622      </doc>
10623    </method>
10624    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10625      abstract="true" native="false" synchronized="false"
10626      static="false" final="false" visibility="public"
10627      deprecated="not deprecated">
10628      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10629      <doc>
10630      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10631 of the given type {@code T}. The returned members injector will not be valid until the main
10632 injector has been created. The members injector will throw an {@code IllegalStateException}
10633 if you try to use it beforehand.
10634
10635 @param type type to get members injector for]]>
10636      </doc>
10637    </method>
10638    <method name="register"
10639      abstract="true" native="false" synchronized="false"
10640      static="false" final="false" visibility="public"
10641      deprecated="not deprecated">
10642      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
10643      <doc>
10644      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
10645 performed its own injections on an instance of {@code I}.]]>
10646      </doc>
10647    </method>
10648    <method name="register"
10649      abstract="true" native="false" synchronized="false"
10650      static="false" final="false" visibility="public"
10651      deprecated="not deprecated">
10652      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
10653      <doc>
10654      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
10655 injections have been performed on an instance of {@code I}.]]>
10656      </doc>
10657    </method>
10658    <method name="bindInterceptor"
10659      abstract="true" native="false" synchronized="false"
10660      static="false" final="false" visibility="public"
10661      deprecated="not deprecated">
10662      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
10663      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
10664      <doc>
10665      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
10666 method is eligible for interception if:
10667
10668 <ul>
10669  <li>Guice created the instance the method is on</li>
10670  <li>Neither the enclosing type nor the method is final</li>
10671  <li>And the method is package-private or more accessible</li>
10672 </ul>
10673
10674 @param methodMatcher matches methods the interceptor should apply to. For
10675     example: {@code annotatedWith(Transactional.class)}.
10676 @param interceptors to bind]]>
10677      </doc>
10678    </method>
10679    <doc>
10680    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
10681 listeners and binding method interceptors for injectable type {@code I}. It is an error to use
10682 an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
10683 returned.
10684
10685 @param <I> the injectable type encountered
10686 @since 2.0]]>
10687    </doc>
10688  </interface>
10689  <!-- end interface com.google.inject.spi.TypeEncounter -->
10690  <!-- start interface com.google.inject.spi.TypeListener -->
10691  <interface name="TypeListener"    abstract="true"
10692    static="false" final="false" visibility="public"
10693    deprecated="not deprecated">
10694    <method name="hear"
10695      abstract="true" native="false" synchronized="false"
10696      static="false" final="false" visibility="public"
10697      deprecated="not deprecated">
10698      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
10699      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
10700      <doc>
10701      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
10702 Called during injector creation (or afterwords if Guice encounters a type at run time and
10703 creates a JIT binding).
10704
10705 @param type encountered by Guice
10706 @param encounter context of this encounter, enables reporting errors, registering injection
10707     listeners and binding method interceptors for {@code type}.
10708
10709 @param <I> the injectable type]]>
10710      </doc>
10711    </method>
10712    <doc>
10713    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
10714 one situation but only its methods and fields injected in another, Guice will notify this
10715 listener once.
10716
10717 <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
10718 registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
10719 com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
10720 binding method interceptors}.
10721
10722 @since 2.0]]>
10723    </doc>
10724  </interface>
10725  <!-- end interface com.google.inject.spi.TypeListener -->
10726  <!-- start class com.google.inject.spi.TypeListenerBinding -->
10727  <class name="TypeListenerBinding" extends="java.lang.Object"
10728    abstract="false"
10729    static="false" final="true" visibility="public"
10730    deprecated="not deprecated">
10731    <implements name="com.google.inject.spi.Element"/>
10732    <method name="getListener" return="com.google.inject.spi.TypeListener"
10733      abstract="false" native="false" synchronized="false"
10734      static="false" final="false" visibility="public"
10735      deprecated="not deprecated">
10736      <doc>
10737      <![CDATA[Returns the registered listener.]]>
10738      </doc>
10739    </method>
10740    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10741      abstract="false" native="false" synchronized="false"
10742      static="false" final="false" visibility="public"
10743      deprecated="not deprecated">
10744      <doc>
10745      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
10746      </doc>
10747    </method>
10748    <method name="getSource" return="java.lang.Object"
10749      abstract="false" native="false" synchronized="false"
10750      static="false" final="false" visibility="public"
10751      deprecated="not deprecated">
10752    </method>
10753    <method name="acceptVisitor" return="T"
10754      abstract="false" native="false" synchronized="false"
10755      static="false" final="false" visibility="public"
10756      deprecated="not deprecated">
10757      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10758    </method>
10759    <method name="applyTo"
10760      abstract="false" native="false" synchronized="false"
10761      static="false" final="false" visibility="public"
10762      deprecated="not deprecated">
10763      <param name="binder" type="com.google.inject.Binder"/>
10764    </method>
10765    <doc>
10766    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
10767 a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
10768
10769 <pre>
10770     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
10771
10772 @author jessewilson@google.com (Jesse Wilson)
10773 @since 2.0]]>
10774    </doc>
10775  </class>
10776  <!-- end class com.google.inject.spi.TypeListenerBinding -->
10777  <!-- start interface com.google.inject.spi.UntargettedBinding -->
10778  <interface name="UntargettedBinding"    abstract="true"
10779    static="false" final="false" visibility="public"
10780    deprecated="not deprecated">
10781    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10782    <doc>
10783    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
10784 strategies to resolve injections.
10785
10786 @author jessewilson@google.com (Jesse Wilson)
10787 @since 2.0]]>
10788    </doc>
10789  </interface>
10790  <!-- end interface com.google.inject.spi.UntargettedBinding -->
10791</package>
10792<package name="com.google.inject.spring">
10793  <!-- start class com.google.inject.spring.SpringIntegration -->
10794  <class name="SpringIntegration" extends="java.lang.Object"
10795    abstract="false"
10796    static="false" final="false" visibility="public"
10797    deprecated="not deprecated">
10798    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
10799      abstract="false" native="false" synchronized="false"
10800      static="true" final="false" visibility="public"
10801      deprecated="not deprecated">
10802      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10803      <param name="name" type="java.lang.String"/>
10804      <doc>
10805      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
10806 Expects a binding to {@link
10807 org.springframework.beans.factory.BeanFactory}. Example usage:
10808
10809 <pre>
10810 bind(DataSource.class)
10811   .toProvider(fromSpring(DataSource.class, "dataSource"));
10812 </pre>]]>
10813      </doc>
10814    </method>
10815    <method name="bindAll"
10816      abstract="false" native="false" synchronized="false"
10817      static="true" final="false" visibility="public"
10818      deprecated="not deprecated">
10819      <param name="binder" type="com.google.inject.Binder"/>
10820      <param name="beanFactory" type="org.springframework.beans.factory.ListableBeanFactory"/>
10821      <doc>
10822      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
10823 named "foo", this method creates a binding to the bean's type and
10824 {@code @Named("foo")}.
10825
10826 @see com.google.inject.name.Named
10827 @see com.google.inject.name.Names#named(String)]]>
10828      </doc>
10829    </method>
10830    <doc>
10831    <![CDATA[Integrates Guice with Spring.
10832
10833 @author crazybob@google.com (Bob Lee)]]>
10834    </doc>
10835  </class>
10836  <!-- end class com.google.inject.spring.SpringIntegration -->
10837</package>
10838<package name="com.google.inject.struts2">
10839  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
10840  <class name="GuiceObjectFactory" extends="com.opensymphony.xwork2.ObjectFactory"
10841    abstract="false"
10842    static="false" final="false" visibility="public"
10843    deprecated="Use {@link com.google.inject.struts2.Struts2Factory} instead.">
10844    <constructor name="GuiceObjectFactory"
10845      static="false" final="false" visibility="public"
10846      deprecated="not deprecated">
10847    </constructor>
10848    <method name="isNoArgConstructorRequired" return="boolean"
10849      abstract="false" native="false" synchronized="false"
10850      static="false" final="false" visibility="public"
10851      deprecated="not deprecated">
10852    </method>
10853    <method name="getClassInstance" return="java.lang.Class"
10854      abstract="false" native="false" synchronized="false"
10855      static="false" final="false" visibility="public"
10856      deprecated="not deprecated">
10857      <param name="name" type="java.lang.String"/>
10858      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10859    </method>
10860    <method name="buildBean" return="java.lang.Object"
10861      abstract="false" native="false" synchronized="false"
10862      static="false" final="false" visibility="public"
10863      deprecated="not deprecated">
10864      <param name="clazz" type="java.lang.Class"/>
10865      <param name="extraContext" type="java.util.Map"/>
10866    </method>
10867    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10868      abstract="false" native="false" synchronized="false"
10869      static="false" final="false" visibility="public"
10870      deprecated="not deprecated">
10871      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10872      <param name="interceptorRefParams" type="java.util.Map"/>
10873      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10874    </method>
10875    <doc>
10876    <![CDATA[@deprecated Use {@link com.google.inject.struts2.Struts2Factory} instead.]]>
10877    </doc>
10878  </class>
10879  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
10880  <!-- start class com.google.inject.struts2.Struts2Factory -->
10881  <class name="Struts2Factory" extends="com.opensymphony.xwork2.ObjectFactory"
10882    abstract="false"
10883    static="false" final="false" visibility="public"
10884    deprecated="not deprecated">
10885    <constructor name="Struts2Factory"
10886      static="false" final="false" visibility="public"
10887      deprecated="not deprecated">
10888    </constructor>
10889    <method name="isNoArgConstructorRequired" return="boolean"
10890      abstract="false" native="false" synchronized="false"
10891      static="false" final="false" visibility="public"
10892      deprecated="not deprecated">
10893    </method>
10894    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
10895      abstract="false" native="false" synchronized="false"
10896      static="false" final="false" visibility="public"
10897      deprecated="not deprecated">
10898      <param name="name" type="java.lang.String"/>
10899      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10900    </method>
10901    <method name="buildBean" return="java.lang.Object"
10902      abstract="false" native="false" synchronized="false"
10903      static="false" final="false" visibility="public"
10904      deprecated="not deprecated">
10905      <param name="clazz" type="java.lang.Class"/>
10906      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
10907    </method>
10908    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10909      abstract="false" native="false" synchronized="false"
10910      static="false" final="false" visibility="public"
10911      deprecated="not deprecated">
10912      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10913      <param name="interceptorRefParams" type="java.util.Map"/>
10914      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10915    </method>
10916    <doc>
10917    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
10918 GS2 and fixes several bugs.
10919
10920 @author dhanji@gmail.com
10921 @author benmccann.com]]>
10922    </doc>
10923  </class>
10924  <!-- end class com.google.inject.struts2.Struts2Factory -->
10925  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
10926  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
10927    abstract="false"
10928    static="false" final="false" visibility="public"
10929    deprecated="not deprecated">
10930    <constructor name="Struts2GuicePluginModule"
10931      static="false" final="false" visibility="public"
10932      deprecated="not deprecated">
10933    </constructor>
10934    <method name="configure"
10935      abstract="false" native="false" synchronized="false"
10936      static="false" final="false" visibility="protected"
10937      deprecated="not deprecated">
10938    </method>
10939    <doc>
10940    <![CDATA[Initializes the Struts 2 Guice Plugin. Must be added to the injector returned
10941 by {@link com.google.inject.servlet.GuiceServletContextListener#getInjector}.
10942
10943 @author benmccann.com]]>
10944    </doc>
10945  </class>
10946  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
10947</package>
10948<package name="com.google.inject.testing.fieldbinder">
10949  <!-- start class com.google.inject.testing.fieldbinder.Bind -->
10950  <class name="Bind"    abstract="true"
10951    static="false" final="false" visibility="public"
10952    deprecated="not deprecated">
10953    <implements name="java.lang.annotation.Annotation"/>
10954    <doc>
10955    <![CDATA[Annotation used by {@link BoundFieldModule} to indicate that a field should be bound to its
10956 value using Guice.
10957
10958 @see BoundFieldModule
10959 @author eatnumber1@google.com (Russ Harmon)]]>
10960    </doc>
10961  </class>
10962  <!-- end class com.google.inject.testing.fieldbinder.Bind -->
10963  <!-- start class com.google.inject.testing.fieldbinder.BoundFieldModule -->
10964  <class name="BoundFieldModule" extends="java.lang.Object"
10965    abstract="false"
10966    static="false" final="true" visibility="public"
10967    deprecated="not deprecated">
10968    <implements name="com.google.inject.Module"/>
10969    <method name="of" return="com.google.inject.testing.fieldbinder.BoundFieldModule"
10970      abstract="false" native="false" synchronized="false"
10971      static="true" final="false" visibility="public"
10972      deprecated="not deprecated">
10973      <param name="instance" type="java.lang.Object"/>
10974      <doc>
10975      <![CDATA[Create a BoundFieldModule which binds the {@link Bind} annotated fields of {@code instance}.
10976
10977 @param instance the instance whose fields will be bound.
10978 @return a module which will bind the {@link Bind} annotated fields of {@code instance}.]]>
10979      </doc>
10980    </method>
10981    <method name="configure"
10982      abstract="false" native="false" synchronized="false"
10983      static="false" final="false" visibility="public"
10984      deprecated="not deprecated">
10985      <param name="binder" type="com.google.inject.Binder"/>
10986    </method>
10987    <doc>
10988    <![CDATA[Automatically creates Guice bindings for fields in an object annotated with {@link Bind}.
10989
10990 <p>This module is intended for use in tests to reduce the code needed to bind local fields
10991 (usually mocks) for injection.
10992
10993 <p>The following rules are followed in determining how fields are bound using this module:
10994
10995 <ul>
10996 <li>
10997 For each {@link Bind} annotated field of an object and its superclasses, this module will bind
10998 that field's type to that field's value at injector creation time. This includes both instance
10999 and static fields.
11000 </li>
11001 <li>
11002 If {@link Bind#to} is specified, the field's value will be bound to the class specified by
11003 {@link Bind#to} instead of the field's actual type.
11004 </li>
11005 <li>
11006 If a {@link BindingAnnotation} or {@link javax.inject.Qualifier} is present on the field,
11007 that field will be bound using that annotation via {@link AnnotatedBindingBuilder#annotatedWith}.
11008 For example, {@code bind(Foo.class).annotatedWith(BarAnnotation.class).toInstance(theValue)}.
11009 It is an error to supply more than one {@link BindingAnnotation} or
11010 {@link javax.inject.Qualifier}.
11011 </li>
11012 <li>
11013 If the field is of type {@link Provider}, the field's value will be bound as a {@link Provider}
11014 using {@link LinkedBindingBuilder#toProvider} to the provider's parameterized type. For example,
11015 {@code Provider<Integer>} binds to {@link Integer}. Attempting to bind a non-parameterized
11016 {@link Provider} without a {@link Bind#to} clause is an error.
11017 </li>
11018 </ul>
11019
11020 <p>Example use:
11021 <pre><code>
11022 public class TestFoo {
11023   // bind(new TypeLiteral{@code <List<Object>>}() {}).toInstance(listOfObjects);
11024   {@literal @}Bind private List{@code <Object>} listOfObjects = Lists.of();
11025
11026   // bind(String.class).toProvider(new Provider() { public String get() { return userName; }});
11027   {@literal @}Bind(lazy = true) private String userName;
11028
11029   // bind(SuperClass.class).toInstance(aSubClass);
11030   {@literal @}Bind(to = SuperClass.class) private SubClass aSubClass = new SubClass();
11031
11032   // bind(Object.class).annotatedWith(MyBindingAnnotation.class).toInstance(object2);
11033   {@literal @}Bind
11034   {@literal @}MyBindingAnnotation
11035   private String myString = "hello";
11036
11037   // bind(Object.class).toProvider(myProvider);
11038   {@literal @}Bind private Provider{@code <Object>} myProvider = getProvider();
11039
11040   {@literal @}Before public void setUp() {
11041     Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
11042   }
11043 }
11044 </code></pre>
11045
11046 @see Bind
11047 @author eatnumber1@google.com (Russ Harmon)]]>
11048    </doc>
11049  </class>
11050  <!-- end class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11051</package>
11052<package name="com.google.inject.throwingproviders">
11053  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
11054  <interface name="CheckedProvider"    abstract="true"
11055    static="false" final="false" visibility="public"
11056    deprecated="not deprecated">
11057    <method name="get" return="T"
11058      abstract="true" native="false" synchronized="false"
11059      static="false" final="false" visibility="public"
11060      deprecated="not deprecated">
11061      <exception name="Exception" type="java.lang.Exception"/>
11062    </method>
11063    <doc>
11064    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11065 a checked Exception. Users may not inject {@code T} directly.
11066
11067 <p>This interface must be extended to use application-specific exception types.
11068 Such subinterfaces may not define new methods, but may narrow the exception type.
11069 <pre>
11070 public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
11071   T get() throws CustomExceptionOne, CustomExceptionTwo;
11072 }
11073 </pre>
11074
11075 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11076 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11077 will invoked at most once within each scope.
11078
11079 @since 3.0]]>
11080    </doc>
11081  </interface>
11082  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
11083  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
11084  <class name="CheckedProvides"    abstract="true"
11085    static="false" final="false" visibility="public"
11086    deprecated="not deprecated">
11087    <implements name="java.lang.annotation.Annotation"/>
11088    <doc>
11089    <![CDATA[Annotates methods of a {@link com.google.inject.Module} to create a
11090 {@link CheckedProvider} method binding that can throw exceptions. The
11091 method's return type is bound to a {@link CheckedProvider} that can be
11092 injected. Guice will pass dependencies to the method as parameters. Install
11093 {@literal @}CheckedProvides methods by using
11094 {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
11095 module where the methods are declared.
11096
11097 @author sameb@google.com (Sam Berlin)
11098 @since 3.0]]>
11099    </doc>
11100  </class>
11101  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
11102  <!-- start class com.google.inject.throwingproviders.ThrowingInject -->
11103  <class name="ThrowingInject"    abstract="true"
11104    static="false" final="false" visibility="public"
11105    deprecated="not deprecated">
11106    <implements name="java.lang.annotation.Annotation"/>
11107    <doc>
11108    <![CDATA[A version of {@literal @}{@link Inject} designed for ThrowingProviders.  Use by:
11109 <pre><code>ThrowingProviderBinder.create(binder())
11110    .bind(RemoteProvider.class, Customer.class)
11111    .providing(CustomerImpl.class);
11112 </code></pre>
11113 where CustomerImpl has a constructor annotated with ThrowingInject.
11114
11115 @author sameb@google.com (Sam Berlin)
11116 @since 4.0]]>
11117    </doc>
11118  </class>
11119  <!-- end class com.google.inject.throwingproviders.ThrowingInject -->
11120  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
11121  <interface name="ThrowingProvider"    abstract="true"
11122    static="false" final="false" visibility="public"
11123    deprecated="use {@link CheckedProvider} instead.">
11124    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
11125    <method name="get" return="T"
11126      abstract="true" native="false" synchronized="false"
11127      static="false" final="false" visibility="public"
11128      deprecated="not deprecated">
11129      <exception name="Exception" type="java.lang.Exception"/>
11130    </method>
11131    <doc>
11132    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11133 a checked Exception. Users may not inject {@code T} directly.
11134
11135 <p>This interface must be extended to use application-specific exception types.
11136 Such subinterfaces may not define new methods:
11137 <pre>
11138 public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
11139 </pre>
11140
11141 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11142 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11143 will invoked at most once within each scope.
11144
11145 @author jmourits@google.com (Jerome Mourits)
11146 @author jessewilson@google.com (Jesse Wilson)
11147 @deprecated use {@link CheckedProvider} instead.]]>
11148    </doc>
11149  </interface>
11150  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
11151  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11152  <class name="ThrowingProviderBinder" extends="java.lang.Object"
11153    abstract="false"
11154    static="false" final="false" visibility="public"
11155    deprecated="not deprecated">
11156    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
11157      abstract="false" native="false" synchronized="false"
11158      static="true" final="false" visibility="public"
11159      deprecated="not deprecated">
11160      <param name="binder" type="com.google.inject.Binder"/>
11161    </method>
11162    <method name="forModule" return="com.google.inject.Module"
11163      abstract="false" native="false" synchronized="false"
11164      static="true" final="false" visibility="public"
11165      deprecated="not deprecated">
11166      <param name="module" type="com.google.inject.Module"/>
11167      <doc>
11168      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
11169
11170 @since 3.0]]>
11171      </doc>
11172    </method>
11173    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, ?&gt;"
11174      abstract="false" native="false" synchronized="false"
11175      static="false" final="false" visibility="public"
11176      deprecated="Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.">
11177      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11178      <param name="clazz" type="java.lang.reflect.Type"/>
11179      <doc>
11180      <![CDATA[@deprecated Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.]]>
11181      </doc>
11182    </method>
11183    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11184      abstract="false" native="false" synchronized="false"
11185      static="false" final="false" visibility="public"
11186      deprecated="not deprecated">
11187      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11188      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
11189      <doc>
11190      <![CDATA[@since 4.0]]>
11191      </doc>
11192    </method>
11193    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11194      abstract="false" native="false" synchronized="false"
11195      static="false" final="false" visibility="public"
11196      deprecated="not deprecated">
11197      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11198      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
11199      <doc>
11200      <![CDATA[@since 4.0]]>
11201      </doc>
11202    </method>
11203    <doc>
11204    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
11205
11206 <p>You can use a fluent API and custom providers:
11207 <pre><code>ThrowingProviderBinder.create(binder())
11208    .bind(RemoteProvider.class, Customer.class)
11209    .to(RemoteCustomerProvider.class)
11210    .in(RequestScope.class);
11211 </code></pre>
11212 or, you can use throwing provider methods:
11213 <pre><code>class MyModule extends AbstractModule {
11214   configure() {
11215     ThrowingProviderBinder.install(this, binder());
11216   }
11217
11218   {@literal @}CheckedProvides(RemoteProvider.class)
11219   {@literal @}RequestScope
11220   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
11221     return creator.getCustomerOrThrow();
11222   }
11223 }
11224 </code></pre>
11225 You also can declare that a CheckedProvider construct
11226 a particular class whose constructor throws an exception:
11227 <pre><code>ThrowingProviderBinder.create(binder())
11228    .bind(RemoteProvider.class, Customer.class)
11229    .providing(CustomerImpl.class)
11230    .in(RequestScope.class);
11231 </code></pre>
11232
11233 @author jmourits@google.com (Jerome Mourits)
11234 @author jessewilson@google.com (Jesse Wilson)
11235 @author sameb@google.com (Sam Berlin)]]>
11236    </doc>
11237  </class>
11238  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11239  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11240  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
11241    abstract="false"
11242    static="false" final="false" visibility="public"
11243    deprecated="not deprecated">
11244    <constructor name="SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
11245      static="false" final="false" visibility="public"
11246      deprecated="not deprecated">
11247    </constructor>
11248    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11249      abstract="false" native="false" synchronized="false"
11250      static="false" final="false" visibility="public"
11251      deprecated="not deprecated">
11252      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
11253    </method>
11254    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11255      abstract="false" native="false" synchronized="false"
11256      static="false" final="false" visibility="public"
11257      deprecated="not deprecated">
11258      <param name="annotation" type="java.lang.annotation.Annotation"/>
11259    </method>
11260    <method name="scopeExceptions" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11261      abstract="false" native="false" synchronized="false"
11262      static="false" final="false" visibility="public"
11263      deprecated="not deprecated">
11264      <param name="scopeExceptions" type="boolean"/>
11265      <doc>
11266      <![CDATA[Determines if exceptions should be scoped. By default exceptions are scoped.
11267
11268 @param scopeExceptions whether exceptions should be scoped.
11269 @since 4.0]]>
11270      </doc>
11271    </method>
11272    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11273      abstract="false" native="false" synchronized="false"
11274      static="false" final="false" visibility="public"
11275      deprecated="not deprecated">
11276      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
11277    </method>
11278    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11279      abstract="false" native="false" synchronized="false"
11280      static="false" final="false" visibility="public"
11281      deprecated="not deprecated">
11282      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
11283    </method>
11284    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11285      abstract="false" native="false" synchronized="false"
11286      static="false" final="false" visibility="public"
11287      deprecated="not deprecated">
11288      <param name="cxtorClass" type="java.lang.Class&lt;? extends T&gt;"/>
11289      <doc>
11290      <![CDATA[@since 4.0]]>
11291      </doc>
11292    </method>
11293    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11294      abstract="false" native="false" synchronized="false"
11295      static="false" final="false" visibility="public"
11296      deprecated="not deprecated">
11297      <param name="cxtorLiteral" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
11298      <doc>
11299      <![CDATA[@since 4.0]]>
11300      </doc>
11301    </method>
11302    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11303      abstract="false" native="false" synchronized="false"
11304      static="false" final="false" visibility="public"
11305      deprecated="not deprecated">
11306      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
11307    </method>
11308  </class>
11309  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11310</package>
11311<package name="com.google.inject.tools.jmx">
11312  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11313  <interface name="ManagedBindingMBean"    abstract="true"
11314    static="false" final="false" visibility="public"
11315    deprecated="not deprecated">
11316    <method name="getSource" return="java.lang.String"
11317      abstract="true" native="false" synchronized="false"
11318      static="false" final="false" visibility="public"
11319      deprecated="not deprecated">
11320      <doc>
11321      <![CDATA[Gets the source of this binding.]]>
11322      </doc>
11323    </method>
11324    <method name="getProvider" return="java.lang.String"
11325      abstract="true" native="false" synchronized="false"
11326      static="false" final="false" visibility="public"
11327      deprecated="not deprecated">
11328      <doc>
11329      <![CDATA[Gets the provider to which this binding is bound.]]>
11330      </doc>
11331    </method>
11332    <method name="getKey" return="java.lang.String"
11333      abstract="true" native="false" synchronized="false"
11334      static="false" final="false" visibility="public"
11335      deprecated="not deprecated">
11336      <doc>
11337      <![CDATA[Gets the binding key.]]>
11338      </doc>
11339    </method>
11340    <doc>
11341    <![CDATA[JMX interface to bindings.
11342
11343 @author crazybob@google.com (Bob Lee)]]>
11344    </doc>
11345  </interface>
11346  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11347  <!-- start class com.google.inject.tools.jmx.Manager -->
11348  <class name="Manager" extends="java.lang.Object"
11349    abstract="false"
11350    static="false" final="false" visibility="public"
11351    deprecated="not deprecated">
11352    <constructor name="Manager"
11353      static="false" final="false" visibility="public"
11354      deprecated="not deprecated">
11355    </constructor>
11356    <method name="manage"
11357      abstract="false" native="false" synchronized="false"
11358      static="true" final="false" visibility="public"
11359      deprecated="not deprecated">
11360      <param name="domain" type="java.lang.String"/>
11361      <param name="injector" type="com.google.inject.Injector"/>
11362      <doc>
11363      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
11364 Consider using the name of your root {@link Module} class as the domain.]]>
11365      </doc>
11366    </method>
11367    <method name="manage"
11368      abstract="false" native="false" synchronized="false"
11369      static="true" final="false" visibility="public"
11370      deprecated="not deprecated">
11371      <param name="server" type="javax.management.MBeanServer"/>
11372      <param name="domain" type="java.lang.String"/>
11373      <param name="injector" type="com.google.inject.Injector"/>
11374      <doc>
11375      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
11376 Consider using the name of your root {@link Module} class as the domain.]]>
11377      </doc>
11378    </method>
11379    <method name="main"
11380      abstract="false" native="false" synchronized="false"
11381      static="true" final="false" visibility="public"
11382      deprecated="not deprecated">
11383      <param name="args" type="java.lang.String[]"/>
11384      <exception name="Exception" type="java.lang.Exception"/>
11385      <doc>
11386      <![CDATA[Run with no arguments for usage instructions.]]>
11387      </doc>
11388    </method>
11389    <doc>
11390    <![CDATA[Provides a JMX interface to Guice.
11391
11392 @author crazybob@google.com (Bob Lee)]]>
11393    </doc>
11394  </class>
11395  <!-- end class com.google.inject.tools.jmx.Manager -->
11396</package>
11397<package name="com.google.inject.util">
11398  <!-- start class com.google.inject.util.Modules -->
11399  <class name="Modules" extends="java.lang.Object"
11400    abstract="false"
11401    static="false" final="true" visibility="public"
11402    deprecated="not deprecated">
11403    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11404      abstract="false" native="false" synchronized="false"
11405      static="true" final="false" visibility="public"
11406      deprecated="not deprecated">
11407      <param name="modules" type="com.google.inject.Module[]"/>
11408      <doc>
11409      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11410 modules. If a key is bound in both sets of modules, only the binding from the override modules
11411 is kept. If a single {@link PrivateModule} is supplied or all elements are from
11412 a single {@link PrivateBinder}, then this will overwrite the private bindings.
11413 Otherwise, private bindings will not be overwritten unless they are exposed.
11414 This can be used to replace the bindings of a production module with test bindings:
11415 <pre>
11416 Module functionalTestModule
11417     = Modules.override(new ProductionModule()).with(new TestModule());
11418 </pre>
11419
11420 <p>Prefer to write smaller modules that can be reused and tested without overrides.
11421
11422 @param modules the modules whose bindings are open to be overridden]]>
11423      </doc>
11424    </method>
11425    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11426      abstract="false" native="false" synchronized="false"
11427      static="true" final="false" visibility="public"
11428      deprecated="not deprecated">
11429      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11430      <doc>
11431      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11432 modules. If a key is bound in both sets of modules, only the binding from the override modules
11433 is kept. If a single {@link PrivateModule} is supplied or all elements are from
11434 a single {@link PrivateBinder}, then this will overwrite the private bindings.
11435 Otherwise, private bindings will not be overwritten unless they are exposed.
11436 This can be used to replace the bindings of a production module with test bindings:
11437 <pre>
11438 Module functionalTestModule
11439     = Modules.override(getProductionModules()).with(getTestModules());
11440 </pre>
11441
11442 <p>Prefer to write smaller modules that can be reused and tested without overrides.
11443
11444 @param modules the modules whose bindings are open to be overridden]]>
11445      </doc>
11446    </method>
11447    <method name="combine" return="com.google.inject.Module"
11448      abstract="false" native="false" synchronized="false"
11449      static="true" final="false" visibility="public"
11450      deprecated="not deprecated">
11451      <param name="modules" type="com.google.inject.Module[]"/>
11452      <doc>
11453      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11454      </doc>
11455    </method>
11456    <method name="combine" return="com.google.inject.Module"
11457      abstract="false" native="false" synchronized="false"
11458      static="true" final="false" visibility="public"
11459      deprecated="not deprecated">
11460      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11461      <doc>
11462      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11463      </doc>
11464    </method>
11465    <field name="EMPTY_MODULE" type="com.google.inject.Module"
11466      transient="false" volatile="false"
11467      static="true" final="true" visibility="public"
11468      deprecated="not deprecated">
11469    </field>
11470    <doc>
11471    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
11472
11473 @author jessewilson@google.com (Jesse Wilson)
11474 @since 2.0]]>
11475    </doc>
11476  </class>
11477  <!-- end class com.google.inject.util.Modules -->
11478  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11479  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
11480    static="true" final="false" visibility="public"
11481    deprecated="not deprecated">
11482    <method name="with" return="com.google.inject.Module"
11483      abstract="true" native="false" synchronized="false"
11484      static="false" final="false" visibility="public"
11485      deprecated="not deprecated">
11486      <param name="overrides" type="com.google.inject.Module[]"/>
11487      <doc>
11488      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11489      </doc>
11490    </method>
11491    <method name="with" return="com.google.inject.Module"
11492      abstract="true" native="false" synchronized="false"
11493      static="false" final="false" visibility="public"
11494      deprecated="not deprecated">
11495      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11496      <doc>
11497      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11498      </doc>
11499    </method>
11500    <doc>
11501    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11502    </doc>
11503  </interface>
11504  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11505  <!-- start class com.google.inject.util.Providers -->
11506  <class name="Providers" extends="java.lang.Object"
11507    abstract="false"
11508    static="false" final="true" visibility="public"
11509    deprecated="not deprecated">
11510    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
11511      abstract="false" native="false" synchronized="false"
11512      static="true" final="false" visibility="public"
11513      deprecated="not deprecated">
11514      <param name="instance" type="T"/>
11515      <doc>
11516      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
11517 be necessary to use in your application, but is helpful for several types
11518 of unit tests.
11519
11520 @param instance the instance that should always be provided.  This is also
11521     permitted to be null, to enable aggressive testing, although in real
11522     life a Guice-supplied Provider will never return null.]]>
11523      </doc>
11524    </method>
11525    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
11526      abstract="false" native="false" synchronized="false"
11527      static="true" final="false" visibility="public"
11528      deprecated="not deprecated">
11529      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
11530      <doc>
11531      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
11532 JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
11533 since Guice providers directly implement the JSR-330 interface.
11534
11535 @since 3.0]]>
11536      </doc>
11537    </method>
11538    <doc>
11539    <![CDATA[Static utility methods for creating and working with instances of
11540 {@link Provider}.
11541
11542 @author Kevin Bourrillion (kevinb9n@gmail.com)
11543 @since 2.0]]>
11544    </doc>
11545  </class>
11546  <!-- end class com.google.inject.util.Providers -->
11547  <!-- start class com.google.inject.util.Types -->
11548  <class name="Types" extends="java.lang.Object"
11549    abstract="false"
11550    static="false" final="true" visibility="public"
11551    deprecated="not deprecated">
11552    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
11553      abstract="false" native="false" synchronized="false"
11554      static="true" final="false" visibility="public"
11555      deprecated="not deprecated">
11556      <param name="rawType" type="java.lang.reflect.Type"/>
11557      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11558      <doc>
11559      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11560 {@code rawType}. The returned type does not have an owner type.
11561
11562 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11563      </doc>
11564    </method>
11565    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
11566      abstract="false" native="false" synchronized="false"
11567      static="true" final="false" visibility="public"
11568      deprecated="not deprecated">
11569      <param name="ownerType" type="java.lang.reflect.Type"/>
11570      <param name="rawType" type="java.lang.reflect.Type"/>
11571      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11572      <doc>
11573      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11574 {@code rawType} and enclosed by {@code ownerType}.
11575
11576 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11577      </doc>
11578    </method>
11579    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
11580      abstract="false" native="false" synchronized="false"
11581      static="true" final="false" visibility="public"
11582      deprecated="not deprecated">
11583      <param name="componentType" type="java.lang.reflect.Type"/>
11584      <doc>
11585      <![CDATA[Returns an array type whose elements are all instances of
11586 {@code componentType}.
11587
11588 @return a {@link java.io.Serializable serializable} generic array type.]]>
11589      </doc>
11590    </method>
11591    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
11592      abstract="false" native="false" synchronized="false"
11593      static="true" final="false" visibility="public"
11594      deprecated="not deprecated">
11595      <param name="bound" type="java.lang.reflect.Type"/>
11596      <doc>
11597      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
11598 For example, if {@code bound} is {@code CharSequence.class}, this returns
11599 {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
11600 this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
11601      </doc>
11602    </method>
11603    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
11604      abstract="false" native="false" synchronized="false"
11605      static="true" final="false" visibility="public"
11606      deprecated="not deprecated">
11607      <param name="bound" type="java.lang.reflect.Type"/>
11608      <doc>
11609      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
11610 example, if {@code bound} is {@code String.class}, this returns {@code ?
11611 super String}.]]>
11612      </doc>
11613    </method>
11614    <method name="listOf" return="java.lang.reflect.ParameterizedType"
11615      abstract="false" native="false" synchronized="false"
11616      static="true" final="false" visibility="public"
11617      deprecated="not deprecated">
11618      <param name="elementType" type="java.lang.reflect.Type"/>
11619      <doc>
11620      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
11621 {@code elementType}.
11622
11623 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11624      </doc>
11625    </method>
11626    <method name="setOf" return="java.lang.reflect.ParameterizedType"
11627      abstract="false" native="false" synchronized="false"
11628      static="true" final="false" visibility="public"
11629      deprecated="not deprecated">
11630      <param name="elementType" type="java.lang.reflect.Type"/>
11631      <doc>
11632      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
11633 {@code elementType}.
11634
11635 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11636      </doc>
11637    </method>
11638    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
11639      abstract="false" native="false" synchronized="false"
11640      static="true" final="false" visibility="public"
11641      deprecated="not deprecated">
11642      <param name="keyType" type="java.lang.reflect.Type"/>
11643      <param name="valueType" type="java.lang.reflect.Type"/>
11644      <doc>
11645      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
11646 {@code keyType} and whose values are of type {@code valueType}.
11647
11648 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11649      </doc>
11650    </method>
11651    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
11652      abstract="false" native="false" synchronized="false"
11653      static="true" final="false" visibility="public"
11654      deprecated="not deprecated">
11655      <param name="providedType" type="java.lang.reflect.Type"/>
11656      <doc>
11657      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
11658 {@code elementType}.
11659
11660 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11661      </doc>
11662    </method>
11663    <doc>
11664    <![CDATA[Static methods for working with types.
11665
11666 @author crazybob@google.com (Bob Lee)
11667 @since 2.0]]>
11668    </doc>
11669  </class>
11670  <!-- end class com.google.inject.util.Types -->
11671</package>
11672
11673</api>
11674