• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 Thu Mar 20 20:36:47 PDT 2014 -->
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 /Users/cgruber/OpenSource/guice/googlecode-master/lib/build/jdiff/jdiff.jar:/Users/cgruber/OpenSource/guice/googlecode-master/lib/build/jdiff/xerces.jar -classpath /Users/cgruber/OpenSource/guice/googlecode-master/lib/javax.inject.jar:/Users/cgruber/OpenSource/guice/googlecode-master/lib/aopalliance.jar:/Users/cgruber/OpenSource/guice/googlecode-master/lib/guava-16.0.1.jar -doclet jdiff.JDiff -docletpath /Users/cgruber/OpenSource/guice/googlecode-master/lib/build/jdiff/jdiff.jar:/Users/cgruber/OpenSource/guice/googlecode-master/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="type" type="java.lang.Class&lt;T&gt;"/>
480      <doc>
481      <![CDATA[Returns the provider used to obtain instances for the given injection type.
482 The returned provider will not be valid until the {@link Injector} has been
483 created. The provider will throw an {@code IllegalStateException} if you
484 try to use it beforehand.
485
486 @since 2.0]]>
487      </doc>
488    </method>
489    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
490      abstract="true" native="false" synchronized="false"
491      static="false" final="false" visibility="public"
492      deprecated="not deprecated">
493      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
494      <doc>
495      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
496 of the given type {@code T}. The returned members injector will not be valid until the main
497 {@link Injector} has been created. The members injector will throw an {@code
498 IllegalStateException} if you try to use it beforehand.
499
500 @param typeLiteral type to get members injector for
501 @since 2.0]]>
502      </doc>
503    </method>
504    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
505      abstract="true" native="false" synchronized="false"
506      static="false" final="false" visibility="public"
507      deprecated="not deprecated">
508      <param name="type" type="java.lang.Class&lt;T&gt;"/>
509      <doc>
510      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
511 of the given type {@code T}. The returned members injector will not be valid until the main
512 {@link Injector} has been created. The members injector will throw an {@code
513 IllegalStateException} if you try to use it beforehand.
514
515 @param type type to get members injector for
516 @since 2.0]]>
517      </doc>
518    </method>
519    <method name="convertToTypes"
520      abstract="true" native="false" synchronized="false"
521      static="false" final="false" visibility="public"
522      deprecated="not deprecated">
523      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
524      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
525      <doc>
526      <![CDATA[Binds a type converter. The injector will use the given converter to
527 convert string constants to matching types as needed.
528
529 @param typeMatcher matches types the converter can handle
530 @param converter converts values
531 @since 2.0]]>
532      </doc>
533    </method>
534    <method name="bindListener"
535      abstract="true" native="false" synchronized="false"
536      static="false" final="false" visibility="public"
537      deprecated="not deprecated">
538      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
539      <param name="listener" type="com.google.inject.spi.TypeListener"/>
540      <doc>
541      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
542 injectable types matched by the given type matcher.
543
544 @param typeMatcher that matches injectable types the listener should be notified of
545 @param listener for injectable types matched by typeMatcher
546 @since 2.0]]>
547      </doc>
548    </method>
549    <method name="bindListener"
550      abstract="true" native="false" synchronized="false"
551      static="false" final="false" visibility="public"
552      deprecated="not deprecated">
553      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
554      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
555      <doc>
556      <![CDATA[Registers listeners for provisioned objects. Guice will notify the
557 listeners just before and after the object is provisioned. Provisioned
558 objects that are also injectable (everything except objects provided
559 through Providers) can also be notified through TypeListeners registered in
560 {@link #bindListener}.
561
562 @param bindingMatcher that matches bindings of provisioned objects the listener
563          should be notified of
564 @param listeners for provisioned objects matched by bindingMatcher
565 @since 4.0]]>
566      </doc>
567    </method>
568    <method name="withSource" return="com.google.inject.Binder"
569      abstract="true" native="false" synchronized="false"
570      static="false" final="false" visibility="public"
571      deprecated="not deprecated">
572      <param name="source" type="java.lang.Object"/>
573      <doc>
574      <![CDATA[Returns a binder that uses {@code source} as the reference location for
575 configuration errors. This is typically a {@link StackTraceElement}
576 for {@code .java} source but it could any binding source, such as the
577 path to a {@code .properties} file.
578
579 @param source any object representing the source location and has a
580     concise {@link Object#toString() toString()} value
581 @return a binder that shares its configuration with this binder
582 @since 2.0]]>
583      </doc>
584    </method>
585    <method name="skipSources" return="com.google.inject.Binder"
586      abstract="true" native="false" synchronized="false"
587      static="false" final="false" visibility="public"
588      deprecated="not deprecated">
589      <param name="classesToSkip" type="java.lang.Class[]"/>
590      <doc>
591      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
592 calling code. The caller's {@link StackTraceElement} is used to locate
593 the source of configuration errors.
594
595 @param classesToSkip library classes that create bindings on behalf of
596      their clients.
597 @return a binder that shares its configuration with this binder.
598 @since 2.0]]>
599      </doc>
600    </method>
601    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
602      abstract="true" native="false" synchronized="false"
603      static="false" final="false" visibility="public"
604      deprecated="not deprecated">
605      <doc>
606      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
607 binder can be used to add and configuration information in this environment. See {@link
608 PrivateModule} for details.
609
610 @return a binder that inherits configuration from this binder. Only exposed configuration on
611      the returned binder will be visible to this binder.
612 @since 2.0]]>
613      </doc>
614    </method>
615    <method name="requireExplicitBindings"
616      abstract="true" native="false" synchronized="false"
617      static="false" final="false" visibility="public"
618      deprecated="not deprecated">
619      <doc>
620      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
621 be injected. Classes that are not explicitly bound in a module cannot be
622 injected. Bindings created through a linked binding (
623 <code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
624 implicit binding (<code>FooImpl</code>) cannot be directly injected unless
625 it is also explicitly bound (<code>bind(FooImpl.class)</code>).
626 <p>
627 Tools can still retrieve bindings for implicit bindings (bindings created
628 through a linked binding) if explicit bindings are required, however
629 {@link Binding#getProvider} will fail.
630 <p>
631 By default, explicit bindings are not required.
632 <p>
633 If a parent injector requires explicit bindings, then all child injectors
634 (and private modules within that injector) also require explicit bindings.
635 If a parent does not require explicit bindings, a child injector or private
636 module may optionally declare itself as requiring explicit bindings. If it
637 does, the behavior is limited only to that child or any grandchildren. No
638 siblings of the child will require explicit bindings.
639 <p>
640 If the parent did not require explicit bindings but the child does, it is
641 possible that a linked binding in the child may add a JIT binding to the
642 parent. The child will not be allowed to reference the target binding
643 directly, but the parent and other children of the parent may be able to.
644
645 @since 3.0]]>
646      </doc>
647    </method>
648    <method name="disableCircularProxies"
649      abstract="true" native="false" synchronized="false"
650      static="false" final="false" visibility="public"
651      deprecated="not deprecated">
652      <doc>
653      <![CDATA[Prevents Guice from constructing a {@link Proxy} when a circular dependency
654 is found.  By default, circular proxies are not disabled.
655 <p>
656 If a parent injector disables circular proxies, then all child injectors
657 (and private modules within that injector) also disable circular proxies.
658 If a parent does not disable circular proxies, a child injector or private
659 module may optionally declare itself as disabling circular proxies. If it
660 does, the behavior is limited only to that child or any grandchildren. No
661 siblings of the child will disable circular proxies.
662
663 @since 3.0]]>
664      </doc>
665    </method>
666    <method name="requireAtInjectOnConstructors"
667      abstract="true" native="false" synchronized="false"
668      static="false" final="false" visibility="public"
669      deprecated="not deprecated">
670      <doc>
671      <![CDATA[Requires that a {@literal @}{@link Inject} annotation exists on a constructor in order for
672 Guice to consider it an eligible injectable class. By default, Guice will inject classes that
673 have a no-args constructor if no {@literal @}{@link Inject} annotation exists on any
674 constructor.
675 <p>
676 If the class is bound using {@link LinkedBindingBuilder#toConstructor}, Guice will still inject
677 that constructor regardless of annotations.
678
679 @since 4.0]]>
680      </doc>
681    </method>
682    <method name="requireExactBindingAnnotations"
683      abstract="true" native="false" synchronized="false"
684      static="false" final="false" visibility="public"
685      deprecated="not deprecated">
686      <doc>
687      <![CDATA[Requires that Guice finds an exactly matching binding annotation.  This disables the
688 error-prone feature in Guice where it can substitute a binding for
689 <code>{@literal @}Named Foo</code> when attempting to inject
690 <code>{@literal @}Named("foo") Foo</code>.
691
692 @since 4.0]]>
693      </doc>
694    </method>
695    <doc>
696    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
697 used to create an {@link Injector}. Guice provides this object to your
698 application's {@link Module} implementors so they may each contribute
699 their own bindings and other registrations.
700
701 <h3>The Guice Binding EDSL</h3>
702
703 Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
704 create bindings simply and readably.  This approach is great for overall
705 usability, but it does come with a small cost: <b>it is difficult to
706 learn how to use the Binding EDSL by reading
707 method-level javadocs</b>.  Instead, you should consult the series of
708 examples below.  To save space, these examples omit the opening
709 {@code binder}, just as you will if your module extends
710 {@link AbstractModule}.
711
712 <pre>
713     bind(ServiceImpl.class);</pre>
714
715 This statement does essentially nothing; it "binds the {@code ServiceImpl}
716 class to itself" and does not change Guice's default behavior.  You may still
717 want to use this if you prefer your {@link Module} class to serve as an
718 explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
719 Guice may be unable to validate a binding at injector creation time unless it
720 is given explicitly.
721
722 <pre>
723     bind(Service.class).to(ServiceImpl.class);</pre>
724
725 Specifies that a request for a {@code Service} instance with no binding
726 annotations should be treated as if it were a request for a
727 {@code ServiceImpl} instance. This <i>overrides</i> the function of any
728 {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
729 annotations found on {@code Service}, since Guice will have already
730 "moved on" to {@code ServiceImpl} before it reaches the point when it starts
731 looking for these annotations.
732
733 <pre>
734     bind(Service.class).toProvider(ServiceProvider.class);</pre>
735
736 In this example, {@code ServiceProvider} must extend or implement
737 {@code Provider<Service>}. This binding specifies that Guice should resolve
738 an unannotated injection request for {@code Service} by first resolving an
739 instance of {@code ServiceProvider} in the regular way, then calling
740 {@link Provider#get get()} on the resulting Provider instance to obtain the
741 {@code Service} instance.
742
743 <p>The {@link Provider} you use here does not have to be a "factory"; that
744 is, a provider which always <i>creates</i> each instance it provides.
745 However, this is generally a good practice to follow.  You can then use
746 Guice's concept of {@link Scope scopes} to guide when creation should happen
747 -- "letting Guice work for you".
748
749 <pre>
750     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
751
752 Like the previous example, but only applies to injection requests that use
753 the binding annotation {@code @Red}.  If your module also includes bindings
754 for particular <i>values</i> of the {@code @Red} annotation (see below),
755 then this binding will serve as a "catch-all" for any values of {@code @Red}
756 that have no exact match in the bindings.
757
758 <pre>
759     bind(ServiceImpl.class).in(Singleton.class);
760     // or, alternatively
761     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
762
763 Either of these statements places the {@code ServiceImpl} class into
764 singleton scope.  Guice will create only one instance of {@code ServiceImpl}
765 and will reuse it for all injection requests of this type.  Note that it is
766 still possible to bind another instance of {@code ServiceImpl} if the second
767 binding is qualified by an annotation as in the previous example.  Guice is
768 not overly concerned with <i>preventing</i> you from creating multiple
769 instances of your "singletons", only with <i>enabling</i> your application to
770 share only one instance if that's all you tell Guice you need.
771
772 <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
773 was specified with an annotation on the {@code ServiceImpl} class.
774
775 <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
776 servlet-specific scopes available in
777 {@code com.google.inject.servlet.ServletScopes}, and your Modules can
778 contribute their own custom scopes for use here as well.
779
780 <pre>
781     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
782         .to(CreditCardPaymentService.class);</pre>
783
784 This admittedly odd construct is the way to bind a parameterized type. It
785 tells Guice how to honor an injection request for an element of type
786 {@code PaymentService<CreditCard>}. The class
787 {@code CreditCardPaymentService} must implement the
788 {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
789 inject a generic type, such as {@code Set<E>}; all type parameters must be
790 fully specified.
791
792 <pre>
793     bind(Service.class).toInstance(new ServiceImpl());
794     // or, alternatively
795     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
796
797 In this example, your module itself, <i>not Guice</i>, takes responsibility
798 for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
799 this single instance to fulfill all {@code Service} injection requests.  When
800 the {@link Injector} is created, it will automatically perform field
801 and method injection for this instance, but any injectable constructor on
802 {@code ServiceImpl} is simply ignored.  Note that using this approach results
803 in "eager loading" behavior that you can't control.
804
805 <pre>
806     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
807
808 Sets up a constant binding. Constant injections must always be annotated.
809 When a constant binding's value is a string, it is eligile for conversion to
810 all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
811 {@link Class#forName class literals}. Conversions for other types can be
812 configured using {@link #convertToTypes(Matcher, TypeConverter)
813 convertToTypes()}.
814
815 <pre>
816   {@literal @}Color("red") Color red; // A member variable (field)
817    . . .
818     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
819     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
820
821 If your binding annotation has parameters you can apply different bindings to
822 different specific values of your annotation.  Getting your hands on the
823 right instance of the annotation is a bit of a pain -- one approach, shown
824 above, is to apply a prototype annotation to a field in your module class, so
825 that you can read this annotation instance and give it to Guice.
826
827 <pre>
828     bind(Service.class)
829         .annotatedWith(Names.named("blue"))
830         .to(BlueService.class);</pre>
831
832 Differentiating by names is a common enough use case that we provided a
833 standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
834 Guice's library support, binding by name is quite easier than in the
835 arbitrary binding annotation case we just saw.  However, remember that these
836 names will live in a single flat namespace with all the other names used in
837 your application.
838
839 <pre>
840     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
841     bind(ServiceImpl.class)
842         .toConstructor(loneCtor);</pre>
843
844 In this example, we directly tell Guice which constructor to use in a concrete
845 class implementation. It means that we do not need to place {@literal @}Inject
846 on any of the constructors and that Guice treats the provided constructor as though
847 it were annotated so. It is useful for cases where you cannot modify existing
848 classes and is a bit simpler than using a {@link Provider}.
849
850 <p>The above list of examples is far from exhaustive.  If you can think of
851 how the concepts of one example might coexist with the concepts from another,
852 you can most likely weave the two together.  If the two concepts make no
853 sense with each other, you most likely won't be able to do it.  In a few
854 cases Guice will let something bogus slip by, and will then inform you of
855 the problems at runtime, as soon as you try to create your Injector.
856
857 <p>The other methods of Binder such as {@link #bindScope},
858 {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
859 {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
860 you can learn how to use these in the usual way, from the method
861 documentation.
862
863 @author crazybob@google.com (Bob Lee)
864 @author jessewilson@google.com (Jesse Wilson)
865 @author kevinb@google.com (Kevin Bourrillion)]]>
866    </doc>
867  </interface>
868  <!-- end interface com.google.inject.Binder -->
869  <!-- start interface com.google.inject.Binding -->
870  <interface name="Binding"    abstract="true"
871    static="false" final="false" visibility="public"
872    deprecated="not deprecated">
873    <implements name="com.google.inject.spi.Element"/>
874    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
875      abstract="true" native="false" synchronized="false"
876      static="false" final="false" visibility="public"
877      deprecated="not deprecated">
878      <doc>
879      <![CDATA[Returns the key for this binding.]]>
880      </doc>
881    </method>
882    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
883      abstract="true" native="false" synchronized="false"
884      static="false" final="false" visibility="public"
885      deprecated="not deprecated">
886      <doc>
887      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
888 binding.
889
890 @throws UnsupportedOperationException when invoked on a {@link Binding}
891      created via {@link com.google.inject.spi.Elements#getElements}. This
892      method is only supported on {@link Binding}s returned from an injector.]]>
893      </doc>
894    </method>
895    <method name="acceptTargetVisitor" return="V"
896      abstract="true" native="false" synchronized="false"
897      static="false" final="false" visibility="public"
898      deprecated="not deprecated">
899      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
900      <doc>
901      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
902
903 @param visitor to call back on
904 @since 2.0]]>
905      </doc>
906    </method>
907    <method name="acceptScopingVisitor" return="V"
908      abstract="true" native="false" synchronized="false"
909      static="false" final="false" visibility="public"
910      deprecated="not deprecated">
911      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
912      <doc>
913      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
914
915 @param visitor to call back on
916 @since 2.0]]>
917      </doc>
918    </method>
919    <doc>
920    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
921 type. This interface is part of the introspection API and is intended primarily for use by
922 tools.
923
924 <p>Bindings are created in several ways:
925 <ul>
926     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
927         statements:
928 <pre>
929     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
930     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
931     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
932         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
933         default constructor.</li>
934     <li>By converting a bound instance to a different type.</li>
935     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
936 </ul>
937
938
939 <p>They exist on both modules and on injectors, and their behaviour is different for each:
940 <ul>
941     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
942         This is because the applicable scopes and interceptors may not be known until an injector
943         is created. From a tool's perspective, module bindings are like the injector's source
944         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
945     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
946         instances. From a tools' perspective, injector bindings are like reflection for an
947         injector. They have full runtime information, including the complete graph of injections
948         necessary to satisfy a binding.</li>
949 </ul>
950
951 @param <T> the bound type. The injected is always assignable to this type.
952
953 @author crazybob@google.com (Bob Lee)
954 @author jessewilson@google.com (Jesse Wilson)]]>
955    </doc>
956  </interface>
957  <!-- end interface com.google.inject.Binding -->
958  <!-- start class com.google.inject.BindingAnnotation -->
959  <class name="BindingAnnotation"    abstract="true"
960    static="false" final="false" visibility="public"
961    deprecated="not deprecated">
962    <implements name="java.lang.annotation.Annotation"/>
963    <doc>
964    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
965 may apply to a single injection point. You must also annotate binder
966 annotations with {@code @Retention(RUNTIME)}. For example:
967
968 <pre>
969   {@code @}Retention(RUNTIME)
970   {@code @}Target({ FIELD, PARAMETER, METHOD })
971   {@code @}BindingAnnotation
972   public {@code @}interface Transactional {}
973 </pre>
974
975 @author crazybob@google.com (Bob Lee)]]>
976    </doc>
977  </class>
978  <!-- end class com.google.inject.BindingAnnotation -->
979  <!-- start class com.google.inject.ConfigurationException -->
980  <class name="ConfigurationException" extends="java.lang.RuntimeException"
981    abstract="false"
982    static="false" final="true" visibility="public"
983    deprecated="not deprecated">
984    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
985      static="false" final="false" visibility="public"
986      deprecated="not deprecated">
987      <doc>
988      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
989      </doc>
990    </constructor>
991    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
992      abstract="false" native="false" synchronized="false"
993      static="false" final="false" visibility="public"
994      deprecated="not deprecated">
995      <param name="partialValue" type="java.lang.Object"/>
996      <doc>
997      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
998      </doc>
999    </method>
1000    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1001      abstract="false" native="false" synchronized="false"
1002      static="false" final="false" visibility="public"
1003      deprecated="not deprecated">
1004      <doc>
1005      <![CDATA[Returns messages for the errors that caused this exception.]]>
1006      </doc>
1007    </method>
1008    <method name="getPartialValue" return="E"
1009      abstract="false" native="false" synchronized="false"
1010      static="false" final="false" visibility="public"
1011      deprecated="not deprecated">
1012      <doc>
1013      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
1014 this while collecting additional configuration problems.
1015
1016 @return the partial value, or {@code null} if none was set. The type of the partial value is
1017      specified by the throwing method.]]>
1018      </doc>
1019    </method>
1020    <method name="getMessage" return="java.lang.String"
1021      abstract="false" native="false" synchronized="false"
1022      static="false" final="false" visibility="public"
1023      deprecated="not deprecated">
1024    </method>
1025    <doc>
1026    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
1027 scope is found. Clients should catch this exception, log it, and stop execution.
1028
1029 @author jessewilson@google.com (Jesse Wilson)
1030 @since 2.0]]>
1031    </doc>
1032  </class>
1033  <!-- end class com.google.inject.ConfigurationException -->
1034  <!-- start class com.google.inject.CreationException -->
1035  <class name="CreationException" extends="java.lang.RuntimeException"
1036    abstract="false"
1037    static="false" final="false" visibility="public"
1038    deprecated="not deprecated">
1039    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1040      static="false" final="false" visibility="public"
1041      deprecated="not deprecated">
1042      <doc>
1043      <![CDATA[Creates a CreationException containing {@code messages}.]]>
1044      </doc>
1045    </constructor>
1046    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1047      abstract="false" native="false" synchronized="false"
1048      static="false" final="false" visibility="public"
1049      deprecated="not deprecated">
1050      <doc>
1051      <![CDATA[Returns messages for the errors that caused this exception.]]>
1052      </doc>
1053    </method>
1054    <method name="getMessage" return="java.lang.String"
1055      abstract="false" native="false" synchronized="false"
1056      static="false" final="false" visibility="public"
1057      deprecated="not deprecated">
1058    </method>
1059    <doc>
1060    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1061 errors. Clients should catch this exception, log it, and stop execution.
1062
1063 @author crazybob@google.com (Bob Lee)]]>
1064    </doc>
1065  </class>
1066  <!-- end class com.google.inject.CreationException -->
1067  <!-- start class com.google.inject.Exposed -->
1068  <class name="Exposed"    abstract="true"
1069    static="false" final="false" visibility="public"
1070    deprecated="not deprecated">
1071    <implements name="java.lang.annotation.Annotation"/>
1072    <doc>
1073    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1074 private module to indicate that the provided binding is exposed.
1075
1076 @author jessewilson@google.com (Jesse Wilson)
1077 @since 2.0]]>
1078    </doc>
1079  </class>
1080  <!-- end class com.google.inject.Exposed -->
1081  <!-- start class com.google.inject.Guice -->
1082  <class name="Guice" extends="java.lang.Object"
1083    abstract="false"
1084    static="false" final="true" visibility="public"
1085    deprecated="not deprecated">
1086    <method name="createInjector" return="com.google.inject.Injector"
1087      abstract="false" native="false" synchronized="false"
1088      static="true" final="false" visibility="public"
1089      deprecated="not deprecated">
1090      <param name="modules" type="com.google.inject.Module[]"/>
1091      <doc>
1092      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1093 calling {@link #createInjector(Stage, Module...)} with Stage.DEVELOPMENT.
1094
1095 @throws CreationException if one or more errors occur during injector
1096     construction]]>
1097      </doc>
1098    </method>
1099    <method name="createInjector" return="com.google.inject.Injector"
1100      abstract="false" native="false" synchronized="false"
1101      static="true" final="false" visibility="public"
1102      deprecated="not deprecated">
1103      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1104      <doc>
1105      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1106 calling {@link #createInjector(Stage, Iterable)} with Stage.DEVELOPMENT.
1107
1108 @throws CreationException if one or more errors occur during injector
1109     creation]]>
1110      </doc>
1111    </method>
1112    <method name="createInjector" return="com.google.inject.Injector"
1113      abstract="false" native="false" synchronized="false"
1114      static="true" final="false" visibility="public"
1115      deprecated="not deprecated">
1116      <param name="stage" type="com.google.inject.Stage"/>
1117      <param name="modules" type="com.google.inject.Module[]"/>
1118      <doc>
1119      <![CDATA[Creates an injector for the given set of modules, in a given development
1120 stage.
1121
1122 @throws CreationException if one or more errors occur during injector
1123     creation.]]>
1124      </doc>
1125    </method>
1126    <method name="createInjector" return="com.google.inject.Injector"
1127      abstract="false" native="false" synchronized="false"
1128      static="true" final="false" visibility="public"
1129      deprecated="not deprecated">
1130      <param name="stage" type="com.google.inject.Stage"/>
1131      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1132      <doc>
1133      <![CDATA[Creates an injector for the given set of modules, in a given development
1134 stage.
1135
1136 @throws CreationException if one or more errors occur during injector
1137     construction]]>
1138      </doc>
1139    </method>
1140    <doc>
1141    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1142 {@link Module}s.
1143
1144 <p>Guice supports a model of development that draws clear boundaries between
1145 APIs, Implementations of these APIs, Modules which configure these
1146 implementations, and finally Applications which consist of a collection of
1147 Modules. It is the Application, which typically defines your {@code main()}
1148 method, that bootstraps the Guice Injector using the {@code Guice} class, as
1149 in this example:
1150 <pre>
1151     public class FooApplication {
1152       public static void main(String[] args) {
1153         Injector injector = Guice.createInjector(
1154             new ModuleA(),
1155             new ModuleB(),
1156             . . .
1157             new FooApplicationFlagsModule(args)
1158         );
1159
1160         // Now just bootstrap the application and you're done
1161         FooStarter starter = injector.getInstance(FooStarter.class);
1162         starter.runApplication();
1163       }
1164     }
1165 </pre>]]>
1166    </doc>
1167  </class>
1168  <!-- end class com.google.inject.Guice -->
1169  <!-- start class com.google.inject.ImplementedBy -->
1170  <class name="ImplementedBy"    abstract="true"
1171    static="false" final="false" visibility="public"
1172    deprecated="not deprecated">
1173    <implements name="java.lang.annotation.Annotation"/>
1174    <doc>
1175    <![CDATA[A pointer to the default implementation of a type.
1176
1177 @author crazybob@google.com (Bob Lee)]]>
1178    </doc>
1179  </class>
1180  <!-- end class com.google.inject.ImplementedBy -->
1181  <!-- start class com.google.inject.Inject -->
1182  <class name="Inject"    abstract="true"
1183    static="false" final="false" visibility="public"
1184    deprecated="not deprecated">
1185    <implements name="java.lang.annotation.Annotation"/>
1186    <doc>
1187    <![CDATA[Annotates members of your implementation class (constructors, methods
1188 and fields) into which the {@link Injector} should inject values.
1189 The Injector fulfills injection requests for:
1190
1191 <ul>
1192 <li>Every instance it constructs. The class being constructed must have
1193 exactly one of its constructors marked with {@code @Inject} or must have a
1194 constructor taking no parameters. The Injector then proceeds to perform
1195 field and method injections.
1196
1197 <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1198 {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1199 {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(javax.inject.Provider)}.
1200 In this case all constructors are, of course, ignored.
1201
1202 <li>Static fields and methods of classes which any {@link Module} has
1203 specifically requested static injection for, using
1204 {@link Binder#requestStaticInjection}.
1205 </ul>
1206
1207 In all cases, a member can be injected regardless of its Java access
1208 specifier (private, default, protected, public).
1209
1210 @author crazybob@google.com (Bob Lee)]]>
1211    </doc>
1212  </class>
1213  <!-- end class com.google.inject.Inject -->
1214  <!-- start interface com.google.inject.Injector -->
1215  <interface name="Injector"    abstract="true"
1216    static="false" final="false" visibility="public"
1217    deprecated="not deprecated">
1218    <method name="injectMembers"
1219      abstract="true" native="false" synchronized="false"
1220      static="false" final="false" visibility="public"
1221      deprecated="not deprecated">
1222      <param name="instance" type="java.lang.Object"/>
1223      <doc>
1224      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1225 absence of an injectable constructor.
1226
1227 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1228 performing constructor injection), so if you're able to let Guice create all your objects for
1229 you, you'll never need to use this method.
1230
1231 @param instance to inject members on
1232
1233 @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1234  run time]]>
1235      </doc>
1236    </method>
1237    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1238      abstract="true" native="false" synchronized="false"
1239      static="false" final="false" visibility="public"
1240      deprecated="not deprecated">
1241      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1242      <doc>
1243      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1244 of the given type {@code T}.
1245
1246 @param typeLiteral type to get members injector for
1247 @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1248  detection
1249 @since 2.0]]>
1250      </doc>
1251    </method>
1252    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1253      abstract="true" native="false" synchronized="false"
1254      static="false" final="false" visibility="public"
1255      deprecated="not deprecated">
1256      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1257      <doc>
1258      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1259 of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1260 instead to get increased up front error detection.
1261
1262 @param type type to get members injector for
1263 @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1264  detection
1265 @since 2.0]]>
1266      </doc>
1267    </method>
1268    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1269      abstract="true" native="false" synchronized="false"
1270      static="false" final="false" visibility="public"
1271      deprecated="not deprecated">
1272      <doc>
1273      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1274
1275 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1276 injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1277 its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1278 which bindings appear in user Modules.
1279
1280 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1281      </doc>
1282    </method>
1283    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1284      abstract="true" native="false" synchronized="false"
1285      static="false" final="false" visibility="public"
1286      deprecated="not deprecated">
1287      <doc>
1288      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1289 just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1290 present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1291 additional just-in-time bindings.
1292
1293 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1294 injector}, should one exist.
1295
1296 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1297
1298 @since 3.0]]>
1299      </doc>
1300    </method>
1301    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1302      abstract="true" native="false" synchronized="false"
1303      static="false" final="false" visibility="public"
1304      deprecated="not deprecated">
1305      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1306      <doc>
1307      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1308 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1309 be created if necessary.
1310
1311 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1312
1313 @throws ConfigurationException if this injector cannot find or create the binding.]]>
1314      </doc>
1315    </method>
1316    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1317      abstract="true" native="false" synchronized="false"
1318      static="false" final="false" visibility="public"
1319      deprecated="not deprecated">
1320      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1321      <doc>
1322      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1323 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1324 be created if necessary.
1325
1326 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1327
1328 @throws ConfigurationException if this injector cannot find or create the binding.
1329 @since 2.0]]>
1330      </doc>
1331    </method>
1332    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1333      abstract="true" native="false" synchronized="false"
1334      static="false" final="false" visibility="public"
1335      deprecated="not deprecated">
1336      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1337      <doc>
1338      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1339 {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1340 for keys that aren't bound.
1341
1342 <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1343
1344 @since 3.0]]>
1345      </doc>
1346    </method>
1347    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1348      abstract="true" native="false" synchronized="false"
1349      static="false" final="false" visibility="public"
1350      deprecated="not deprecated">
1351      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1352      <doc>
1353      <![CDATA[Returns all explicit bindings for {@code type}.
1354
1355 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1356      </doc>
1357    </method>
1358    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1359      abstract="true" native="false" synchronized="false"
1360      static="false" final="false" visibility="public"
1361      deprecated="not deprecated">
1362      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1363      <doc>
1364      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1365 using this method, in favor of having Guice inject your dependencies ahead of time.
1366
1367 @throws ConfigurationException if this injector cannot find or create the provider.
1368 @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1369      </doc>
1370    </method>
1371    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1372      abstract="true" native="false" synchronized="false"
1373      static="false" final="false" visibility="public"
1374      deprecated="not deprecated">
1375      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1376      <doc>
1377      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1378 using this method, in favor of having Guice inject your dependencies ahead of time.
1379
1380 @throws ConfigurationException if this injector cannot find or create the provider.
1381 @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1382      </doc>
1383    </method>
1384    <method name="getInstance" return="T"
1385      abstract="true" native="false" synchronized="false"
1386      static="false" final="false" visibility="public"
1387      deprecated="not deprecated">
1388      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1389      <doc>
1390      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1391 getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1392 inject your dependencies ahead of time.
1393
1394 @throws ConfigurationException if this injector cannot find or create the provider.
1395 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1396      </doc>
1397    </method>
1398    <method name="getInstance" return="T"
1399      abstract="true" native="false" synchronized="false"
1400      static="false" final="false" visibility="public"
1401      deprecated="not deprecated">
1402      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1403      <doc>
1404      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1405 getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1406 inject your dependencies ahead of time.
1407
1408 @throws ConfigurationException if this injector cannot find or create the provider.
1409 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1410      </doc>
1411    </method>
1412    <method name="getParent" return="com.google.inject.Injector"
1413      abstract="true" native="false" synchronized="false"
1414      static="false" final="false" visibility="public"
1415      deprecated="not deprecated">
1416      <doc>
1417      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1418
1419 @since 2.0]]>
1420      </doc>
1421    </method>
1422    <method name="createChildInjector" return="com.google.inject.Injector"
1423      abstract="true" native="false" synchronized="false"
1424      static="false" final="false" visibility="public"
1425      deprecated="not deprecated">
1426      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1427      <doc>
1428      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1429 interceptors and type converters are inherited -- they are visible to the child injector.
1430 Elements of the child injector are not visible to its parent.
1431
1432 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1433 whenever possible. This allows for scoped instances to be shared between injectors. Use
1434 explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1435 injections in just-in-time bindings (created in the parent injector) may be silently
1436 ignored if the optional dependencies are from the child injector.
1437
1438 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1439 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1440 injector to itself.
1441
1442 @since 2.0]]>
1443      </doc>
1444    </method>
1445    <method name="createChildInjector" return="com.google.inject.Injector"
1446      abstract="true" native="false" synchronized="false"
1447      static="false" final="false" visibility="public"
1448      deprecated="not deprecated">
1449      <param name="modules" type="com.google.inject.Module[]"/>
1450      <doc>
1451      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1452 interceptors and type converters are inherited -- they are visible to the child injector.
1453 Elements of the child injector are not visible to its parent.
1454
1455 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1456 whenever possible. This allows for scoped instances to be shared between injectors. Use
1457 explicit bindings to prevent bindings from being shared with the parent injector.
1458
1459 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1460 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1461 injector to itself.
1462
1463 @since 2.0]]>
1464      </doc>
1465    </method>
1466    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1467      abstract="true" native="false" synchronized="false"
1468      static="false" final="false" visibility="public"
1469      deprecated="not deprecated">
1470      <doc>
1471      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1472 like {@code Singleton.class}, and the values are scope instances, such as {@code
1473 Scopes.SINGLETON}. The returned map is immutable.
1474
1475 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1476
1477 @since 3.0]]>
1478      </doc>
1479    </method>
1480    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1481      abstract="true" native="false" synchronized="false"
1482      static="false" final="false" visibility="public"
1483      deprecated="not deprecated">
1484      <doc>
1485      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1486 immutable.
1487
1488 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1489
1490 @since 3.0]]>
1491      </doc>
1492    </method>
1493    <doc>
1494    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1495 for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1496 interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1497 injection from its cousin, the service locator pattern.
1498
1499 <p>Contains several default bindings:
1500
1501 <ul>
1502 <li>This {@link Injector} instance itself
1503 <li>A {@code Provider<T>} for each binding of type {@code T}
1504 <li>The {@link java.util.logging.Logger} for the class being injected
1505 <li>The {@link Stage} in which the Injector was created
1506 </ul>
1507
1508 Injectors are created using the facade class {@link Guice}.
1509
1510 <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1511 already-constructed instances. This can be used to interoperate with objects created by other
1512 frameworks or services.
1513
1514 <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1515 the configuration of their parent injectors, but the converse does not hold.
1516
1517 <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1518 enables tools and extensions to operate on an injector reflectively.
1519
1520 @author crazybob@google.com (Bob Lee)
1521 @author jessewilson@google.com (Jesse Wilson)]]>
1522    </doc>
1523  </interface>
1524  <!-- end interface com.google.inject.Injector -->
1525  <!-- start class com.google.inject.Key -->
1526  <class name="Key" extends="java.lang.Object"
1527    abstract="false"
1528    static="false" final="false" visibility="public"
1529    deprecated="not deprecated">
1530    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1531      static="false" final="false" visibility="protected"
1532      deprecated="not deprecated">
1533      <doc>
1534      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1535
1536 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1537 parameter in the anonymous class's type hierarchy so we can reconstitute it
1538 at runtime despite erasure.
1539
1540 <p>Example usage for a binding of type {@code Foo} annotated with
1541 {@code @Bar}:
1542
1543 <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1544      </doc>
1545    </constructor>
1546    <constructor name="Key" type="java.lang.annotation.Annotation"
1547      static="false" final="false" visibility="protected"
1548      deprecated="not deprecated">
1549      <doc>
1550      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1551
1552 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1553 parameter in the anonymous class's type hierarchy so we can reconstitute it
1554 at runtime despite erasure.
1555
1556 <p>Example usage for a binding of type {@code Foo} annotated with
1557 {@code @Bar}:
1558
1559 <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1560      </doc>
1561    </constructor>
1562    <constructor name="Key"
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}:
1573
1574 <p>{@code new Key<Foo>() {}}.]]>
1575      </doc>
1576    </constructor>
1577    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1578      abstract="false" native="false" synchronized="false"
1579      static="false" final="true" visibility="public"
1580      deprecated="not deprecated">
1581      <doc>
1582      <![CDATA[Gets the key type.]]>
1583      </doc>
1584    </method>
1585    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1586      abstract="false" native="false" synchronized="false"
1587      static="false" final="true" visibility="public"
1588      deprecated="not deprecated">
1589      <doc>
1590      <![CDATA[Gets the annotation type.]]>
1591      </doc>
1592    </method>
1593    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1594      abstract="false" native="false" synchronized="false"
1595      static="false" final="true" visibility="public"
1596      deprecated="not deprecated">
1597      <doc>
1598      <![CDATA[Gets the annotation.]]>
1599      </doc>
1600    </method>
1601    <method name="equals" return="boolean"
1602      abstract="false" native="false" synchronized="false"
1603      static="false" final="true" visibility="public"
1604      deprecated="not deprecated">
1605      <param name="o" type="java.lang.Object"/>
1606    </method>
1607    <method name="hashCode" return="int"
1608      abstract="false" native="false" synchronized="false"
1609      static="false" final="true" visibility="public"
1610      deprecated="not deprecated">
1611    </method>
1612    <method name="toString" return="java.lang.String"
1613      abstract="false" native="false" synchronized="false"
1614      static="false" final="true" visibility="public"
1615      deprecated="not deprecated">
1616    </method>
1617    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1618      abstract="false" native="false" synchronized="false"
1619      static="true" final="false" visibility="public"
1620      deprecated="not deprecated">
1621      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1622      <doc>
1623      <![CDATA[Gets a key for an injection type.]]>
1624      </doc>
1625    </method>
1626    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1627      abstract="false" native="false" synchronized="false"
1628      static="true" final="false" visibility="public"
1629      deprecated="not deprecated">
1630      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1631      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1632      <doc>
1633      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1634      </doc>
1635    </method>
1636    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1637      abstract="false" native="false" synchronized="false"
1638      static="true" final="false" visibility="public"
1639      deprecated="not deprecated">
1640      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1641      <param name="annotation" type="java.lang.annotation.Annotation"/>
1642      <doc>
1643      <![CDATA[Gets a key for an injection type and an annotation.]]>
1644      </doc>
1645    </method>
1646    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1647      abstract="false" native="false" synchronized="false"
1648      static="true" final="false" visibility="public"
1649      deprecated="not deprecated">
1650      <param name="type" type="java.lang.reflect.Type"/>
1651      <doc>
1652      <![CDATA[Gets a key for an injection type.]]>
1653      </doc>
1654    </method>
1655    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1656      abstract="false" native="false" synchronized="false"
1657      static="true" final="false" visibility="public"
1658      deprecated="not deprecated">
1659      <param name="type" type="java.lang.reflect.Type"/>
1660      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1661      <doc>
1662      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1663      </doc>
1664    </method>
1665    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1666      abstract="false" native="false" synchronized="false"
1667      static="true" final="false" visibility="public"
1668      deprecated="not deprecated">
1669      <param name="type" type="java.lang.reflect.Type"/>
1670      <param name="annotation" type="java.lang.annotation.Annotation"/>
1671      <doc>
1672      <![CDATA[Gets a key for an injection type and an annotation.]]>
1673      </doc>
1674    </method>
1675    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1676      abstract="false" native="false" synchronized="false"
1677      static="true" final="false" visibility="public"
1678      deprecated="not deprecated">
1679      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1680      <doc>
1681      <![CDATA[Gets a key for an injection type.]]>
1682      </doc>
1683    </method>
1684    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1685      abstract="false" native="false" synchronized="false"
1686      static="true" final="false" visibility="public"
1687      deprecated="not deprecated">
1688      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1689      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1690      <doc>
1691      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1692      </doc>
1693    </method>
1694    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1695      abstract="false" native="false" synchronized="false"
1696      static="true" final="false" visibility="public"
1697      deprecated="not deprecated">
1698      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1699      <param name="annotation" type="java.lang.annotation.Annotation"/>
1700      <doc>
1701      <![CDATA[Gets a key for an injection type and an annotation.]]>
1702      </doc>
1703    </method>
1704    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1705      abstract="false" native="false" synchronized="false"
1706      static="false" final="false" visibility="public"
1707      deprecated="not deprecated">
1708      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1709      <doc>
1710      <![CDATA[Returns a new key of the specified type with the same annotation as this
1711 key.
1712
1713 @since 3.0]]>
1714      </doc>
1715    </method>
1716    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1717      abstract="false" native="false" synchronized="false"
1718      static="false" final="false" visibility="public"
1719      deprecated="not deprecated">
1720      <param name="type" type="java.lang.reflect.Type"/>
1721      <doc>
1722      <![CDATA[Returns a new key of the specified type with the same annotation as this
1723 key.
1724
1725 @since 3.0]]>
1726      </doc>
1727    </method>
1728    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1729      abstract="false" native="false" synchronized="false"
1730      static="false" final="false" visibility="public"
1731      deprecated="not deprecated">
1732      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1733      <doc>
1734      <![CDATA[Returns a new key of the specified type with the same annotation as this
1735 key.
1736
1737 @since 3.0]]>
1738      </doc>
1739    </method>
1740    <method name="hasAttributes" return="boolean"
1741      abstract="false" native="false" synchronized="false"
1742      static="false" final="false" visibility="public"
1743      deprecated="not deprecated">
1744      <doc>
1745      <![CDATA[Returns true if this key has annotation attributes.
1746
1747 @since 3.0]]>
1748      </doc>
1749    </method>
1750    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1751      abstract="false" native="false" synchronized="false"
1752      static="false" final="false" visibility="public"
1753      deprecated="not deprecated">
1754      <doc>
1755      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1756 annotation type.
1757
1758 @since 3.0]]>
1759      </doc>
1760    </method>
1761    <doc>
1762    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1763 Matches the type and annotation at a point of injection.
1764
1765 <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1766 match:
1767
1768 <pre>
1769   {@literal @}Inject
1770   public void setService({@literal @}Transactional Service service) {
1771     ...
1772   }
1773 </pre>
1774
1775 <p>{@code Key} supports generic types via subclassing just like {@link
1776 TypeLiteral}.
1777
1778 <p>Keys do not differentiate between primitive types (int, char, etc.) and
1779 their correpsonding wrapper types (Integer, Character, etc.). Primitive
1780 types will be replaced with their wrapper types when keys are created.
1781
1782 @author crazybob@google.com (Bob Lee)]]>
1783    </doc>
1784  </class>
1785  <!-- end class com.google.inject.Key -->
1786  <!-- start interface com.google.inject.MembersInjector -->
1787  <interface name="MembersInjector"    abstract="true"
1788    static="false" final="false" visibility="public"
1789    deprecated="not deprecated">
1790    <method name="injectMembers"
1791      abstract="true" native="false" synchronized="false"
1792      static="false" final="false" visibility="public"
1793      deprecated="not deprecated">
1794      <param name="instance" type="T"/>
1795      <doc>
1796      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1797 absence of an injectable constructor.
1798
1799 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1800 performing constructor injection), so if you're able to let Guice create all your objects for
1801 you, you'll never need to use this method.
1802
1803 @param instance to inject members on. May be {@code null}.]]>
1804      </doc>
1805    </method>
1806    <doc>
1807    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1808 presence or absence of an injectable constructor.
1809
1810 @param <T> type to inject members of
1811
1812 @author crazybob@google.com (Bob Lee)
1813 @author jessewilson@google.com (Jesse Wilson)
1814 @since 2.0]]>
1815    </doc>
1816  </interface>
1817  <!-- end interface com.google.inject.MembersInjector -->
1818  <!-- start interface com.google.inject.Module -->
1819  <interface name="Module"    abstract="true"
1820    static="false" final="false" visibility="public"
1821    deprecated="not deprecated">
1822    <method name="configure"
1823      abstract="true" native="false" synchronized="false"
1824      static="false" final="false" visibility="public"
1825      deprecated="not deprecated">
1826      <param name="binder" type="com.google.inject.Binder"/>
1827      <doc>
1828      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1829
1830 <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1831 {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1832 discovered.]]>
1833      </doc>
1834    </method>
1835    <doc>
1836    <![CDATA[A module contributes configuration information, typically interface
1837 bindings, which will be used to create an {@link Injector}. A Guice-based
1838 application is ultimately composed of little more than a set of
1839 {@code Module}s and some bootstrapping code.
1840
1841 <p>Your Module classes can use a more streamlined syntax by extending
1842 {@link AbstractModule} rather than implementing this interface directly.
1843
1844 <p>In addition to the bindings configured via {@link #configure}, bindings
1845 will be created for all methods annotated with {@literal @}{@link Provides}.
1846 Use scope and binding annotations on these methods to configure the
1847 bindings.]]>
1848    </doc>
1849  </interface>
1850  <!-- end interface com.google.inject.Module -->
1851  <!-- start class com.google.inject.OutOfScopeException -->
1852  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1853    abstract="false"
1854    static="false" final="true" visibility="public"
1855    deprecated="not deprecated">
1856    <constructor name="OutOfScopeException" type="java.lang.String"
1857      static="false" final="false" visibility="public"
1858      deprecated="not deprecated">
1859    </constructor>
1860    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1861      static="false" final="false" visibility="public"
1862      deprecated="not deprecated">
1863    </constructor>
1864    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1865      static="false" final="false" visibility="public"
1866      deprecated="not deprecated">
1867    </constructor>
1868    <doc>
1869    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1870 object while the scope in question is not currently active.
1871
1872 @author kevinb@google.com (Kevin Bourrillion)
1873 @since 2.0]]>
1874    </doc>
1875  </class>
1876  <!-- end class com.google.inject.OutOfScopeException -->
1877  <!-- start interface com.google.inject.PrivateBinder -->
1878  <interface name="PrivateBinder"    abstract="true"
1879    static="false" final="false" visibility="public"
1880    deprecated="not deprecated">
1881    <implements name="com.google.inject.Binder"/>
1882    <method name="expose"
1883      abstract="true" native="false" synchronized="false"
1884      static="false" final="false" visibility="public"
1885      deprecated="not deprecated">
1886      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1887      <doc>
1888      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1889      </doc>
1890    </method>
1891    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1892      abstract="true" native="false" synchronized="false"
1893      static="false" final="false" visibility="public"
1894      deprecated="not deprecated">
1895      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1896      <doc>
1897      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1898 com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1899 binding annotation.]]>
1900      </doc>
1901    </method>
1902    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1903      abstract="true" native="false" synchronized="false"
1904      static="false" final="false" visibility="public"
1905      deprecated="not deprecated">
1906      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1907      <doc>
1908      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1909 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1910 binding annotation.]]>
1911      </doc>
1912    </method>
1913    <method name="withSource" return="com.google.inject.PrivateBinder"
1914      abstract="true" native="false" synchronized="false"
1915      static="false" final="false" visibility="public"
1916      deprecated="not deprecated">
1917      <param name="source" type="java.lang.Object"/>
1918    </method>
1919    <method name="skipSources" return="com.google.inject.PrivateBinder"
1920      abstract="true" native="false" synchronized="false"
1921      static="false" final="false" visibility="public"
1922      deprecated="not deprecated">
1923      <param name="classesToSkip" type="java.lang.Class[]"/>
1924    </method>
1925    <doc>
1926    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1927 {@link com.google.inject.PrivateModule PrivateModule} for details.
1928
1929 @author jessewilson@google.com (Jesse Wilson)
1930 @since 2.0]]>
1931    </doc>
1932  </interface>
1933  <!-- end interface com.google.inject.PrivateBinder -->
1934  <!-- start class com.google.inject.PrivateModule -->
1935  <class name="PrivateModule" extends="java.lang.Object"
1936    abstract="true"
1937    static="false" final="false" visibility="public"
1938    deprecated="not deprecated">
1939    <implements name="com.google.inject.Module"/>
1940    <constructor name="PrivateModule"
1941      static="false" final="false" visibility="public"
1942      deprecated="not deprecated">
1943    </constructor>
1944    <method name="configure"
1945      abstract="false" native="false" synchronized="true"
1946      static="false" final="true" visibility="public"
1947      deprecated="not deprecated">
1948      <param name="binder" type="com.google.inject.Binder"/>
1949    </method>
1950    <method name="configure"
1951      abstract="true" native="false" synchronized="false"
1952      static="false" final="false" visibility="protected"
1953      deprecated="not deprecated">
1954      <doc>
1955      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1956 expose()} to make the bindings in this module available externally.]]>
1957      </doc>
1958    </method>
1959    <method name="expose"
1960      abstract="false" native="false" synchronized="false"
1961      static="false" final="true" visibility="protected"
1962      deprecated="not deprecated">
1963      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1964      <doc>
1965      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1966      </doc>
1967    </method>
1968    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1969      abstract="false" native="false" synchronized="false"
1970      static="false" final="true" visibility="protected"
1971      deprecated="not deprecated">
1972      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1973      <doc>
1974      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1975 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1976 binding annotation.]]>
1977      </doc>
1978    </method>
1979    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1980      abstract="false" native="false" synchronized="false"
1981      static="false" final="true" visibility="protected"
1982      deprecated="not deprecated">
1983      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1984      <doc>
1985      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1986 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1987 binding annotation.]]>
1988      </doc>
1989    </method>
1990    <method name="binder" return="com.google.inject.PrivateBinder"
1991      abstract="false" native="false" synchronized="false"
1992      static="false" final="true" visibility="protected"
1993      deprecated="not deprecated">
1994      <doc>
1995      <![CDATA[Returns the current binder.]]>
1996      </doc>
1997    </method>
1998    <method name="bindScope"
1999      abstract="false" native="false" synchronized="false"
2000      static="false" final="true" visibility="protected"
2001      deprecated="not deprecated">
2002      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2003      <param name="scope" type="com.google.inject.Scope"/>
2004      <doc>
2005      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
2006      </doc>
2007    </method>
2008    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
2009      abstract="false" native="false" synchronized="false"
2010      static="false" final="true" visibility="protected"
2011      deprecated="not deprecated">
2012      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2013      <doc>
2014      <![CDATA[@see Binder#bind(Key)]]>
2015      </doc>
2016    </method>
2017    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2018      abstract="false" native="false" synchronized="false"
2019      static="false" final="true" visibility="protected"
2020      deprecated="not deprecated">
2021      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2022      <doc>
2023      <![CDATA[@see Binder#bind(TypeLiteral)]]>
2024      </doc>
2025    </method>
2026    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2027      abstract="false" native="false" synchronized="false"
2028      static="false" final="true" visibility="protected"
2029      deprecated="not deprecated">
2030      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
2031      <doc>
2032      <![CDATA[@see Binder#bind(Class)]]>
2033      </doc>
2034    </method>
2035    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
2036      abstract="false" native="false" synchronized="false"
2037      static="false" final="true" visibility="protected"
2038      deprecated="not deprecated">
2039      <doc>
2040      <![CDATA[@see Binder#bindConstant()]]>
2041      </doc>
2042    </method>
2043    <method name="install"
2044      abstract="false" native="false" synchronized="false"
2045      static="false" final="true" visibility="protected"
2046      deprecated="not deprecated">
2047      <param name="module" type="com.google.inject.Module"/>
2048      <doc>
2049      <![CDATA[@see Binder#install(Module)]]>
2050      </doc>
2051    </method>
2052    <method name="addError"
2053      abstract="false" native="false" synchronized="false"
2054      static="false" final="true" visibility="protected"
2055      deprecated="not deprecated">
2056      <param name="message" type="java.lang.String"/>
2057      <param name="arguments" type="java.lang.Object[]"/>
2058      <doc>
2059      <![CDATA[@see Binder#addError(String, Object[])]]>
2060      </doc>
2061    </method>
2062    <method name="addError"
2063      abstract="false" native="false" synchronized="false"
2064      static="false" final="true" visibility="protected"
2065      deprecated="not deprecated">
2066      <param name="t" type="java.lang.Throwable"/>
2067      <doc>
2068      <![CDATA[@see Binder#addError(Throwable)]]>
2069      </doc>
2070    </method>
2071    <method name="addError"
2072      abstract="false" native="false" synchronized="false"
2073      static="false" final="true" visibility="protected"
2074      deprecated="not deprecated">
2075      <param name="message" type="com.google.inject.spi.Message"/>
2076      <doc>
2077      <![CDATA[@see Binder#addError(Message)]]>
2078      </doc>
2079    </method>
2080    <method name="requestInjection"
2081      abstract="false" native="false" synchronized="false"
2082      static="false" final="true" visibility="protected"
2083      deprecated="not deprecated">
2084      <param name="instance" type="java.lang.Object"/>
2085      <doc>
2086      <![CDATA[@see Binder#requestInjection(Object)]]>
2087      </doc>
2088    </method>
2089    <method name="requestStaticInjection"
2090      abstract="false" native="false" synchronized="false"
2091      static="false" final="true" visibility="protected"
2092      deprecated="not deprecated">
2093      <param name="types" type="java.lang.Class[]"/>
2094      <doc>
2095      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2096      </doc>
2097    </method>
2098    <method name="bindInterceptor"
2099      abstract="false" native="false" synchronized="false"
2100      static="false" final="true" visibility="protected"
2101      deprecated="not deprecated">
2102      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2103      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2104      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2105      <doc>
2106      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2107      </doc>
2108    </method>
2109    <method name="requireBinding"
2110      abstract="false" native="false" synchronized="false"
2111      static="false" final="true" visibility="protected"
2112      deprecated="not deprecated">
2113      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2114      <doc>
2115      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2116      </doc>
2117    </method>
2118    <method name="requireBinding"
2119      abstract="false" native="false" synchronized="false"
2120      static="false" final="true" visibility="protected"
2121      deprecated="not deprecated">
2122      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2123      <doc>
2124      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2125      </doc>
2126    </method>
2127    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2128      abstract="false" native="false" synchronized="false"
2129      static="false" final="true" visibility="protected"
2130      deprecated="not deprecated">
2131      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2132      <doc>
2133      <![CDATA[@see Binder#getProvider(Key)]]>
2134      </doc>
2135    </method>
2136    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2137      abstract="false" native="false" synchronized="false"
2138      static="false" final="true" visibility="protected"
2139      deprecated="not deprecated">
2140      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2141      <doc>
2142      <![CDATA[@see Binder#getProvider(Class)]]>
2143      </doc>
2144    </method>
2145    <method name="convertToTypes"
2146      abstract="false" native="false" synchronized="false"
2147      static="false" final="true" visibility="protected"
2148      deprecated="not deprecated">
2149      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2150      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2151      <doc>
2152      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2153      </doc>
2154    </method>
2155    <method name="currentStage" return="com.google.inject.Stage"
2156      abstract="false" native="false" synchronized="false"
2157      static="false" final="true" visibility="protected"
2158      deprecated="not deprecated">
2159      <doc>
2160      <![CDATA[@see Binder#currentStage()]]>
2161      </doc>
2162    </method>
2163    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2164      abstract="false" native="false" synchronized="false"
2165      static="false" final="false" visibility="protected"
2166      deprecated="not deprecated">
2167      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2168      <doc>
2169      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2170      </doc>
2171    </method>
2172    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2173      abstract="false" native="false" synchronized="false"
2174      static="false" final="false" visibility="protected"
2175      deprecated="not deprecated">
2176      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2177      <doc>
2178      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2179      </doc>
2180    </method>
2181    <method name="bindListener"
2182      abstract="false" native="false" synchronized="false"
2183      static="false" final="false" visibility="protected"
2184      deprecated="not deprecated">
2185      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2186      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2187      <doc>
2188      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2189      </doc>
2190    </method>
2191    <method name="bindListener"
2192      abstract="false" native="false" synchronized="false"
2193      static="false" final="false" visibility="protected"
2194      deprecated="not deprecated">
2195      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
2196      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
2197      <doc>
2198      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)]]>
2199      </doc>
2200    </method>
2201    <doc>
2202    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2203 that are explicitly exposed will be available to other modules and to the users of the injector.
2204 This module may expose the bindings it creates and the bindings of the modules it installs.
2205
2206 <p>A private module can be nested within a regular module or within another private module using
2207 {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2208 type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2209 nest multiple private modules, the result is a tree of environments where the injector's
2210 environment is the root.
2211
2212 <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2213 com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2214 Exposed} annotation:
2215
2216 <pre>
2217 public class FooBarBazModule extends PrivateModule {
2218   protected void configure() {
2219     bind(Foo.class).to(RealFoo.class);
2220     expose(Foo.class);
2221
2222     install(new TransactionalBarModule());
2223     expose(Bar.class).annotatedWith(Transactional.class);
2224
2225     bind(SomeImplementationDetail.class);
2226     install(new MoreImplementationDetailsModule());
2227   }
2228
2229   {@literal @}Provides {@literal @}Exposed
2230   public Baz provideBaz() {
2231     return new SuperBaz();
2232   }
2233 }
2234 </pre>
2235
2236 <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2237 injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2238 root environment. Such bindings are shared among all environments in the tree.
2239
2240 <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2241 module will be unique to its environment. But a binding for the same type in a different private
2242 module will yield a different instance.
2243
2244 <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2245 access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2246 gets access to all bindings in the child environment.
2247
2248 <p>To promote a just-in-time binding to an explicit binding, bind it:
2249 <pre>
2250   bind(FooImpl.class);
2251 </pre>
2252
2253 @author jessewilson@google.com (Jesse Wilson)
2254 @since 2.0]]>
2255    </doc>
2256  </class>
2257  <!-- end class com.google.inject.PrivateModule -->
2258  <!-- start class com.google.inject.ProvidedBy -->
2259  <class name="ProvidedBy"    abstract="true"
2260    static="false" final="false" visibility="public"
2261    deprecated="not deprecated">
2262    <implements name="java.lang.annotation.Annotation"/>
2263    <doc>
2264    <![CDATA[A pointer to the default provider type for a type.
2265
2266 @author crazybob@google.com (Bob Lee)]]>
2267    </doc>
2268  </class>
2269  <!-- end class com.google.inject.ProvidedBy -->
2270  <!-- start interface com.google.inject.Provider -->
2271  <interface name="Provider"    abstract="true"
2272    static="false" final="false" visibility="public"
2273    deprecated="not deprecated">
2274    <implements name="javax.inject.Provider&lt;T&gt;"/>
2275    <method name="get" return="T"
2276      abstract="true" native="false" synchronized="false"
2277      static="false" final="false" visibility="public"
2278      deprecated="not deprecated">
2279      <doc>
2280      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2281
2282 @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2283     in question is not currently active
2284 @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2285     and throwables to describe why provision failed.]]>
2286      </doc>
2287    </method>
2288    <doc>
2289    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2290 by Guice:
2291
2292 <ul>
2293 <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2294 is insufficient for a particular binding, the module can specify a custom {@code Provider}
2295 instead, to control exactly how Guice creates or obtains instances for the binding.
2296
2297 <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2298 rather than having a {@code T} injected directly.  This may give you access to multiple
2299 instances, instances you wish to safely mutate and discard, instances which are out of scope
2300 (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2301 instances that will be initialized lazily.
2302
2303 <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2304 when to delegate to the backing provider and when to provide the instance some other way.
2305
2306 <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2307 for a given key, via the {@link Injector#getProvider} methods.
2308 </ul>
2309
2310 @param <T> the type of object this provides
2311
2312 @author crazybob@google.com (Bob Lee)]]>
2313    </doc>
2314  </interface>
2315  <!-- end interface com.google.inject.Provider -->
2316  <!-- start class com.google.inject.Provides -->
2317  <class name="Provides"    abstract="true"
2318    static="false" final="false" visibility="public"
2319    deprecated="not deprecated">
2320    <implements name="java.lang.annotation.Annotation"/>
2321    <doc>
2322    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2323 type is bound to its returned value. Guice will pass dependencies to the method as parameters.
2324
2325 @author crazybob@google.com (Bob Lee)
2326 @since 2.0]]>
2327    </doc>
2328  </class>
2329  <!-- end class com.google.inject.Provides -->
2330  <!-- start class com.google.inject.ProvisionException -->
2331  <class name="ProvisionException" extends="java.lang.RuntimeException"
2332    abstract="false"
2333    static="false" final="true" visibility="public"
2334    deprecated="not deprecated">
2335    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2336      static="false" final="false" visibility="public"
2337      deprecated="not deprecated">
2338      <doc>
2339      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2340      </doc>
2341    </constructor>
2342    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2343      static="false" final="false" visibility="public"
2344      deprecated="not deprecated">
2345    </constructor>
2346    <constructor name="ProvisionException" type="java.lang.String"
2347      static="false" final="false" visibility="public"
2348      deprecated="not deprecated">
2349    </constructor>
2350    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2351      abstract="false" native="false" synchronized="false"
2352      static="false" final="false" visibility="public"
2353      deprecated="not deprecated">
2354      <doc>
2355      <![CDATA[Returns messages for the errors that caused this exception.]]>
2356      </doc>
2357    </method>
2358    <method name="getMessage" return="java.lang.String"
2359      abstract="false" native="false" synchronized="false"
2360      static="false" final="false" visibility="public"
2361      deprecated="not deprecated">
2362    </method>
2363    <doc>
2364    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2365
2366 @author kevinb@google.com (Kevin Bourrillion)
2367 @author jessewilson@google.com (Jesse Wilson)
2368 @since 2.0]]>
2369    </doc>
2370  </class>
2371  <!-- end class com.google.inject.ProvisionException -->
2372  <!-- start interface com.google.inject.Scope -->
2373  <interface name="Scope"    abstract="true"
2374    static="false" final="false" visibility="public"
2375    deprecated="not deprecated">
2376    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2377      abstract="true" native="false" synchronized="false"
2378      static="false" final="false" visibility="public"
2379      deprecated="not deprecated">
2380      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2381      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2382      <doc>
2383      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2384 If an object does not exist in this scope, the provider can use the given
2385 unscoped provider to retrieve one.
2386
2387 <p>Scope implementations are strongly encouraged to override
2388 {@link Object#toString} in the returned provider and include the backing
2389 provider's {@code toString()} output.
2390
2391 @param key binding key
2392 @param unscoped locates an instance when one doesn't already exist in this
2393  scope.
2394 @return a new provider which only delegates to the given unscoped provider
2395  when an instance of the requested object doesn't already exist in this
2396  scope]]>
2397      </doc>
2398    </method>
2399    <method name="toString" return="java.lang.String"
2400      abstract="true" native="false" synchronized="false"
2401      static="false" final="false" visibility="public"
2402      deprecated="not deprecated">
2403      <doc>
2404      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2405 scopes that ship with guice use the descriptions
2406 {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2407 {@code "ServletScopes.REQUEST"}.]]>
2408      </doc>
2409    </method>
2410    <doc>
2411    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2412 By default, an instance created by the {@link Injector} has <i>no scope</i>,
2413 meaning it has no state from the framework's perspective -- the
2414 {@code Injector} creates it, injects it once into the class that required it,
2415 and then immediately forgets it. Associating a scope with a particular
2416 binding allows the created instance to be "remembered" and possibly used
2417 again for other injections.
2418
2419 <p>An example of a scope is {@link Scopes#SINGLETON}.
2420
2421 @author crazybob@google.com (Bob Lee)]]>
2422    </doc>
2423  </interface>
2424  <!-- end interface com.google.inject.Scope -->
2425  <!-- start class com.google.inject.ScopeAnnotation -->
2426  <class name="ScopeAnnotation"    abstract="true"
2427    static="false" final="false" visibility="public"
2428    deprecated="not deprecated">
2429    <implements name="java.lang.annotation.Annotation"/>
2430    <doc>
2431    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2432 may apply to a single implementation class. You must also annotate scope
2433 annotations with {@code @Retention(RUNTIME)}. For example:
2434
2435 <pre>
2436   {@code @}Retention(RUNTIME)
2437   {@code @}Target(TYPE, METHOD)
2438   {@code @}ScopeAnnotation
2439   public {@code @}interface SessionScoped {}
2440 </pre>
2441
2442 @author crazybob@google.com (Bob Lee)]]>
2443    </doc>
2444  </class>
2445  <!-- end class com.google.inject.ScopeAnnotation -->
2446  <!-- start class com.google.inject.Scopes -->
2447  <class name="Scopes" extends="java.lang.Object"
2448    abstract="false"
2449    static="false" final="false" visibility="public"
2450    deprecated="not deprecated">
2451    <method name="isSingleton" return="boolean"
2452      abstract="false" native="false" synchronized="false"
2453      static="true" final="false" visibility="public"
2454      deprecated="not deprecated">
2455      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2456      <doc>
2457      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2458 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2459 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2460 also true if the target binding is singleton-scoped.
2461
2462 @since 3.0]]>
2463      </doc>
2464    </method>
2465    <method name="isScoped" return="boolean"
2466      abstract="false" native="false" synchronized="false"
2467      static="true" final="false" visibility="public"
2468      deprecated="not deprecated">
2469      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2470      <param name="scope" type="com.google.inject.Scope"/>
2471      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2472      <doc>
2473      <![CDATA[Returns true if {@code binding} has the given scope. If the binding is a {@link
2474 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2475 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2476 also true if the target binding has the given scope.
2477
2478 @param binding binding to check
2479 @param scope scope implementation instance
2480 @param scopeAnnotation scope annotation class]]>
2481      </doc>
2482    </method>
2483    <method name="isCircularProxy" return="boolean"
2484      abstract="false" native="false" synchronized="false"
2485      static="true" final="false" visibility="public"
2486      deprecated="not deprecated">
2487      <param name="object" type="java.lang.Object"/>
2488      <doc>
2489      <![CDATA[Returns true if the object is a proxy for a circular dependency,
2490 constructed by Guice because it encountered a circular dependency. Scope
2491 implementations should be careful to <b>not cache circular proxies</b>,
2492 because the proxies are not intended for general purpose use. (They are
2493 designed just to fulfill the immediate injection, not all injections.
2494 Caching them can lead to IllegalArgumentExceptions or ClassCastExceptions.)]]>
2495      </doc>
2496    </method>
2497    <field name="SINGLETON" type="com.google.inject.Scope"
2498      transient="false" volatile="false"
2499      static="true" final="true" visibility="public"
2500      deprecated="not deprecated">
2501      <doc>
2502      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2503      </doc>
2504    </field>
2505    <field name="NO_SCOPE" type="com.google.inject.Scope"
2506      transient="false" volatile="false"
2507      static="true" final="true" visibility="public"
2508      deprecated="not deprecated">
2509      <doc>
2510      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2511 Injector obtains an instance of an object with "no scope", it injects this
2512 instance then immediately forgets it.  When the next request for the same
2513 binding arrives it will need to obtain the instance over again.
2514
2515 <p>This exists only in case a class has been annotated with a scope
2516 annotation such as {@link Singleton @Singleton}, and you need to override
2517 this to "no scope" in your binding.
2518
2519 @since 2.0]]>
2520      </doc>
2521    </field>
2522    <doc>
2523    <![CDATA[Built-in scope implementations.
2524
2525 @author crazybob@google.com (Bob Lee)]]>
2526    </doc>
2527  </class>
2528  <!-- end class com.google.inject.Scopes -->
2529  <!-- start class com.google.inject.Singleton -->
2530  <class name="Singleton"    abstract="true"
2531    static="false" final="false" visibility="public"
2532    deprecated="not deprecated">
2533    <implements name="java.lang.annotation.Annotation"/>
2534    <doc>
2535    <![CDATA[Apply this to implementation classes when you want only one instance
2536 (per {@link Injector}) to be reused for all injections for that binding.
2537
2538 @author crazybob@google.com (Bob Lee)]]>
2539    </doc>
2540  </class>
2541  <!-- end class com.google.inject.Singleton -->
2542  <!-- start class com.google.inject.Stage -->
2543  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2544    abstract="false"
2545    static="false" final="true" visibility="public"
2546    deprecated="not deprecated">
2547    <method name="values" return="com.google.inject.Stage[]"
2548      abstract="false" native="false" synchronized="false"
2549      static="true" final="false" visibility="public"
2550      deprecated="not deprecated">
2551    </method>
2552    <method name="valueOf" return="com.google.inject.Stage"
2553      abstract="false" native="false" synchronized="false"
2554      static="true" final="false" visibility="public"
2555      deprecated="not deprecated">
2556      <param name="name" type="java.lang.String"/>
2557    </method>
2558    <doc>
2559    <![CDATA[The stage we're running in.
2560
2561 @author crazybob@google.com (Bob Lee)]]>
2562    </doc>
2563  </class>
2564  <!-- end class com.google.inject.Stage -->
2565  <!-- start class com.google.inject.TypeLiteral -->
2566  <class name="TypeLiteral" extends="java.lang.Object"
2567    abstract="false"
2568    static="false" final="false" visibility="public"
2569    deprecated="not deprecated">
2570    <constructor name="TypeLiteral"
2571      static="false" final="false" visibility="protected"
2572      deprecated="not deprecated">
2573      <doc>
2574      <![CDATA[Constructs a new type literal. Derives represented class from type
2575 parameter.
2576
2577 <p>Clients create an empty anonymous subclass. Doing so embeds the type
2578 parameter in the anonymous class's type hierarchy so we can reconstitute it
2579 at runtime despite erasure.]]>
2580      </doc>
2581    </constructor>
2582    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2583      abstract="false" native="false" synchronized="false"
2584      static="false" final="true" visibility="public"
2585      deprecated="not deprecated">
2586      <doc>
2587      <![CDATA[Returns the raw (non-generic) type for this type.
2588
2589 @since 2.0]]>
2590      </doc>
2591    </method>
2592    <method name="getType" return="java.lang.reflect.Type"
2593      abstract="false" native="false" synchronized="false"
2594      static="false" final="true" visibility="public"
2595      deprecated="not deprecated">
2596      <doc>
2597      <![CDATA[Gets underlying {@code Type} instance.]]>
2598      </doc>
2599    </method>
2600    <method name="hashCode" return="int"
2601      abstract="false" native="false" synchronized="false"
2602      static="false" final="true" visibility="public"
2603      deprecated="not deprecated">
2604    </method>
2605    <method name="equals" return="boolean"
2606      abstract="false" native="false" synchronized="false"
2607      static="false" final="true" visibility="public"
2608      deprecated="not deprecated">
2609      <param name="o" type="java.lang.Object"/>
2610    </method>
2611    <method name="toString" return="java.lang.String"
2612      abstract="false" native="false" synchronized="false"
2613      static="false" final="true" visibility="public"
2614      deprecated="not deprecated">
2615    </method>
2616    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2617      abstract="false" native="false" synchronized="false"
2618      static="true" final="false" visibility="public"
2619      deprecated="not deprecated">
2620      <param name="type" type="java.lang.reflect.Type"/>
2621      <doc>
2622      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2623      </doc>
2624    </method>
2625    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2626      abstract="false" native="false" synchronized="false"
2627      static="true" final="false" visibility="public"
2628      deprecated="not deprecated">
2629      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2630      <doc>
2631      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2632      </doc>
2633    </method>
2634    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2635      abstract="false" native="false" synchronized="false"
2636      static="false" final="false" visibility="public"
2637      deprecated="not deprecated">
2638      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2639      <doc>
2640      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2641 ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2642 Iterable.class}.
2643
2644 @param supertype a superclass of, or interface implemented by, this.
2645 @since 2.0]]>
2646      </doc>
2647    </method>
2648    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2649      abstract="false" native="false" synchronized="false"
2650      static="false" final="false" visibility="public"
2651      deprecated="not deprecated">
2652      <param name="field" type="java.lang.reflect.Field"/>
2653      <doc>
2654      <![CDATA[Returns the resolved generic type of {@code field}.
2655
2656 @param field a field defined by this or any superclass.
2657 @since 2.0]]>
2658      </doc>
2659    </method>
2660    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2661      abstract="false" native="false" synchronized="false"
2662      static="false" final="false" visibility="public"
2663      deprecated="not deprecated">
2664      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2665      <doc>
2666      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2667
2668 @param methodOrConstructor a method or constructor defined by this or any supertype.
2669 @since 2.0]]>
2670      </doc>
2671    </method>
2672    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2673      abstract="false" native="false" synchronized="false"
2674      static="false" final="false" visibility="public"
2675      deprecated="not deprecated">
2676      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2677      <doc>
2678      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2679
2680 @param methodOrConstructor a method or constructor defined by this or any supertype.
2681 @since 2.0]]>
2682      </doc>
2683    </method>
2684    <method name="getReturnType" 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="method" type="java.lang.reflect.Method"/>
2689      <doc>
2690      <![CDATA[Returns the resolved generic return type of {@code method}.
2691
2692 @param method a method defined by this or any supertype.
2693 @since 2.0]]>
2694      </doc>
2695    </method>
2696    <doc>
2697    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2698 represent generic types, so this class does. Forces clients to create a
2699 subclass of this class which enables retrieval the type information even at
2700 runtime.
2701
2702 <p>For example, to create a type literal for {@code List<String>}, you can
2703 create an empty anonymous inner class:
2704
2705 <p>
2706 {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2707
2708 <p>Along with modeling generic types, this class can resolve type parameters.
2709 For example, to figure out what type {@code keySet()} returns on a {@code
2710 Map<Integer, String>}, use this code:<pre>   {@code
2711
2712   TypeLiteral<Map<Integer, String>> mapType
2713       = new TypeLiteral<Map<Integer, String>>() {};
2714   TypeLiteral<?> keySetType
2715       = mapType.getReturnType(Map.class.getMethod("keySet"));
2716   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2717
2718 @author crazybob@google.com (Bob Lee)
2719 @author jessewilson@google.com (Jesse Wilson)]]>
2720    </doc>
2721  </class>
2722  <!-- end class com.google.inject.TypeLiteral -->
2723</package>
2724<package name="com.google.inject.assistedinject">
2725  <!-- start class com.google.inject.assistedinject.Assisted -->
2726  <class name="Assisted"    abstract="true"
2727    static="false" final="false" visibility="public"
2728    deprecated="not deprecated">
2729    <implements name="java.lang.annotation.Annotation"/>
2730    <doc>
2731    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2732
2733 @author jmourits@google.com (Jerome Mourits)
2734 @author jessewilson@google.com (Jesse Wilson)]]>
2735    </doc>
2736  </class>
2737  <!-- end class com.google.inject.assistedinject.Assisted -->
2738  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2739  <class name="AssistedInject"    abstract="true"
2740    static="false" final="false" visibility="public"
2741    deprecated="not deprecated">
2742    <implements name="java.lang.annotation.Annotation"/>
2743    <doc>
2744    <![CDATA[<p>
2745 When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2746 {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2747 parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2748 annotations. The assisted parameters must exactly match one corresponding factory method within
2749 the factory interface, but the parameters do not need to be in the same order. Constructors
2750 annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2751 (such as AOP).
2752
2753 <p>
2754 <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2755 annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2756 parameters must exactly match one corresponding factory method within the factory interface and
2757 all must be in the same order as listed in the factory. In this backwards compatable mode,
2758 constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2759 none of the benefits.
2760
2761 <p>
2762 Constructor parameters must be either supplied by the factory interface and marked with
2763 <code>@Assisted</code>, or they must be injectable.
2764
2765 @author jmourits@google.com (Jerome Mourits)
2766 @author jessewilson@google.com (Jesse Wilson)]]>
2767    </doc>
2768  </class>
2769  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2770  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2771  <interface name="AssistedInjectBinding"    abstract="true"
2772    static="false" final="false" visibility="public"
2773    deprecated="not deprecated">
2774    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2775      abstract="true" native="false" synchronized="false"
2776      static="false" final="false" visibility="public"
2777      deprecated="not deprecated">
2778      <doc>
2779      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2780      </doc>
2781    </method>
2782    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2783      abstract="true" native="false" synchronized="false"
2784      static="false" final="false" visibility="public"
2785      deprecated="not deprecated">
2786      <doc>
2787      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2788      </doc>
2789    </method>
2790    <doc>
2791    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2792
2793 @param <T> The fully qualified type of the factory.
2794
2795 @since 3.0
2796 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2797    </doc>
2798  </interface>
2799  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2800  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2801  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2802    static="false" final="false" visibility="public"
2803    deprecated="not deprecated">
2804    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2805    <method name="visit" return="V"
2806      abstract="true" native="false" synchronized="false"
2807      static="false" final="false" visibility="public"
2808      deprecated="not deprecated">
2809      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2810      <doc>
2811      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2812      </doc>
2813    </method>
2814    <doc>
2815    <![CDATA[A visitor for the AssistedInject extension.
2816 <p>
2817 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2818 {@link FactoryModuleBuilder} will be visited through this interface.
2819
2820 @since 3.0
2821 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2822    </doc>
2823  </interface>
2824  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2825  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2826  <interface name="AssistedMethod"    abstract="true"
2827    static="false" final="false" visibility="public"
2828    deprecated="not deprecated">
2829    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2830      abstract="true" native="false" synchronized="false"
2831      static="false" final="false" visibility="public"
2832      deprecated="not deprecated">
2833      <doc>
2834      <![CDATA[Returns the factory method that is being assisted.]]>
2835      </doc>
2836    </method>
2837    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2838      abstract="true" native="false" synchronized="false"
2839      static="false" final="false" visibility="public"
2840      deprecated="not deprecated">
2841      <doc>
2842      <![CDATA[Returns the implementation type that will be created when the method is
2843 used.]]>
2844      </doc>
2845    </method>
2846    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2847      abstract="true" native="false" synchronized="false"
2848      static="false" final="false" visibility="public"
2849      deprecated="not deprecated">
2850      <doc>
2851      <![CDATA[Returns the constructor that will be used to construct instances of the
2852 implementation.]]>
2853      </doc>
2854    </method>
2855    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2856      abstract="true" native="false" synchronized="false"
2857      static="false" final="false" visibility="public"
2858      deprecated="not deprecated">
2859      <doc>
2860      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2861 the implementation.]]>
2862      </doc>
2863    </method>
2864    <doc>
2865    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2866
2867 @since 3.0
2868 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2869    </doc>
2870  </interface>
2871  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2872  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2873  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2874    abstract="false"
2875    static="false" final="true" visibility="public"
2876    deprecated="not deprecated">
2877    <constructor name="FactoryModuleBuilder"
2878      static="false" final="false" visibility="public"
2879      deprecated="not deprecated">
2880    </constructor>
2881    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2882      abstract="false" native="false" synchronized="false"
2883      static="false" final="false" visibility="public"
2884      deprecated="not deprecated">
2885      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2886      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2887      <doc>
2888      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2889      </doc>
2890    </method>
2891    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2892      abstract="false" native="false" synchronized="false"
2893      static="false" final="false" visibility="public"
2894      deprecated="not deprecated">
2895      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2896      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2897      <doc>
2898      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2899      </doc>
2900    </method>
2901    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2902      abstract="false" native="false" synchronized="false"
2903      static="false" final="false" visibility="public"
2904      deprecated="not deprecated">
2905      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2906      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2907      <doc>
2908      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2909      </doc>
2910    </method>
2911    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2912      abstract="false" native="false" synchronized="false"
2913      static="false" final="false" visibility="public"
2914      deprecated="not deprecated">
2915      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2916      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2917      <doc>
2918      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2919      </doc>
2920    </method>
2921    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2922      abstract="false" native="false" synchronized="false"
2923      static="false" final="false" visibility="public"
2924      deprecated="not deprecated">
2925      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2926      <param name="annotation" type="java.lang.annotation.Annotation"/>
2927      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2928      <doc>
2929      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2930      </doc>
2931    </method>
2932    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2933      abstract="false" native="false" synchronized="false"
2934      static="false" final="false" visibility="public"
2935      deprecated="not deprecated">
2936      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2937      <param name="annotation" type="java.lang.annotation.Annotation"/>
2938      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2939      <doc>
2940      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2941      </doc>
2942    </method>
2943    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2944      abstract="false" native="false" synchronized="false"
2945      static="false" final="false" visibility="public"
2946      deprecated="not deprecated">
2947      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2948      <param name="annotation" type="java.lang.annotation.Annotation"/>
2949      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2950      <doc>
2951      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2952      </doc>
2953    </method>
2954    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2955      abstract="false" native="false" synchronized="false"
2956      static="false" final="false" visibility="public"
2957      deprecated="not deprecated">
2958      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2959      <param name="annotation" type="java.lang.annotation.Annotation"/>
2960      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2961      <doc>
2962      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2963      </doc>
2964    </method>
2965    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2966      abstract="false" native="false" synchronized="false"
2967      static="false" final="false" visibility="public"
2968      deprecated="not deprecated">
2969      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2970      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2971      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2972      <doc>
2973      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2974      </doc>
2975    </method>
2976    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2977      abstract="false" native="false" synchronized="false"
2978      static="false" final="false" visibility="public"
2979      deprecated="not deprecated">
2980      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2981      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2982      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2983      <doc>
2984      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2985      </doc>
2986    </method>
2987    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2988      abstract="false" native="false" synchronized="false"
2989      static="false" final="false" visibility="public"
2990      deprecated="not deprecated">
2991      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2992      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2993      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2994      <doc>
2995      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2996      </doc>
2997    </method>
2998    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2999      abstract="false" native="false" synchronized="false"
3000      static="false" final="false" visibility="public"
3001      deprecated="not deprecated">
3002      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3003      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3004      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3005      <doc>
3006      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3007      </doc>
3008    </method>
3009    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3010      abstract="false" native="false" synchronized="false"
3011      static="false" final="false" visibility="public"
3012      deprecated="not deprecated">
3013      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3014      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3015      <doc>
3016      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3017      </doc>
3018    </method>
3019    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3020      abstract="false" native="false" synchronized="false"
3021      static="false" final="false" visibility="public"
3022      deprecated="not deprecated">
3023      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3024      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3025      <doc>
3026      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3027      </doc>
3028    </method>
3029    <method name="build" return="com.google.inject.Module"
3030      abstract="false" native="false" synchronized="false"
3031      static="false" final="false" visibility="public"
3032      deprecated="not deprecated">
3033      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
3034      <doc>
3035      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3036      </doc>
3037    </method>
3038    <method name="build" return="com.google.inject.Module"
3039      abstract="false" native="false" synchronized="false"
3040      static="false" final="false" visibility="public"
3041      deprecated="not deprecated">
3042      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3043      <doc>
3044      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3045      </doc>
3046    </method>
3047    <method name="build" return="com.google.inject.Module"
3048      abstract="false" native="false" synchronized="false"
3049      static="false" final="false" visibility="public"
3050      deprecated="not deprecated">
3051      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
3052    </method>
3053    <doc>
3054    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
3055 construct objects.
3056
3057 <h3>Defining a factory</h3>
3058 Create an interface whose methods return the constructed type, or any of its supertypes. The
3059 method's parameters are the arguments required to build the constructed type.
3060
3061 <pre>public interface PaymentFactory {
3062   Payment create(Date startDate, Money amount);
3063 }</pre>
3064
3065 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3066 or <i>newPayment</i>.
3067
3068 <h3>Creating a type that accepts factory parameters</h3>
3069 {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
3070 Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
3071 should have parameters that match each of the factory method's parameters. Each factory-supplied
3072 parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
3073 parameter is not bound by your application's modules.
3074
3075 <pre>public class RealPayment implements Payment {
3076   {@literal @}Inject
3077   public RealPayment(
3078      CreditService creditService,
3079      AuthService authService,
3080      <strong>{@literal @}Assisted Date startDate</strong>,
3081      <strong>{@literal @}Assisted Money amount</strong>) {
3082     ...
3083   }
3084 }</pre>
3085
3086 <h3>Multiple factory methods for the same type</h3>
3087 If the factory contains many methods that return the same type, you can create multiple
3088 constructors in your concrete class, each constructor marked with with
3089 {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
3090 factory methods.
3091
3092 <pre>public interface PaymentFactory {
3093    Payment create(Date startDate, Money amount);
3094    Payment createWithoutDate(Money amount);
3095 }
3096
3097 public class RealPayment implements Payment {
3098  {@literal @}AssistedInject
3099   public RealPayment(
3100      CreditService creditService,
3101      AuthService authService,
3102     <strong>{@literal @}Assisted Date startDate</strong>,
3103     <strong>{@literal @}Assisted Money amount</strong>) {
3104     ...
3105   }
3106
3107  {@literal @}AssistedInject
3108   public RealPayment(
3109      CreditService creditService,
3110      AuthService authService,
3111     <strong>{@literal @}Assisted Money amount</strong>) {
3112     ...
3113   }
3114 }</pre>
3115
3116 <h3>Configuring simple factories</h3>
3117 In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3118 factory:
3119
3120 <pre>install(new FactoryModuleBuilder()
3121     .implement(Payment.class, RealPayment.class)
3122     .build(PaymentFactory.class);</pre>
3123
3124 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3125 factory cannot be used until the injector has been initialized.
3126
3127 <h3>Configuring complex factories</h3>
3128 Factories can create an arbitrary number of objects, one per each method.  Each factory
3129 method can be configured using <code>.implement</code>.
3130
3131 <pre>public interface OrderFactory {
3132    Payment create(Date startDate, Money amount);
3133    Shipment create(Customer customer, Item item);
3134    Receipt create(Payment payment, Shipment shipment);
3135 }
3136
3137 [...]
3138
3139 install(new FactoryModuleBuilder()
3140     .implement(Payment.class, RealPayment.class)
3141     // excluding .implement for Shipment means the implementation class
3142     // will be 'Shipment' itself, which is legal if it's not an interface.
3143     .implement(Receipt.class, RealReceipt.class)
3144     .build(OrderFactory.class);</pre>
3145 </pre>
3146
3147 <h3>Using the factory</h3>
3148 Inject your factory into your application classes. When you use the factory, your arguments
3149 will be combined with values from the injector to construct an instance.
3150
3151 <pre>public class PaymentAction {
3152   {@literal @}Inject private PaymentFactory paymentFactory;
3153
3154   public void doPayment(Money amount) {
3155     Payment payment = paymentFactory.create(new Date(), amount);
3156     payment.apply();
3157   }
3158 }</pre>
3159
3160 <h3>Making parameter types distinct</h3>
3161 The types of the factory method's parameters must be distinct. To use multiple parameters of
3162 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3163 parameters. The names must be applied to the factory method's parameters:
3164
3165 <pre>public interface PaymentFactory {
3166   Payment create(
3167       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3168       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3169       Money amount);
3170 } </pre>
3171
3172 ...and to the concrete type's constructor parameters:
3173
3174 <pre>public class RealPayment implements Payment {
3175   {@literal @}Inject
3176   public RealPayment(
3177      CreditService creditService,
3178      AuthService authService,
3179      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3180      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3181      <strong>{@literal @}Assisted</strong> Money amount) {
3182     ...
3183   }
3184 }</pre>
3185
3186 <h3>Values are created by Guice</h3>
3187 Returned factories use child injectors to create values. The values are eligible for method
3188 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3189 returned.
3190
3191 <h3>More configuration options</h3>
3192 In addition to simply specifying an implementation class for any returned type, factories' return
3193 values can be automatic or can be configured to use annotations:
3194 <p/>
3195 If you just want to return the types specified in the factory, do not configure any
3196 implementations:
3197
3198 <pre>public interface FruitFactory {
3199   Apple getApple(Color color);
3200 }
3201 ...
3202 protected void configure() {
3203   install(new FactoryModuleBuilder().build(FruitFactory.class));
3204 }</pre>
3205
3206 Note that any type returned by the factory in this manner needs to be an implementation class.
3207 <p/>
3208 To return two different implementations for the same interface from your factory, use binding
3209 annotations on your return types:
3210
3211 <pre>interface CarFactory {
3212   {@literal @}Named("fast") Car getFastCar(Color color);
3213   {@literal @}Named("clean") Car getCleanCar(Color color);
3214 }
3215 ...
3216 protected void configure() {
3217   install(new FactoryModuleBuilder()
3218       .implement(Car.class, Names.named("fast"), Porsche.class)
3219       .implement(Car.class, Names.named("clean"), Prius.class)
3220       .build(CarFactory.class));
3221 }</pre>
3222
3223 <h3>Implementation limitations</h3>
3224 As a limitation of the implementation, it is prohibited to declare a factory method that
3225 accepts a {@code Provider} as one of its arguments.
3226
3227 @since 3.0
3228 @author schmitt@google.com (Peter Schmitt)]]>
3229    </doc>
3230  </class>
3231  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3232  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3233  <class name="FactoryProvider" extends="java.lang.Object"
3234    abstract="false"
3235    static="false" final="false" visibility="public"
3236    deprecated="use {@link FactoryModuleBuilder} instead.">
3237    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3238    <implements name="com.google.inject.spi.HasDependencies"/>
3239    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3240      abstract="false" native="false" synchronized="false"
3241      static="true" final="false" visibility="public"
3242      deprecated="not deprecated">
3243      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3244      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3245    </method>
3246    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3247      abstract="false" native="false" synchronized="false"
3248      static="true" final="false" visibility="public"
3249      deprecated="not deprecated">
3250      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3251      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3252    </method>
3253    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3254      abstract="false" native="false" synchronized="false"
3255      static="false" final="false" visibility="public"
3256      deprecated="not deprecated">
3257    </method>
3258    <method name="get" return="F"
3259      abstract="false" native="false" synchronized="false"
3260      static="false" final="false" visibility="public"
3261      deprecated="not deprecated">
3262    </method>
3263    <doc>
3264    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3265 additional capability.
3266
3267 <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3268 construct objects.
3269
3270 <h3>Defining a factory</h3>
3271 Create an interface whose methods return the constructed type, or any of its supertypes. The
3272 method's parameters are the arguments required to build the constructed type.
3273 <pre>public interface PaymentFactory {
3274   Payment create(Date startDate, Money amount);
3275 }</pre>
3276 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3277 or <i>newPayment</i>.
3278
3279 <h3>Creating a type that accepts factory parameters</h3>
3280 {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3281 constructor. In addition to injector-supplied parameters, the constructor should have
3282 parameters that match each of the factory method's parameters. Each factory-supplied parameter
3283 requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3284 is not bound by your application's modules.
3285 <pre>public class RealPayment implements Payment {
3286   {@literal @}Inject
3287   public RealPayment(
3288      CreditService creditService,
3289      AuthService authService,
3290      <strong>{@literal @}Assisted Date startDate</strong>,
3291      <strong>{@literal @}Assisted Money amount</strong>) {
3292     ...
3293   }
3294 }</pre>
3295 Any parameter that permits a null value should also be annotated {@code @Nullable}.
3296
3297 <h3>Configuring factories</h3>
3298 In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3299 factory:
3300 <pre>bind(PaymentFactory.class).toProvider(
3301     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3302 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3303 factory cannot be used until the injector has been initialized.
3304
3305 <h3>Using the factory</h3>
3306 Inject your factory into your application classes. When you use the factory, your arguments
3307 will be combined with values from the injector to construct an instance.
3308 <pre>public class PaymentAction {
3309   {@literal @}Inject private PaymentFactory paymentFactory;
3310
3311   public void doPayment(Money amount) {
3312     Payment payment = paymentFactory.create(new Date(), amount);
3313     payment.apply();
3314   }
3315 }</pre>
3316
3317 <h3>Making parameter types distinct</h3>
3318 The types of the factory method's parameters must be distinct. To use multiple parameters of
3319 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3320 parameters. The names must be applied to the factory method's parameters:
3321
3322 <pre>public interface PaymentFactory {
3323   Payment create(
3324       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3325       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3326       Money amount);
3327 } </pre>
3328 ...and to the concrete type's constructor parameters:
3329 <pre>public class RealPayment implements Payment {
3330   {@literal @}Inject
3331   public RealPayment(
3332      CreditService creditService,
3333      AuthService authService,
3334      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3335      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3336      <strong>{@literal @}Assisted</strong> Money amount) {
3337     ...
3338   }
3339 }</pre>
3340
3341 <h3>Values are created by Guice</h3>
3342 Returned factories use child injectors to create values. The values are eligible for method
3343 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3344 returned.
3345
3346 <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3347 Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3348 {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3349
3350 <p>Instead of matching factory method arguments to constructor parameters using their names, the
3351 <strong>parameters are matched by their order</strong>. The first factory method argument is
3352 used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3353 effect.
3354
3355 <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3356 method interception. They do receive post-construction member injection.
3357
3358 @param <F> The factory interface
3359
3360 @author jmourits@google.com (Jerome Mourits)
3361 @author jessewilson@google.com (Jesse Wilson)
3362 @author dtm@google.com (Daniel Martin)
3363
3364 @deprecated use {@link FactoryModuleBuilder} instead.]]>
3365    </doc>
3366  </class>
3367  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3368</package>
3369<package name="com.google.inject.binder">
3370  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3371  <interface name="AnnotatedBindingBuilder"    abstract="true"
3372    static="false" final="false" visibility="public"
3373    deprecated="not deprecated">
3374    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3375    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3376      abstract="true" native="false" synchronized="false"
3377      static="false" final="false" visibility="public"
3378      deprecated="not deprecated">
3379      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3380      <doc>
3381      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3382      </doc>
3383    </method>
3384    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3385      abstract="true" native="false" synchronized="false"
3386      static="false" final="false" visibility="public"
3387      deprecated="not deprecated">
3388      <param name="annotation" type="java.lang.annotation.Annotation"/>
3389      <doc>
3390      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3391      </doc>
3392    </method>
3393    <doc>
3394    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3395
3396 @author crazybob@google.com (Bob Lee)]]>
3397    </doc>
3398  </interface>
3399  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3400  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3401  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3402    static="false" final="false" visibility="public"
3403    deprecated="not deprecated">
3404    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3405      abstract="true" native="false" synchronized="false"
3406      static="false" final="false" visibility="public"
3407      deprecated="not deprecated">
3408      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3409      <doc>
3410      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3411      </doc>
3412    </method>
3413    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3414      abstract="true" native="false" synchronized="false"
3415      static="false" final="false" visibility="public"
3416      deprecated="not deprecated">
3417      <param name="annotation" type="java.lang.annotation.Annotation"/>
3418      <doc>
3419      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3420      </doc>
3421    </method>
3422    <doc>
3423    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3424
3425 @author crazybob@google.com (Bob Lee)]]>
3426    </doc>
3427  </interface>
3428  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3429  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3430  <interface name="AnnotatedElementBuilder"    abstract="true"
3431    static="false" final="false" visibility="public"
3432    deprecated="not deprecated">
3433    <method name="annotatedWith"
3434      abstract="true" native="false" synchronized="false"
3435      static="false" final="false" visibility="public"
3436      deprecated="not deprecated">
3437      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3438      <doc>
3439      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3440      </doc>
3441    </method>
3442    <method name="annotatedWith"
3443      abstract="true" native="false" synchronized="false"
3444      static="false" final="false" visibility="public"
3445      deprecated="not deprecated">
3446      <param name="annotation" type="java.lang.annotation.Annotation"/>
3447      <doc>
3448      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3449      </doc>
3450    </method>
3451    <doc>
3452    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3453
3454 @author jessewilson@google.com (Jesse Wilson)
3455 @since 2.0]]>
3456    </doc>
3457  </interface>
3458  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3459  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3460  <interface name="ConstantBindingBuilder"    abstract="true"
3461    static="false" final="false" visibility="public"
3462    deprecated="not deprecated">
3463    <method name="to"
3464      abstract="true" native="false" synchronized="false"
3465      static="false" final="false" visibility="public"
3466      deprecated="not deprecated">
3467      <param name="value" type="java.lang.String"/>
3468      <doc>
3469      <![CDATA[Binds constant to the given value.]]>
3470      </doc>
3471    </method>
3472    <method name="to"
3473      abstract="true" native="false" synchronized="false"
3474      static="false" final="false" visibility="public"
3475      deprecated="not deprecated">
3476      <param name="value" type="int"/>
3477      <doc>
3478      <![CDATA[Binds constant to the given value.]]>
3479      </doc>
3480    </method>
3481    <method name="to"
3482      abstract="true" native="false" synchronized="false"
3483      static="false" final="false" visibility="public"
3484      deprecated="not deprecated">
3485      <param name="value" type="long"/>
3486      <doc>
3487      <![CDATA[Binds constant to the given value.]]>
3488      </doc>
3489    </method>
3490    <method name="to"
3491      abstract="true" native="false" synchronized="false"
3492      static="false" final="false" visibility="public"
3493      deprecated="not deprecated">
3494      <param name="value" type="boolean"/>
3495      <doc>
3496      <![CDATA[Binds constant to the given value.]]>
3497      </doc>
3498    </method>
3499    <method name="to"
3500      abstract="true" native="false" synchronized="false"
3501      static="false" final="false" visibility="public"
3502      deprecated="not deprecated">
3503      <param name="value" type="double"/>
3504      <doc>
3505      <![CDATA[Binds constant to the given value.]]>
3506      </doc>
3507    </method>
3508    <method name="to"
3509      abstract="true" native="false" synchronized="false"
3510      static="false" final="false" visibility="public"
3511      deprecated="not deprecated">
3512      <param name="value" type="float"/>
3513      <doc>
3514      <![CDATA[Binds constant to the given value.]]>
3515      </doc>
3516    </method>
3517    <method name="to"
3518      abstract="true" native="false" synchronized="false"
3519      static="false" final="false" visibility="public"
3520      deprecated="not deprecated">
3521      <param name="value" type="short"/>
3522      <doc>
3523      <![CDATA[Binds constant to the given value.]]>
3524      </doc>
3525    </method>
3526    <method name="to"
3527      abstract="true" native="false" synchronized="false"
3528      static="false" final="false" visibility="public"
3529      deprecated="not deprecated">
3530      <param name="value" type="char"/>
3531      <doc>
3532      <![CDATA[Binds constant to the given value.]]>
3533      </doc>
3534    </method>
3535    <method name="to"
3536      abstract="true" native="false" synchronized="false"
3537      static="false" final="false" visibility="public"
3538      deprecated="not deprecated">
3539      <param name="value" type="byte"/>
3540      <doc>
3541      <![CDATA[Binds constant to the given value.
3542
3543 @since 3.0]]>
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="java.lang.Class&lt;?&gt;"/>
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="E extends java.lang.Enum&lt;E&gt;"/>
3560      <doc>
3561      <![CDATA[Binds constant to the given value.]]>
3562      </doc>
3563    </method>
3564    <doc>
3565    <![CDATA[Binds to a constant value.]]>
3566    </doc>
3567  </interface>
3568  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3569  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3570  <interface name="LinkedBindingBuilder"    abstract="true"
3571    static="false" final="false" visibility="public"
3572    deprecated="not deprecated">
3573    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3574    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3575      abstract="true" native="false" synchronized="false"
3576      static="false" final="false" visibility="public"
3577      deprecated="not deprecated">
3578      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3579      <doc>
3580      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3581      </doc>
3582    </method>
3583    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3584      abstract="true" native="false" synchronized="false"
3585      static="false" final="false" visibility="public"
3586      deprecated="not deprecated">
3587      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3588      <doc>
3589      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3590      </doc>
3591    </method>
3592    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3593      abstract="true" native="false" synchronized="false"
3594      static="false" final="false" visibility="public"
3595      deprecated="not deprecated">
3596      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3597      <doc>
3598      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3599      </doc>
3600    </method>
3601    <method name="toInstance"
3602      abstract="true" native="false" synchronized="false"
3603      static="false" final="false" visibility="public"
3604      deprecated="not deprecated">
3605      <param name="instance" type="T"/>
3606      <doc>
3607      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3608
3609 @see com.google.inject.Injector#injectMembers]]>
3610      </doc>
3611    </method>
3612    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3613      abstract="true" native="false" synchronized="false"
3614      static="false" final="false" visibility="public"
3615      deprecated="not deprecated">
3616      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3617      <doc>
3618      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3619
3620 @see com.google.inject.Injector#injectMembers]]>
3621      </doc>
3622    </method>
3623    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3624      abstract="true" native="false" synchronized="false"
3625      static="false" final="false" visibility="public"
3626      deprecated="not deprecated">
3627      <param name="provider" type="javax.inject.Provider&lt;? extends T&gt;"/>
3628      <doc>
3629      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3630
3631 @see com.google.inject.Injector#injectMembers]]>
3632      </doc>
3633    </method>
3634    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3635      abstract="true" native="false" synchronized="false"
3636      static="false" final="false" visibility="public"
3637      deprecated="not deprecated">
3638      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3639      <doc>
3640      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3641      </doc>
3642    </method>
3643    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3644      abstract="true" native="false" synchronized="false"
3645      static="false" final="false" visibility="public"
3646      deprecated="not deprecated">
3647      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3648      <doc>
3649      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3650      </doc>
3651    </method>
3652    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3653      abstract="true" native="false" synchronized="false"
3654      static="false" final="false" visibility="public"
3655      deprecated="not deprecated">
3656      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3657      <doc>
3658      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3659      </doc>
3660    </method>
3661    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3662      abstract="true" native="false" synchronized="false"
3663      static="false" final="false" visibility="public"
3664      deprecated="not deprecated">
3665      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3666      <doc>
3667      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3668
3669 @since 3.0]]>
3670      </doc>
3671    </method>
3672    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3673      abstract="true" native="false" synchronized="false"
3674      static="false" final="false" visibility="public"
3675      deprecated="not deprecated">
3676      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3677      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3678      <doc>
3679      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3680
3681 @since 3.0]]>
3682      </doc>
3683    </method>
3684    <doc>
3685    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3686
3687 @author crazybob@google.com (Bob Lee)]]>
3688    </doc>
3689  </interface>
3690  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3691  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3692  <interface name="ScopedBindingBuilder"    abstract="true"
3693    static="false" final="false" visibility="public"
3694    deprecated="not deprecated">
3695    <method name="in"
3696      abstract="true" native="false" synchronized="false"
3697      static="false" final="false" visibility="public"
3698      deprecated="not deprecated">
3699      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3700      <doc>
3701      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3702      </doc>
3703    </method>
3704    <method name="in"
3705      abstract="true" native="false" synchronized="false"
3706      static="false" final="false" visibility="public"
3707      deprecated="not deprecated">
3708      <param name="scope" type="com.google.inject.Scope"/>
3709      <doc>
3710      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3711      </doc>
3712    </method>
3713    <method name="asEagerSingleton"
3714      abstract="true" native="false" synchronized="false"
3715      static="false" final="false" visibility="public"
3716      deprecated="not deprecated">
3717      <doc>
3718      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3719 singleton-scoped binding upon creation. Useful for application
3720 initialization logic.  See the EDSL examples at
3721 {@link com.google.inject.Binder}.]]>
3722      </doc>
3723    </method>
3724    <doc>
3725    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3726
3727 @author crazybob@google.com (Bob Lee)]]>
3728    </doc>
3729  </interface>
3730  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3731</package>
3732<package name="com.google.inject.grapher">
3733  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher -->
3734  <class name="AbstractInjectorGrapher" extends="java.lang.Object"
3735    abstract="true"
3736    static="false" final="false" visibility="public"
3737    deprecated="not deprecated">
3738    <implements name="com.google.inject.grapher.InjectorGrapher"/>
3739    <constructor name="AbstractInjectorGrapher"
3740      static="false" final="false" visibility="public"
3741      deprecated="not deprecated">
3742    </constructor>
3743    <constructor name="AbstractInjectorGrapher" type="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3744      static="false" final="false" visibility="public"
3745      deprecated="not deprecated">
3746    </constructor>
3747    <method name="graph"
3748      abstract="false" native="false" synchronized="false"
3749      static="false" final="true" visibility="public"
3750      deprecated="not deprecated">
3751      <param name="injector" type="com.google.inject.Injector"/>
3752      <exception name="IOException" type="java.io.IOException"/>
3753    </method>
3754    <method name="graph"
3755      abstract="false" native="false" synchronized="false"
3756      static="false" final="true" visibility="public"
3757      deprecated="not deprecated">
3758      <param name="injector" type="com.google.inject.Injector"/>
3759      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
3760      <exception name="IOException" type="java.io.IOException"/>
3761    </method>
3762    <method name="reset"
3763      abstract="true" native="false" synchronized="false"
3764      static="false" final="false" visibility="protected"
3765      deprecated="not deprecated">
3766      <exception name="IOException" type="java.io.IOException"/>
3767      <doc>
3768      <![CDATA[Resets the state of the grapher before rendering a new graph.]]>
3769      </doc>
3770    </method>
3771    <method name="newInterfaceNode"
3772      abstract="true" native="false" synchronized="false"
3773      static="false" final="false" visibility="protected"
3774      deprecated="not deprecated">
3775      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
3776      <exception name="IOException" type="java.io.IOException"/>
3777      <doc>
3778      <![CDATA[Adds a new interface node to the graph.]]>
3779      </doc>
3780    </method>
3781    <method name="newImplementationNode"
3782      abstract="true" native="false" synchronized="false"
3783      static="false" final="false" visibility="protected"
3784      deprecated="not deprecated">
3785      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
3786      <exception name="IOException" type="java.io.IOException"/>
3787      <doc>
3788      <![CDATA[Adds a new implementation node to the graph.]]>
3789      </doc>
3790    </method>
3791    <method name="newInstanceNode"
3792      abstract="true" native="false" synchronized="false"
3793      static="false" final="false" visibility="protected"
3794      deprecated="not deprecated">
3795      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
3796      <exception name="IOException" type="java.io.IOException"/>
3797      <doc>
3798      <![CDATA[Adds a new instance node to the graph.]]>
3799      </doc>
3800    </method>
3801    <method name="newDependencyEdge"
3802      abstract="true" native="false" synchronized="false"
3803      static="false" final="false" visibility="protected"
3804      deprecated="not deprecated">
3805      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
3806      <exception name="IOException" type="java.io.IOException"/>
3807      <doc>
3808      <![CDATA[Adds a new dependency edge to the graph.]]>
3809      </doc>
3810    </method>
3811    <method name="newBindingEdge"
3812      abstract="true" native="false" synchronized="false"
3813      static="false" final="false" visibility="protected"
3814      deprecated="not deprecated">
3815      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
3816      <exception name="IOException" type="java.io.IOException"/>
3817      <doc>
3818      <![CDATA[Adds a new binding edge to the graph.]]>
3819      </doc>
3820    </method>
3821    <method name="postProcess"
3822      abstract="true" native="false" synchronized="false"
3823      static="false" final="false" visibility="protected"
3824      deprecated="not deprecated">
3825      <exception name="IOException" type="java.io.IOException"/>
3826      <doc>
3827      <![CDATA[Performs any post processing required after all nodes and edges have been added.]]>
3828      </doc>
3829    </method>
3830    <doc>
3831    <![CDATA[Abstract injector grapher that builds the dependency graph but doesn't render it.
3832
3833 @author bojand@google.com (Bojan Djordjevic)]]>
3834    </doc>
3835  </class>
3836  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher -->
3837  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3838  <class name="AbstractInjectorGrapher.GrapherParameters" extends="java.lang.Object"
3839    abstract="false"
3840    static="true" final="true" visibility="public"
3841    deprecated="not deprecated">
3842    <constructor name="GrapherParameters"
3843      static="false" final="false" visibility="public"
3844      deprecated="not deprecated">
3845    </constructor>
3846    <method name="getRootKeySetCreator" return="com.google.inject.grapher.RootKeySetCreator"
3847      abstract="false" native="false" synchronized="false"
3848      static="false" final="false" visibility="public"
3849      deprecated="not deprecated">
3850    </method>
3851    <method name="setRootKeySetCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3852      abstract="false" native="false" synchronized="false"
3853      static="false" final="false" visibility="public"
3854      deprecated="not deprecated">
3855      <param name="rootKeySetCreator" type="com.google.inject.grapher.RootKeySetCreator"/>
3856    </method>
3857    <method name="getAliasCreator" return="com.google.inject.grapher.AliasCreator"
3858      abstract="false" native="false" synchronized="false"
3859      static="false" final="false" visibility="public"
3860      deprecated="not deprecated">
3861    </method>
3862    <method name="setAliasCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3863      abstract="false" native="false" synchronized="false"
3864      static="false" final="false" visibility="public"
3865      deprecated="not deprecated">
3866      <param name="aliasCreator" type="com.google.inject.grapher.AliasCreator"/>
3867    </method>
3868    <method name="getNodeCreator" return="com.google.inject.grapher.NodeCreator"
3869      abstract="false" native="false" synchronized="false"
3870      static="false" final="false" visibility="public"
3871      deprecated="not deprecated">
3872    </method>
3873    <method name="setNodeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3874      abstract="false" native="false" synchronized="false"
3875      static="false" final="false" visibility="public"
3876      deprecated="not deprecated">
3877      <param name="nodeCreator" type="com.google.inject.grapher.NodeCreator"/>
3878    </method>
3879    <method name="getEdgeCreator" return="com.google.inject.grapher.EdgeCreator"
3880      abstract="false" native="false" synchronized="false"
3881      static="false" final="false" visibility="public"
3882      deprecated="not deprecated">
3883    </method>
3884    <method name="setEdgeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3885      abstract="false" native="false" synchronized="false"
3886      static="false" final="false" visibility="public"
3887      deprecated="not deprecated">
3888      <param name="edgeCreator" type="com.google.inject.grapher.EdgeCreator"/>
3889    </method>
3890    <doc>
3891    <![CDATA[Parameters used to override default settings of the grapher.]]>
3892    </doc>
3893  </class>
3894  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3895  <!-- start class com.google.inject.grapher.Alias -->
3896  <class name="Alias" extends="java.lang.Object"
3897    abstract="false"
3898    static="false" final="true" visibility="public"
3899    deprecated="not deprecated">
3900    <constructor name="Alias" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
3901      static="false" final="false" visibility="public"
3902      deprecated="not deprecated">
3903    </constructor>
3904    <method name="getFromId" return="com.google.inject.grapher.NodeId"
3905      abstract="false" native="false" synchronized="false"
3906      static="false" final="false" visibility="public"
3907      deprecated="not deprecated">
3908    </method>
3909    <method name="getToId" return="com.google.inject.grapher.NodeId"
3910      abstract="false" native="false" synchronized="false"
3911      static="false" final="false" visibility="public"
3912      deprecated="not deprecated">
3913    </method>
3914    <doc>
3915    <![CDATA[Alias between two nodes. Causes the 'from' node to be aliased with the 'to' node, which means
3916 that the 'from' node is not rendered and all edges going to it instead go to the 'to' node.
3917
3918 @author bojand@google.com (Bojan Djordjevic)]]>
3919    </doc>
3920  </class>
3921  <!-- end class com.google.inject.grapher.Alias -->
3922  <!-- start interface com.google.inject.grapher.AliasCreator -->
3923  <interface name="AliasCreator"    abstract="true"
3924    static="false" final="false" visibility="public"
3925    deprecated="not deprecated">
3926    <method name="createAliases" return="java.lang.Iterable&lt;com.google.inject.grapher.Alias&gt;"
3927      abstract="true" native="false" synchronized="false"
3928      static="false" final="false" visibility="public"
3929      deprecated="not deprecated">
3930      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
3931      <doc>
3932      <![CDATA[Returns aliases for the given dependency graph. The aliases do not need to be transitively
3933 resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
3934 responsibility of the caller to resolve this to (X to Z) and (Y to Z).
3935
3936 @param bindings bindings that make up the dependency graph
3937 @return aliases that should be applied on the graph]]>
3938      </doc>
3939    </method>
3940    <doc>
3941    <![CDATA[Creator of node aliases. Used by dependency graphers to merge nodes in the internal Guice graph
3942 into a single node on the rendered graph.
3943
3944 @author bojand@google.com (Bojan Djordjevic)]]>
3945    </doc>
3946  </interface>
3947  <!-- end interface com.google.inject.grapher.AliasCreator -->
3948  <!-- start class com.google.inject.grapher.BindingEdge -->
3949  <class name="BindingEdge" extends="com.google.inject.grapher.Edge"
3950    abstract="false"
3951    static="false" final="false" visibility="public"
3952    deprecated="not deprecated">
3953    <constructor name="BindingEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.grapher.BindingEdge.Type"
3954      static="false" final="false" visibility="public"
3955      deprecated="not deprecated">
3956    </constructor>
3957    <method name="getType" return="com.google.inject.grapher.BindingEdge.Type"
3958      abstract="false" native="false" synchronized="false"
3959      static="false" final="false" visibility="public"
3960      deprecated="not deprecated">
3961    </method>
3962    <method name="equals" return="boolean"
3963      abstract="false" native="false" synchronized="false"
3964      static="false" final="false" visibility="public"
3965      deprecated="not deprecated">
3966      <param name="obj" type="java.lang.Object"/>
3967    </method>
3968    <method name="hashCode" return="int"
3969      abstract="false" native="false" synchronized="false"
3970      static="false" final="false" visibility="public"
3971      deprecated="not deprecated">
3972    </method>
3973    <method name="toString" return="java.lang.String"
3974      abstract="false" native="false" synchronized="false"
3975      static="false" final="false" visibility="public"
3976      deprecated="not deprecated">
3977    </method>
3978    <method name="copy" return="com.google.inject.grapher.Edge"
3979      abstract="false" native="false" synchronized="false"
3980      static="false" final="false" visibility="public"
3981      deprecated="not deprecated">
3982      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
3983      <param name="toId" type="com.google.inject.grapher.NodeId"/>
3984    </method>
3985    <doc>
3986    <![CDATA[Edge that connects an interface to the type or instance that is bound to implement it.
3987
3988 @author phopkins@gmail.com (Pete Hopkins)]]>
3989    </doc>
3990  </class>
3991  <!-- end class com.google.inject.grapher.BindingEdge -->
3992  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
3993  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
3994    abstract="false"
3995    static="true" final="true" visibility="public"
3996    deprecated="not deprecated">
3997    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
3998      abstract="false" native="false" synchronized="false"
3999      static="true" final="false" visibility="public"
4000      deprecated="not deprecated">
4001    </method>
4002    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
4003      abstract="false" native="false" synchronized="false"
4004      static="true" final="false" visibility="public"
4005      deprecated="not deprecated">
4006      <param name="name" type="java.lang.String"/>
4007    </method>
4008    <doc>
4009    <![CDATA[Classification for what kind of binding this edge represents.]]>
4010    </doc>
4011  </class>
4012  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
4013  <!-- start class com.google.inject.grapher.DefaultRootKeySetCreator -->
4014  <class name="DefaultRootKeySetCreator" extends="java.lang.Object"
4015    abstract="false"
4016    static="false" final="false" visibility="public"
4017    deprecated="not deprecated">
4018    <implements name="com.google.inject.grapher.RootKeySetCreator"/>
4019    <constructor name="DefaultRootKeySetCreator"
4020      static="false" final="false" visibility="public"
4021      deprecated="not deprecated">
4022    </constructor>
4023    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4024      abstract="false" native="false" synchronized="false"
4025      static="false" final="false" visibility="public"
4026      deprecated="not deprecated">
4027      <param name="injector" type="com.google.inject.Injector"/>
4028    </method>
4029    <doc>
4030    <![CDATA[Root key set creator that starts with all types that are not Guice internal types or the
4031 {@link Logger} type.
4032
4033 @author bojand@google.com (Bojan Djordjevic)]]>
4034    </doc>
4035  </class>
4036  <!-- end class com.google.inject.grapher.DefaultRootKeySetCreator -->
4037  <!-- start class com.google.inject.grapher.DependencyEdge -->
4038  <class name="DependencyEdge" extends="com.google.inject.grapher.Edge"
4039    abstract="false"
4040    static="false" final="false" visibility="public"
4041    deprecated="not deprecated">
4042    <constructor name="DependencyEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.spi.InjectionPoint"
4043      static="false" final="false" visibility="public"
4044      deprecated="not deprecated">
4045    </constructor>
4046    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
4047      abstract="false" native="false" synchronized="false"
4048      static="false" final="false" visibility="public"
4049      deprecated="not deprecated">
4050    </method>
4051    <method name="equals" return="boolean"
4052      abstract="false" native="false" synchronized="false"
4053      static="false" final="false" visibility="public"
4054      deprecated="not deprecated">
4055      <param name="obj" type="java.lang.Object"/>
4056    </method>
4057    <method name="hashCode" return="int"
4058      abstract="false" native="false" synchronized="false"
4059      static="false" final="false" visibility="public"
4060      deprecated="not deprecated">
4061    </method>
4062    <method name="toString" return="java.lang.String"
4063      abstract="false" native="false" synchronized="false"
4064      static="false" final="false" visibility="public"
4065      deprecated="not deprecated">
4066    </method>
4067    <method name="copy" return="com.google.inject.grapher.Edge"
4068      abstract="false" native="false" synchronized="false"
4069      static="false" final="false" visibility="public"
4070      deprecated="not deprecated">
4071      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4072      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4073    </method>
4074    <doc>
4075    <![CDATA[Edge from a class or {@link InjectionPoint} to the interface node that will satisfy the
4076 dependency.
4077
4078 @author phopkins@gmail.com (Pete Hopkins)]]>
4079    </doc>
4080  </class>
4081  <!-- end class com.google.inject.grapher.DependencyEdge -->
4082  <!-- start class com.google.inject.grapher.Edge -->
4083  <class name="Edge" extends="java.lang.Object"
4084    abstract="true"
4085    static="false" final="false" visibility="public"
4086    deprecated="not deprecated">
4087    <constructor name="Edge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4088      static="false" final="false" visibility="protected"
4089      deprecated="not deprecated">
4090    </constructor>
4091    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4092      abstract="false" native="false" synchronized="false"
4093      static="false" final="false" visibility="public"
4094      deprecated="not deprecated">
4095    </method>
4096    <method name="getToId" return="com.google.inject.grapher.NodeId"
4097      abstract="false" native="false" synchronized="false"
4098      static="false" final="false" visibility="public"
4099      deprecated="not deprecated">
4100    </method>
4101    <method name="equals" return="boolean"
4102      abstract="false" native="false" synchronized="false"
4103      static="false" final="false" visibility="public"
4104      deprecated="not deprecated">
4105      <param name="obj" type="java.lang.Object"/>
4106    </method>
4107    <method name="hashCode" return="int"
4108      abstract="false" native="false" synchronized="false"
4109      static="false" final="false" visibility="public"
4110      deprecated="not deprecated">
4111    </method>
4112    <method name="copy" return="com.google.inject.grapher.Edge"
4113      abstract="true" native="false" synchronized="false"
4114      static="false" final="false" visibility="public"
4115      deprecated="not deprecated">
4116      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4117      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4118      <doc>
4119      <![CDATA[Returns a copy of the edge with new node IDs.
4120
4121 @param fromId new ID of the 'from' node
4122 @param toId new ID of the 'to' node
4123 @return copy of the edge with the new node IDs]]>
4124      </doc>
4125    </method>
4126    <doc>
4127    <![CDATA[Edge in a guice dependency graph.
4128
4129 @author bojand@google.com (Bojan Djordjevic)]]>
4130    </doc>
4131  </class>
4132  <!-- end class com.google.inject.grapher.Edge -->
4133  <!-- start interface com.google.inject.grapher.EdgeCreator -->
4134  <interface name="EdgeCreator"    abstract="true"
4135    static="false" final="false" visibility="public"
4136    deprecated="not deprecated">
4137    <method name="getEdges" return="java.lang.Iterable&lt;com.google.inject.grapher.Edge&gt;"
4138      abstract="true" native="false" synchronized="false"
4139      static="false" final="false" visibility="public"
4140      deprecated="not deprecated">
4141      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4142      <doc>
4143      <![CDATA[Returns edges for the given dependency graph.]]>
4144      </doc>
4145    </method>
4146    <doc>
4147    <![CDATA[Creator of graph edges to render. All edges will be rendered on the graph after node aliasing is
4148 performed.
4149
4150 @author bojand@google.com (Bojan Djordjevic)]]>
4151    </doc>
4152  </interface>
4153  <!-- end interface com.google.inject.grapher.EdgeCreator -->
4154  <!-- start class com.google.inject.grapher.ImplementationNode -->
4155  <class name="ImplementationNode" extends="com.google.inject.grapher.Node"
4156    abstract="false"
4157    static="false" final="false" visibility="public"
4158    deprecated="not deprecated">
4159    <constructor name="ImplementationNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.util.Collection&lt;java.lang.reflect.Member&gt;"
4160      static="false" final="false" visibility="public"
4161      deprecated="not deprecated">
4162    </constructor>
4163    <method name="getMembers" return="java.util.Collection&lt;java.lang.reflect.Member&gt;"
4164      abstract="false" native="false" synchronized="false"
4165      static="false" final="false" visibility="public"
4166      deprecated="not deprecated">
4167    </method>
4168    <method name="equals" return="boolean"
4169      abstract="false" native="false" synchronized="false"
4170      static="false" final="false" visibility="public"
4171      deprecated="not deprecated">
4172      <param name="obj" type="java.lang.Object"/>
4173    </method>
4174    <method name="hashCode" return="int"
4175      abstract="false" native="false" synchronized="false"
4176      static="false" final="false" visibility="public"
4177      deprecated="not deprecated">
4178    </method>
4179    <method name="toString" return="java.lang.String"
4180      abstract="false" native="false" synchronized="false"
4181      static="false" final="false" visibility="public"
4182      deprecated="not deprecated">
4183    </method>
4184    <method name="copy" return="com.google.inject.grapher.Node"
4185      abstract="false" native="false" synchronized="false"
4186      static="false" final="false" visibility="public"
4187      deprecated="not deprecated">
4188      <param name="id" type="com.google.inject.grapher.NodeId"/>
4189    </method>
4190    <doc>
4191    <![CDATA[Node for types that have {@link Dependency}s and are bound to {@link InterfaceNode}s. These
4192 nodes will often have fields for {@link Member}s that are {@link InjectionPoint}s.
4193
4194 @see DependencyEdge
4195
4196 @author phopkins@gmail.com (Pete Hopkins)]]>
4197    </doc>
4198  </class>
4199  <!-- end class com.google.inject.grapher.ImplementationNode -->
4200  <!-- start interface com.google.inject.grapher.InjectorGrapher -->
4201  <interface name="InjectorGrapher"    abstract="true"
4202    static="false" final="false" visibility="public"
4203    deprecated="not deprecated">
4204    <method name="graph"
4205      abstract="true" native="false" synchronized="false"
4206      static="false" final="false" visibility="public"
4207      deprecated="not deprecated">
4208      <param name="injector" type="com.google.inject.Injector"/>
4209      <exception name="IOException" type="java.io.IOException"/>
4210      <doc>
4211      <![CDATA[Graphs the guice dependency graph for the given injector using default starting keys.]]>
4212      </doc>
4213    </method>
4214    <method name="graph"
4215      abstract="true" native="false" synchronized="false"
4216      static="false" final="false" visibility="public"
4217      deprecated="not deprecated">
4218      <param name="injector" type="com.google.inject.Injector"/>
4219      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
4220      <exception name="IOException" type="java.io.IOException"/>
4221      <doc>
4222      <![CDATA[Graphs the guice dependency graph for the given injector using the given starting keys and
4223 their transitive dependencies.]]>
4224      </doc>
4225    </method>
4226    <doc>
4227    <![CDATA[Guice injector grapher. Renders the guice dependency graph for an injector. It can render the
4228 whole dependency graph or just transitive dependencies of a given set of nodes.
4229
4230 @author phopkins@gmail.com (Pete Hopkins)]]>
4231    </doc>
4232  </interface>
4233  <!-- end interface com.google.inject.grapher.InjectorGrapher -->
4234  <!-- start class com.google.inject.grapher.InstanceNode -->
4235  <class name="InstanceNode" extends="com.google.inject.grapher.Node"
4236    abstract="false"
4237    static="false" final="false" visibility="public"
4238    deprecated="not deprecated">
4239    <constructor name="InstanceNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.lang.Object, java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4240      static="false" final="false" visibility="public"
4241      deprecated="not deprecated">
4242    </constructor>
4243    <method name="getInstance" return="java.lang.Object"
4244      abstract="false" native="false" synchronized="false"
4245      static="false" final="false" visibility="public"
4246      deprecated="not deprecated">
4247    </method>
4248    <method name="getMembers" return="java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4249      abstract="false" native="false" synchronized="false"
4250      static="false" final="false" visibility="public"
4251      deprecated="not deprecated">
4252    </method>
4253    <method name="equals" return="boolean"
4254      abstract="false" native="false" synchronized="false"
4255      static="false" final="false" visibility="public"
4256      deprecated="not deprecated">
4257      <param name="obj" type="java.lang.Object"/>
4258    </method>
4259    <method name="hashCode" return="int"
4260      abstract="false" native="false" synchronized="false"
4261      static="false" final="false" visibility="public"
4262      deprecated="not deprecated">
4263    </method>
4264    <method name="toString" return="java.lang.String"
4265      abstract="false" native="false" synchronized="false"
4266      static="false" final="false" visibility="public"
4267      deprecated="not deprecated">
4268    </method>
4269    <method name="copy" return="com.google.inject.grapher.Node"
4270      abstract="false" native="false" synchronized="false"
4271      static="false" final="false" visibility="public"
4272      deprecated="not deprecated">
4273      <param name="id" type="com.google.inject.grapher.NodeId"/>
4274    </method>
4275    <doc>
4276    <![CDATA[Node for instances. Used when a type is bound to an instance.
4277
4278 @author bojand@google.com (Bojan Djordjevic)]]>
4279    </doc>
4280  </class>
4281  <!-- end class com.google.inject.grapher.InstanceNode -->
4282  <!-- start class com.google.inject.grapher.InterfaceNode -->
4283  <class name="InterfaceNode" extends="com.google.inject.grapher.Node"
4284    abstract="false"
4285    static="false" final="false" visibility="public"
4286    deprecated="not deprecated">
4287    <constructor name="InterfaceNode" type="com.google.inject.grapher.NodeId, java.lang.Object"
4288      static="false" final="false" visibility="public"
4289      deprecated="not deprecated">
4290    </constructor>
4291    <method name="copy" return="com.google.inject.grapher.Node"
4292      abstract="false" native="false" synchronized="false"
4293      static="false" final="false" visibility="public"
4294      deprecated="not deprecated">
4295      <param name="id" type="com.google.inject.grapher.NodeId"/>
4296    </method>
4297    <method name="equals" return="boolean"
4298      abstract="false" native="false" synchronized="false"
4299      static="false" final="false" visibility="public"
4300      deprecated="not deprecated">
4301      <param name="obj" type="java.lang.Object"/>
4302    </method>
4303    <method name="toString" return="java.lang.String"
4304      abstract="false" native="false" synchronized="false"
4305      static="false" final="false" visibility="public"
4306      deprecated="not deprecated">
4307    </method>
4308    <doc>
4309    <![CDATA[Node for an interface type that has been bound to an implementation class or instance.
4310
4311 @see BindingEdge
4312
4313 @author phopkins@gmail.com (Pete Hopkins)]]>
4314    </doc>
4315  </class>
4316  <!-- end class com.google.inject.grapher.InterfaceNode -->
4317  <!-- start interface com.google.inject.grapher.NameFactory -->
4318  <interface name="NameFactory"    abstract="true"
4319    static="false" final="false" visibility="public"
4320    deprecated="not deprecated">
4321    <method name="getMemberName" return="java.lang.String"
4322      abstract="true" native="false" synchronized="false"
4323      static="false" final="false" visibility="public"
4324      deprecated="not deprecated">
4325      <param name="member" type="java.lang.reflect.Member"/>
4326    </method>
4327    <method name="getClassName" return="java.lang.String"
4328      abstract="true" native="false" synchronized="false"
4329      static="false" final="false" visibility="public"
4330      deprecated="not deprecated">
4331      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4332    </method>
4333    <method name="getInstanceName" return="java.lang.String"
4334      abstract="true" native="false" synchronized="false"
4335      static="false" final="false" visibility="public"
4336      deprecated="not deprecated">
4337      <param name="instance" type="java.lang.Object"/>
4338    </method>
4339    <method name="getAnnotationName" return="java.lang.String"
4340      abstract="true" native="false" synchronized="false"
4341      static="false" final="false" visibility="public"
4342      deprecated="not deprecated">
4343      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4344    </method>
4345    <method name="getSourceName" return="java.lang.String"
4346      abstract="true" native="false" synchronized="false"
4347      static="false" final="false" visibility="public"
4348      deprecated="not deprecated">
4349      <param name="source" type="java.lang.Object"/>
4350    </method>
4351    <doc>
4352    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4353 display in the graph for the types that come up in {@link Binding}s.
4354
4355 @author phopkins@gmail.com (Pete Hopkins)]]>
4356    </doc>
4357  </interface>
4358  <!-- end interface com.google.inject.grapher.NameFactory -->
4359  <!-- start class com.google.inject.grapher.Node -->
4360  <class name="Node" extends="java.lang.Object"
4361    abstract="true"
4362    static="false" final="false" visibility="public"
4363    deprecated="not deprecated">
4364    <constructor name="Node" type="com.google.inject.grapher.NodeId, java.lang.Object"
4365      static="false" final="false" visibility="protected"
4366      deprecated="not deprecated">
4367    </constructor>
4368    <method name="getId" return="com.google.inject.grapher.NodeId"
4369      abstract="false" native="false" synchronized="false"
4370      static="false" final="false" visibility="public"
4371      deprecated="not deprecated">
4372    </method>
4373    <method name="getSource" return="java.lang.Object"
4374      abstract="false" native="false" synchronized="false"
4375      static="false" final="false" visibility="public"
4376      deprecated="not deprecated">
4377    </method>
4378    <method name="equals" return="boolean"
4379      abstract="false" native="false" synchronized="false"
4380      static="false" final="false" visibility="public"
4381      deprecated="not deprecated">
4382      <param name="obj" type="java.lang.Object"/>
4383    </method>
4384    <method name="hashCode" return="int"
4385      abstract="false" native="false" synchronized="false"
4386      static="false" final="false" visibility="public"
4387      deprecated="not deprecated">
4388    </method>
4389    <method name="copy" return="com.google.inject.grapher.Node"
4390      abstract="true" native="false" synchronized="false"
4391      static="false" final="false" visibility="public"
4392      deprecated="not deprecated">
4393      <param name="id" type="com.google.inject.grapher.NodeId"/>
4394      <doc>
4395      <![CDATA[Returns a copy of the node with a new ID.
4396
4397 @param id new ID of the node
4398 @return copy of the node with a new ID]]>
4399      </doc>
4400    </method>
4401    <doc>
4402    <![CDATA[Node in a guice dependency graph.
4403
4404 @author bojand@google.com (Bojan Djordjevic)]]>
4405    </doc>
4406  </class>
4407  <!-- end class com.google.inject.grapher.Node -->
4408  <!-- start interface com.google.inject.grapher.NodeCreator -->
4409  <interface name="NodeCreator"    abstract="true"
4410    static="false" final="false" visibility="public"
4411    deprecated="not deprecated">
4412    <method name="getNodes" return="java.lang.Iterable&lt;com.google.inject.grapher.Node&gt;"
4413      abstract="true" native="false" synchronized="false"
4414      static="false" final="false" visibility="public"
4415      deprecated="not deprecated">
4416      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4417      <doc>
4418      <![CDATA[Returns nodes for the given dependency graph.]]>
4419      </doc>
4420    </method>
4421    <doc>
4422    <![CDATA[Creator of graph nodes.
4423
4424 @author bojand@google.com (Bojan Djordjevic)]]>
4425    </doc>
4426  </interface>
4427  <!-- end interface com.google.inject.grapher.NodeCreator -->
4428  <!-- start class com.google.inject.grapher.NodeId -->
4429  <class name="NodeId" extends="java.lang.Object"
4430    abstract="false"
4431    static="false" final="true" visibility="public"
4432    deprecated="not deprecated">
4433    <method name="newTypeId" return="com.google.inject.grapher.NodeId"
4434      abstract="false" native="false" synchronized="false"
4435      static="true" final="false" visibility="public"
4436      deprecated="not deprecated">
4437      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4438    </method>
4439    <method name="newInstanceId" return="com.google.inject.grapher.NodeId"
4440      abstract="false" native="false" synchronized="false"
4441      static="true" final="false" visibility="public"
4442      deprecated="not deprecated">
4443      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4444    </method>
4445    <method name="getKey" return="com.google.inject.Key&lt;?&gt;"
4446      abstract="false" native="false" synchronized="false"
4447      static="false" final="false" visibility="public"
4448      deprecated="not deprecated">
4449    </method>
4450    <method name="hashCode" return="int"
4451      abstract="false" native="false" synchronized="false"
4452      static="false" final="false" visibility="public"
4453      deprecated="not deprecated">
4454    </method>
4455    <method name="equals" return="boolean"
4456      abstract="false" native="false" synchronized="false"
4457      static="false" final="false" visibility="public"
4458      deprecated="not deprecated">
4459      <param name="obj" type="java.lang.Object"/>
4460    </method>
4461    <method name="toString" return="java.lang.String"
4462      abstract="false" native="false" synchronized="false"
4463      static="false" final="false" visibility="public"
4464      deprecated="not deprecated">
4465    </method>
4466    <doc>
4467    <![CDATA[ID of a node in the graph. An ID is given by a {@link Key} and a node type, which is used to
4468 distinguish instances and implementation classes for the same key. For example
4469 {@code bind(Integer.class).toInstance(42)} produces two nodes: an
4470 interface node with the key of {@code Key<Integer>} and an instance node with the same
4471 {@link Key} and value of 42.
4472
4473 @author bojand@google.com (Bojan Djordjevic)]]>
4474    </doc>
4475  </class>
4476  <!-- end class com.google.inject.grapher.NodeId -->
4477  <!-- start class com.google.inject.grapher.NodeId.NodeType -->
4478  <class name="NodeId.NodeType" extends="java.lang.Enum&lt;com.google.inject.grapher.NodeId.NodeType&gt;"
4479    abstract="false"
4480    static="true" final="true" visibility="public"
4481    deprecated="not deprecated">
4482    <method name="values" return="com.google.inject.grapher.NodeId.NodeType[]"
4483      abstract="false" native="false" synchronized="false"
4484      static="true" final="false" visibility="public"
4485      deprecated="not deprecated">
4486    </method>
4487    <method name="valueOf" return="com.google.inject.grapher.NodeId.NodeType"
4488      abstract="false" native="false" synchronized="false"
4489      static="true" final="false" visibility="public"
4490      deprecated="not deprecated">
4491      <param name="name" type="java.lang.String"/>
4492    </method>
4493    <doc>
4494    <![CDATA[Type of node.]]>
4495    </doc>
4496  </class>
4497  <!-- end class com.google.inject.grapher.NodeId.NodeType -->
4498  <!-- start interface com.google.inject.grapher.RootKeySetCreator -->
4499  <interface name="RootKeySetCreator"    abstract="true"
4500    static="false" final="false" visibility="public"
4501    deprecated="not deprecated">
4502    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4503      abstract="true" native="false" synchronized="false"
4504      static="false" final="false" visibility="public"
4505      deprecated="not deprecated">
4506      <param name="injector" type="com.google.inject.Injector"/>
4507      <doc>
4508      <![CDATA[Returns the set of starting keys to graph.]]>
4509      </doc>
4510    </method>
4511    <doc>
4512    <![CDATA[Creator of the default starting set of keys to graph. These keys and their transitive
4513 dependencies will be graphed.
4514
4515 @author bojand@google.com (Bojan Djordjevic)]]>
4516    </doc>
4517  </interface>
4518  <!-- end interface com.google.inject.grapher.RootKeySetCreator -->
4519  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4520  <class name="ShortNameFactory" extends="java.lang.Object"
4521    abstract="false"
4522    static="false" final="false" visibility="public"
4523    deprecated="not deprecated">
4524    <implements name="com.google.inject.grapher.NameFactory"/>
4525    <constructor name="ShortNameFactory"
4526      static="false" final="false" visibility="public"
4527      deprecated="not deprecated">
4528    </constructor>
4529    <method name="getMemberName" return="java.lang.String"
4530      abstract="false" native="false" synchronized="false"
4531      static="false" final="false" visibility="public"
4532      deprecated="not deprecated">
4533      <param name="member" type="java.lang.reflect.Member"/>
4534    </method>
4535    <method name="getAnnotationName" return="java.lang.String"
4536      abstract="false" native="false" synchronized="false"
4537      static="false" final="false" visibility="public"
4538      deprecated="not deprecated">
4539      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4540    </method>
4541    <method name="getClassName" return="java.lang.String"
4542      abstract="false" native="false" synchronized="false"
4543      static="false" final="false" visibility="public"
4544      deprecated="not deprecated">
4545      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4546    </method>
4547    <method name="getInstanceName" return="java.lang.String"
4548      abstract="false" native="false" synchronized="false"
4549      static="false" final="false" visibility="public"
4550      deprecated="not deprecated">
4551      <param name="instance" type="java.lang.Object"/>
4552    </method>
4553    <method name="getSourceName" return="java.lang.String"
4554      abstract="false" native="false" synchronized="false"
4555      static="false" final="false" visibility="public"
4556      deprecated="not deprecated">
4557      <param name="source" type="java.lang.Object"/>
4558      <doc>
4559      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4560 a {@link StackTraceElement} for when the binding is made to the instance,
4561 or a {@link Method} when a provider method is used.]]>
4562      </doc>
4563    </method>
4564    <method name="getFileString" return="java.lang.String"
4565      abstract="false" native="false" synchronized="false"
4566      static="false" final="false" visibility="protected"
4567      deprecated="not deprecated">
4568      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4569    </method>
4570    <method name="getMethodString" return="java.lang.String"
4571      abstract="false" native="false" synchronized="false"
4572      static="false" final="false" visibility="protected"
4573      deprecated="not deprecated">
4574      <param name="method" type="java.lang.reflect.Method"/>
4575    </method>
4576    <doc>
4577    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4578 {@link Object#toString()}s and strips package names out of them so that
4579 they'll fit on the graph.
4580
4581 @author phopkins@gmail.com (Pete Hopkins)]]>
4582    </doc>
4583  </class>
4584  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4585  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4586  <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;"
4587    abstract="false"
4588    static="false" final="false" visibility="public"
4589    deprecated="not deprecated">
4590    <constructor name="TransitiveDependencyVisitor"
4591      static="false" final="false" visibility="public"
4592      deprecated="not deprecated">
4593    </constructor>
4594    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4595      abstract="false" native="false" synchronized="false"
4596      static="false" final="false" visibility="public"
4597      deprecated="not deprecated">
4598      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4599    </method>
4600    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4601      abstract="false" native="false" synchronized="false"
4602      static="false" final="false" visibility="public"
4603      deprecated="not deprecated">
4604      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4605    </method>
4606    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4607      abstract="false" native="false" synchronized="false"
4608      static="false" final="false" visibility="public"
4609      deprecated="not deprecated">
4610      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4611    </method>
4612    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4613      abstract="false" native="false" synchronized="false"
4614      static="false" final="false" visibility="public"
4615      deprecated="not deprecated">
4616      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4617    </method>
4618    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4619      abstract="false" native="false" synchronized="false"
4620      static="false" final="false" visibility="public"
4621      deprecated="not deprecated">
4622      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4623    </method>
4624    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4625      abstract="false" native="false" synchronized="false"
4626      static="false" final="false" visibility="public"
4627      deprecated="not deprecated">
4628      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4629    </method>
4630    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4631      abstract="false" native="false" synchronized="false"
4632      static="false" final="false" visibility="public"
4633      deprecated="not deprecated">
4634      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4635    </method>
4636    <method name="visitOther" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4637      abstract="false" native="false" synchronized="false"
4638      static="false" final="false" visibility="public"
4639      deprecated="not deprecated">
4640      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
4641    </method>
4642    <doc>
4643    <![CDATA[{@link BindingTargetVisitor} that returns a {@link Collection} of the
4644 {@link Key}s of each {@link Binding}'s dependencies. Used by
4645 {@link InjectorGrapher} to walk the dependency graph from a starting set of
4646 {@link Binding}s.
4647
4648 @author phopkins@gmail.com (Pete Hopkins)]]>
4649    </doc>
4650  </class>
4651  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4652</package>
4653<package name="com.google.inject.grapher.graphviz">
4654  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4655  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4656    abstract="false"
4657    static="false" final="true" visibility="public"
4658    deprecated="not deprecated">
4659    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4660      abstract="false" native="false" synchronized="false"
4661      static="true" final="false" visibility="public"
4662      deprecated="not deprecated">
4663    </method>
4664    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4665      abstract="false" native="false" synchronized="false"
4666      static="true" final="false" visibility="public"
4667      deprecated="not deprecated">
4668      <param name="name" type="java.lang.String"/>
4669    </method>
4670    <method name="toString" return="java.lang.String"
4671      abstract="false" native="false" synchronized="false"
4672      static="false" final="false" visibility="public"
4673      deprecated="not deprecated">
4674    </method>
4675    <doc>
4676    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4677 concatenation to make double arrows and such.
4678 <p>
4679 See: http://www.graphviz.org/doc/info/arrows.html
4680
4681 @author phopkins@gmail.com (Pete Hopkins)]]>
4682    </doc>
4683  </class>
4684  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4685  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4686  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4687    abstract="false"
4688    static="false" final="true" visibility="public"
4689    deprecated="not deprecated">
4690    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4691      abstract="false" native="false" synchronized="false"
4692      static="true" final="false" visibility="public"
4693      deprecated="not deprecated">
4694    </method>
4695    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4696      abstract="false" native="false" synchronized="false"
4697      static="true" final="false" visibility="public"
4698      deprecated="not deprecated">
4699      <param name="name" type="java.lang.String"/>
4700    </method>
4701    <method name="toString" return="java.lang.String"
4702      abstract="false" native="false" synchronized="false"
4703      static="false" final="false" visibility="public"
4704      deprecated="not deprecated">
4705    </method>
4706    <doc>
4707    <![CDATA[Enum for the "compass point" values used to control where edge
4708 end points appear on the graph.
4709 <p>
4710 See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4711
4712 @author phopkins@gmail.com (Pete Hopkins)]]>
4713    </doc>
4714  </class>
4715  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4716  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4717  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4718    abstract="false"
4719    static="false" final="true" visibility="public"
4720    deprecated="not deprecated">
4721    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4722      abstract="false" native="false" synchronized="false"
4723      static="true" final="false" visibility="public"
4724      deprecated="not deprecated">
4725    </method>
4726    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4727      abstract="false" native="false" synchronized="false"
4728      static="true" final="false" visibility="public"
4729      deprecated="not deprecated">
4730      <param name="name" type="java.lang.String"/>
4731    </method>
4732    <method name="toString" return="java.lang.String"
4733      abstract="false" native="false" synchronized="false"
4734      static="false" final="false" visibility="public"
4735      deprecated="not deprecated">
4736    </method>
4737    <doc>
4738    <![CDATA[Styles for edges.
4739 <p>
4740 See: http://www.graphviz.org/doc/info/attrs.html#k:style
4741
4742 @author phopkins@gmail.com (Pete Hopkins)]]>
4743    </doc>
4744  </class>
4745  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4746  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4747  <class name="GraphvizEdge" extends="java.lang.Object"
4748    abstract="false"
4749    static="false" final="false" visibility="public"
4750    deprecated="not deprecated">
4751    <constructor name="GraphvizEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4752      static="false" final="false" visibility="public"
4753      deprecated="not deprecated">
4754    </constructor>
4755    <method name="getHeadNodeId" return="com.google.inject.grapher.NodeId"
4756      abstract="false" native="false" synchronized="false"
4757      static="false" final="false" visibility="public"
4758      deprecated="not deprecated">
4759    </method>
4760    <method name="getHeadPortId" return="java.lang.String"
4761      abstract="false" native="false" synchronized="false"
4762      static="false" final="false" visibility="public"
4763      deprecated="not deprecated">
4764    </method>
4765    <method name="setHeadPortId"
4766      abstract="false" native="false" synchronized="false"
4767      static="false" final="false" visibility="public"
4768      deprecated="not deprecated">
4769      <param name="headPortId" type="java.lang.String"/>
4770    </method>
4771    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4772      abstract="false" native="false" synchronized="false"
4773      static="false" final="false" visibility="public"
4774      deprecated="not deprecated">
4775    </method>
4776    <method name="setHeadCompassPoint"
4777      abstract="false" native="false" synchronized="false"
4778      static="false" final="false" visibility="public"
4779      deprecated="not deprecated">
4780      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4781    </method>
4782    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4783      abstract="false" native="false" synchronized="false"
4784      static="false" final="false" visibility="public"
4785      deprecated="not deprecated">
4786    </method>
4787    <method name="setArrowHead"
4788      abstract="false" native="false" synchronized="false"
4789      static="false" final="false" visibility="public"
4790      deprecated="not deprecated">
4791      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4792    </method>
4793    <method name="getTailNodeId" return="com.google.inject.grapher.NodeId"
4794      abstract="false" native="false" synchronized="false"
4795      static="false" final="false" visibility="public"
4796      deprecated="not deprecated">
4797    </method>
4798    <method name="getTailPortId" return="java.lang.String"
4799      abstract="false" native="false" synchronized="false"
4800      static="false" final="false" visibility="public"
4801      deprecated="not deprecated">
4802    </method>
4803    <method name="setTailPortId"
4804      abstract="false" native="false" synchronized="false"
4805      static="false" final="false" visibility="public"
4806      deprecated="not deprecated">
4807      <param name="tailPortId" type="java.lang.String"/>
4808    </method>
4809    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4810      abstract="false" native="false" synchronized="false"
4811      static="false" final="false" visibility="public"
4812      deprecated="not deprecated">
4813    </method>
4814    <method name="setTailCompassPoint"
4815      abstract="false" native="false" synchronized="false"
4816      static="false" final="false" visibility="public"
4817      deprecated="not deprecated">
4818      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4819    </method>
4820    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4821      abstract="false" native="false" synchronized="false"
4822      static="false" final="false" visibility="public"
4823      deprecated="not deprecated">
4824    </method>
4825    <method name="setArrowTail"
4826      abstract="false" native="false" synchronized="false"
4827      static="false" final="false" visibility="public"
4828      deprecated="not deprecated">
4829      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4830    </method>
4831    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4832      abstract="false" native="false" synchronized="false"
4833      static="false" final="false" visibility="public"
4834      deprecated="not deprecated">
4835    </method>
4836    <method name="setStyle"
4837      abstract="false" native="false" synchronized="false"
4838      static="false" final="false" visibility="public"
4839      deprecated="not deprecated">
4840      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4841    </method>
4842    <doc>
4843    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4844 interested in drawing.
4845
4846 @author phopkins@gmail.com (Pete Hopkins)]]>
4847    </doc>
4848  </class>
4849  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4850  <!-- start class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4851  <class name="GraphvizGrapher" extends="com.google.inject.grapher.AbstractInjectorGrapher"
4852    abstract="false"
4853    static="false" final="false" visibility="public"
4854    deprecated="not deprecated">
4855    <method name="reset"
4856      abstract="false" native="false" synchronized="false"
4857      static="false" final="false" visibility="protected"
4858      deprecated="not deprecated">
4859    </method>
4860    <method name="setOut"
4861      abstract="false" native="false" synchronized="false"
4862      static="false" final="false" visibility="public"
4863      deprecated="not deprecated">
4864      <param name="out" type="java.io.PrintWriter"/>
4865    </method>
4866    <method name="setRankdir"
4867      abstract="false" native="false" synchronized="false"
4868      static="false" final="false" visibility="public"
4869      deprecated="not deprecated">
4870      <param name="rankdir" type="java.lang.String"/>
4871    </method>
4872    <method name="postProcess"
4873      abstract="false" native="false" synchronized="false"
4874      static="false" final="false" visibility="protected"
4875      deprecated="not deprecated">
4876    </method>
4877    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
4878      abstract="false" native="false" synchronized="false"
4879      static="false" final="false" visibility="protected"
4880      deprecated="not deprecated">
4881    </method>
4882    <method name="start"
4883      abstract="false" native="false" synchronized="false"
4884      static="false" final="false" visibility="protected"
4885      deprecated="not deprecated">
4886    </method>
4887    <method name="finish"
4888      abstract="false" native="false" synchronized="false"
4889      static="false" final="false" visibility="protected"
4890      deprecated="not deprecated">
4891    </method>
4892    <method name="renderNode"
4893      abstract="false" native="false" synchronized="false"
4894      static="false" final="false" visibility="protected"
4895      deprecated="not deprecated">
4896      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
4897    </method>
4898    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
4899      abstract="false" native="false" synchronized="false"
4900      static="false" final="false" visibility="protected"
4901      deprecated="not deprecated">
4902      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
4903    </method>
4904    <method name="getNodeLabel" return="java.lang.String"
4905      abstract="false" native="false" synchronized="false"
4906      static="false" final="false" visibility="protected"
4907      deprecated="not deprecated">
4908      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
4909      <doc>
4910      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
4911 table with a heading at the top and (in the case of
4912 {@link ImplementationNode}s) rows for each of the member fields.]]>
4913      </doc>
4914    </method>
4915    <method name="renderEdge"
4916      abstract="false" native="false" synchronized="false"
4917      static="false" final="false" visibility="protected"
4918      deprecated="not deprecated">
4919      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4920    </method>
4921    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
4922      abstract="false" native="false" synchronized="false"
4923      static="false" final="false" visibility="protected"
4924      deprecated="not deprecated">
4925      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4926    </method>
4927    <method name="getArrowString" return="java.lang.String"
4928      abstract="false" native="false" synchronized="false"
4929      static="false" final="false" visibility="protected"
4930      deprecated="not deprecated">
4931      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4932      <doc>
4933      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
4934 represents combining them. With Graphviz, that just means concatenating
4935 them.]]>
4936      </doc>
4937    </method>
4938    <method name="getEdgeEndPoint" return="java.lang.String"
4939      abstract="false" native="false" synchronized="false"
4940      static="false" final="false" visibility="protected"
4941      deprecated="not deprecated">
4942      <param name="nodeId" type="java.lang.String"/>
4943      <param name="portId" type="java.lang.String"/>
4944      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4945    </method>
4946    <method name="htmlEscape" return="java.lang.String"
4947      abstract="false" native="false" synchronized="false"
4948      static="false" final="false" visibility="protected"
4949      deprecated="not deprecated">
4950      <param name="str" type="java.lang.String"/>
4951    </method>
4952    <method name="htmlEscape" return="java.util.List&lt;java.lang.String&gt;"
4953      abstract="false" native="false" synchronized="false"
4954      static="false" final="false" visibility="protected"
4955      deprecated="not deprecated">
4956      <param name="elements" type="java.util.List&lt;java.lang.String&gt;"/>
4957    </method>
4958    <method name="newInterfaceNode"
4959      abstract="false" native="false" synchronized="false"
4960      static="false" final="false" visibility="protected"
4961      deprecated="not deprecated">
4962      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
4963    </method>
4964    <method name="newImplementationNode"
4965      abstract="false" native="false" synchronized="false"
4966      static="false" final="false" visibility="protected"
4967      deprecated="not deprecated">
4968      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
4969    </method>
4970    <method name="newInstanceNode"
4971      abstract="false" native="false" synchronized="false"
4972      static="false" final="false" visibility="protected"
4973      deprecated="not deprecated">
4974      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
4975    </method>
4976    <method name="newDependencyEdge"
4977      abstract="false" native="false" synchronized="false"
4978      static="false" final="false" visibility="protected"
4979      deprecated="not deprecated">
4980      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
4981    </method>
4982    <method name="newBindingEdge"
4983      abstract="false" native="false" synchronized="false"
4984      static="false" final="false" visibility="protected"
4985      deprecated="not deprecated">
4986      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
4987    </method>
4988    <doc>
4989    <![CDATA[{@link InjectorGrapher} implementation that writes out a Graphviz DOT file of the graph.
4990 Dependencies are bound in {@link GraphvizModule}.
4991 <p>
4992 Specify the {@link PrintWriter} to output to with {@link #setOut(PrintWriter)}.
4993
4994 @author phopkins@gmail.com (Pete Hopkins)]]>
4995    </doc>
4996  </class>
4997  <!-- end class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4998  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
4999  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
5000    abstract="false"
5001    static="false" final="false" visibility="public"
5002    deprecated="not deprecated">
5003    <constructor name="GraphvizModule"
5004      static="false" final="false" visibility="public"
5005      deprecated="not deprecated">
5006    </constructor>
5007    <method name="configure"
5008      abstract="false" native="false" synchronized="false"
5009      static="false" final="false" visibility="protected"
5010      deprecated="not deprecated">
5011    </method>
5012    <doc>
5013    <![CDATA[Module that provides classes needed by {@link GraphvizGrapher}.
5014
5015 @author phopkins@gmail.com (Pete Hopkins)]]>
5016    </doc>
5017  </class>
5018  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
5019  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
5020  <class name="GraphvizNode" extends="java.lang.Object"
5021    abstract="false"
5022    static="false" final="false" visibility="public"
5023    deprecated="not deprecated">
5024    <constructor name="GraphvizNode" type="com.google.inject.grapher.NodeId"
5025      static="false" final="false" visibility="public"
5026      deprecated="not deprecated">
5027    </constructor>
5028    <method name="getNodeId" return="com.google.inject.grapher.NodeId"
5029      abstract="false" native="false" synchronized="false"
5030      static="false" final="false" visibility="public"
5031      deprecated="not deprecated">
5032    </method>
5033    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
5034      abstract="false" native="false" synchronized="false"
5035      static="false" final="false" visibility="public"
5036      deprecated="not deprecated">
5037    </method>
5038    <method name="setShape"
5039      abstract="false" native="false" synchronized="false"
5040      static="false" final="false" visibility="public"
5041      deprecated="not deprecated">
5042      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
5043    </method>
5044    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
5045      abstract="false" native="false" synchronized="false"
5046      static="false" final="false" visibility="public"
5047      deprecated="not deprecated">
5048    </method>
5049    <method name="setStyle"
5050      abstract="false" native="false" synchronized="false"
5051      static="false" final="false" visibility="public"
5052      deprecated="not deprecated">
5053      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
5054    </method>
5055    <method name="getTitle" return="java.lang.String"
5056      abstract="false" native="false" synchronized="false"
5057      static="false" final="false" visibility="public"
5058      deprecated="not deprecated">
5059    </method>
5060    <method name="setTitle"
5061      abstract="false" native="false" synchronized="false"
5062      static="false" final="false" visibility="public"
5063      deprecated="not deprecated">
5064      <param name="title" type="java.lang.String"/>
5065    </method>
5066    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
5067      abstract="false" native="false" synchronized="false"
5068      static="false" final="false" visibility="public"
5069      deprecated="not deprecated">
5070    </method>
5071    <method name="addSubtitle"
5072      abstract="false" native="false" synchronized="false"
5073      static="false" final="false" visibility="public"
5074      deprecated="not deprecated">
5075      <param name="position" type="int"/>
5076      <param name="subtitle" type="java.lang.String"/>
5077    </method>
5078    <method name="getHeaderTextColor" return="java.lang.String"
5079      abstract="false" native="false" synchronized="false"
5080      static="false" final="false" visibility="public"
5081      deprecated="not deprecated">
5082    </method>
5083    <method name="setHeaderTextColor"
5084      abstract="false" native="false" synchronized="false"
5085      static="false" final="false" visibility="public"
5086      deprecated="not deprecated">
5087      <param name="headerTextColor" type="java.lang.String"/>
5088    </method>
5089    <method name="getHeaderBackgroundColor" return="java.lang.String"
5090      abstract="false" native="false" synchronized="false"
5091      static="false" final="false" visibility="public"
5092      deprecated="not deprecated">
5093    </method>
5094    <method name="setHeaderBackgroundColor"
5095      abstract="false" native="false" synchronized="false"
5096      static="false" final="false" visibility="public"
5097      deprecated="not deprecated">
5098      <param name="headerBackgroundColor" type="java.lang.String"/>
5099    </method>
5100    <method name="addField"
5101      abstract="false" native="false" synchronized="false"
5102      static="false" final="false" visibility="public"
5103      deprecated="not deprecated">
5104      <param name="portId" type="java.lang.String"/>
5105      <param name="title" type="java.lang.String"/>
5106    </method>
5107    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5108      abstract="false" native="false" synchronized="false"
5109      static="false" final="false" visibility="public"
5110      deprecated="not deprecated">
5111    </method>
5112    <method name="getIdentifier" return="java.lang.String"
5113      abstract="false" native="false" synchronized="false"
5114      static="false" final="false" visibility="public"
5115      deprecated="not deprecated">
5116    </method>
5117    <method name="setIdentifier"
5118      abstract="false" native="false" synchronized="false"
5119      static="false" final="false" visibility="public"
5120      deprecated="not deprecated">
5121      <param name="identifier" type="java.lang.String"/>
5122    </method>
5123    <doc>
5124    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
5125 interested in drawing.
5126
5127 @author phopkins@gmail.com (Pete Hopkins)]]>
5128    </doc>
5129  </class>
5130  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
5131  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5132  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5133    abstract="false"
5134    static="false" final="true" visibility="public"
5135    deprecated="not deprecated">
5136    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5137      abstract="false" native="false" synchronized="false"
5138      static="true" final="false" visibility="public"
5139      deprecated="not deprecated">
5140    </method>
5141    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5142      abstract="false" native="false" synchronized="false"
5143      static="true" final="false" visibility="public"
5144      deprecated="not deprecated">
5145      <param name="name" type="java.lang.String"/>
5146    </method>
5147    <method name="toString" return="java.lang.String"
5148      abstract="false" native="false" synchronized="false"
5149      static="false" final="false" visibility="public"
5150      deprecated="not deprecated">
5151    </method>
5152    <doc>
5153    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5154 <p>
5155 See: http://www.graphviz.org/doc/info/shapes.html
5156
5157 @author phopkins@gmail.com (Pete Hopkins)]]>
5158    </doc>
5159  </class>
5160  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5161  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5162  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5163    abstract="false"
5164    static="false" final="true" visibility="public"
5165    deprecated="not deprecated">
5166    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5167      abstract="false" native="false" synchronized="false"
5168      static="true" final="false" visibility="public"
5169      deprecated="not deprecated">
5170    </method>
5171    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5172      abstract="false" native="false" synchronized="false"
5173      static="true" final="false" visibility="public"
5174      deprecated="not deprecated">
5175      <param name="name" type="java.lang.String"/>
5176    </method>
5177    <method name="toString" return="java.lang.String"
5178      abstract="false" native="false" synchronized="false"
5179      static="false" final="false" visibility="public"
5180      deprecated="not deprecated">
5181    </method>
5182    <doc>
5183    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5184 <p>
5185 See: http://www.graphviz.org/doc/info/attrs.html#k:style
5186
5187 @author phopkins@gmail.com (Pete Hopkins)]]>
5188    </doc>
5189  </class>
5190  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5191  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5192  <interface name="PortIdFactory"    abstract="true"
5193    static="false" final="false" visibility="public"
5194    deprecated="not deprecated">
5195    <method name="getPortId" return="java.lang.String"
5196      abstract="true" native="false" synchronized="false"
5197      static="false" final="false" visibility="public"
5198      deprecated="not deprecated">
5199      <param name="member" type="java.lang.reflect.Member"/>
5200    </method>
5201    <doc>
5202    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5203 rows in {@link ImplementationNode}-displaying {@link GraphvizNode}s.
5204
5205 @author phopkins@gmail.com (Pete Hopkins)]]>
5206    </doc>
5207  </interface>
5208  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5209  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5210  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5211    abstract="false"
5212    static="false" final="false" visibility="public"
5213    deprecated="not deprecated">
5214    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5215    <constructor name="PortIdFactoryImpl"
5216      static="false" final="false" visibility="public"
5217      deprecated="not deprecated">
5218    </constructor>
5219    <method name="getPortId" return="java.lang.String"
5220      abstract="false" native="false" synchronized="false"
5221      static="false" final="false" visibility="public"
5222      deprecated="not deprecated">
5223      <param name="member" type="java.lang.reflect.Member"/>
5224    </method>
5225    <doc>
5226    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5227
5228 @author phopkins@gmail.com (Pete Hopkins)]]>
5229    </doc>
5230  </class>
5231  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5232</package>
5233<package name="com.google.inject.jndi">
5234  <!-- start class com.google.inject.jndi.JndiIntegration -->
5235  <class name="JndiIntegration" extends="java.lang.Object"
5236    abstract="false"
5237    static="false" final="false" visibility="public"
5238    deprecated="not deprecated">
5239    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5240      abstract="false" native="false" synchronized="false"
5241      static="true" final="false" visibility="public"
5242      deprecated="not deprecated">
5243      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5244      <param name="name" type="java.lang.String"/>
5245      <doc>
5246      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5247 Example usage:
5248
5249 <pre>
5250 bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5251 </pre>]]>
5252      </doc>
5253    </method>
5254    <doc>
5255    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5256 {@link javax.naming.Context}.
5257
5258 @author crazybob@google.com (Bob Lee)]]>
5259    </doc>
5260  </class>
5261  <!-- end class com.google.inject.jndi.JndiIntegration -->
5262</package>
5263<package name="com.google.inject.matcher">
5264  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5265  <class name="AbstractMatcher" extends="java.lang.Object"
5266    abstract="true"
5267    static="false" final="false" visibility="public"
5268    deprecated="not deprecated">
5269    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5270    <constructor name="AbstractMatcher"
5271      static="false" final="false" visibility="public"
5272      deprecated="not deprecated">
5273    </constructor>
5274    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5275      abstract="false" native="false" synchronized="false"
5276      static="false" final="false" visibility="public"
5277      deprecated="not deprecated">
5278      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5279    </method>
5280    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5281      abstract="false" native="false" synchronized="false"
5282      static="false" final="false" visibility="public"
5283      deprecated="not deprecated">
5284      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5285    </method>
5286    <doc>
5287    <![CDATA[Implements {@code and()} and {@code or()}.
5288
5289 @author crazybob@google.com (Bob Lee)]]>
5290    </doc>
5291  </class>
5292  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5293  <!-- start interface com.google.inject.matcher.Matcher -->
5294  <interface name="Matcher"    abstract="true"
5295    static="false" final="false" visibility="public"
5296    deprecated="not deprecated">
5297    <method name="matches" return="boolean"
5298      abstract="true" native="false" synchronized="false"
5299      static="false" final="false" visibility="public"
5300      deprecated="not deprecated">
5301      <param name="t" type="T"/>
5302      <doc>
5303      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5304      </doc>
5305    </method>
5306    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5307      abstract="true" native="false" synchronized="false"
5308      static="false" final="false" visibility="public"
5309      deprecated="not deprecated">
5310      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5311      <doc>
5312      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5313 given matcher return {@code true}.]]>
5314      </doc>
5315    </method>
5316    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5317      abstract="true" native="false" synchronized="false"
5318      static="false" final="false" visibility="public"
5319      deprecated="not deprecated">
5320      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5321      <doc>
5322      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5323 given matcher return {@code true}.]]>
5324      </doc>
5325    </method>
5326    <doc>
5327    <![CDATA[Returns {@code true} or {@code false} for a given input.
5328
5329 @author crazybob@google.com (Bob Lee)]]>
5330    </doc>
5331  </interface>
5332  <!-- end interface com.google.inject.matcher.Matcher -->
5333  <!-- start class com.google.inject.matcher.Matchers -->
5334  <class name="Matchers" extends="java.lang.Object"
5335    abstract="false"
5336    static="false" final="false" visibility="public"
5337    deprecated="not deprecated">
5338    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5339      abstract="false" native="false" synchronized="false"
5340      static="true" final="false" visibility="public"
5341      deprecated="not deprecated">
5342      <doc>
5343      <![CDATA[Returns a matcher which matches any input.]]>
5344      </doc>
5345    </method>
5346    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5347      abstract="false" native="false" synchronized="false"
5348      static="true" final="false" visibility="public"
5349      deprecated="not deprecated">
5350      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5351      <doc>
5352      <![CDATA[Inverts the given matcher.]]>
5353      </doc>
5354    </method>
5355    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5356      abstract="false" native="false" synchronized="false"
5357      static="true" final="false" visibility="public"
5358      deprecated="not deprecated">
5359      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5360      <doc>
5361      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5362 with a given annotation.]]>
5363      </doc>
5364    </method>
5365    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5366      abstract="false" native="false" synchronized="false"
5367      static="true" final="false" visibility="public"
5368      deprecated="not deprecated">
5369      <param name="annotation" type="java.lang.annotation.Annotation"/>
5370      <doc>
5371      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5372 with a given annotation.]]>
5373      </doc>
5374    </method>
5375    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5376      abstract="false" native="false" synchronized="false"
5377      static="true" final="false" visibility="public"
5378      deprecated="not deprecated">
5379      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5380      <doc>
5381      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5382 the given type).]]>
5383      </doc>
5384    </method>
5385    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5386      abstract="false" native="false" synchronized="false"
5387      static="true" final="false" visibility="public"
5388      deprecated="not deprecated">
5389      <param name="value" type="java.lang.Object"/>
5390      <doc>
5391      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5392      </doc>
5393    </method>
5394    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5395      abstract="false" native="false" synchronized="false"
5396      static="true" final="false" visibility="public"
5397      deprecated="not deprecated">
5398      <param name="value" type="java.lang.Object"/>
5399      <doc>
5400      <![CDATA[Returns a matcher which matches only the given object.]]>
5401      </doc>
5402    </method>
5403    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5404      abstract="false" native="false" synchronized="false"
5405      static="true" final="false" visibility="public"
5406      deprecated="not deprecated">
5407      <param name="targetPackage" type="java.lang.Package"/>
5408      <doc>
5409      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5410 classloader, so classes with the same package name may not have the same package at runtime.]]>
5411      </doc>
5412    </method>
5413    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5414      abstract="false" native="false" synchronized="false"
5415      static="true" final="false" visibility="public"
5416      deprecated="not deprecated">
5417      <param name="targetPackageName" type="java.lang.String"/>
5418      <doc>
5419      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5420 {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5421
5422 @since 2.0]]>
5423      </doc>
5424    </method>
5425    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5426      abstract="false" native="false" synchronized="false"
5427      static="true" final="false" visibility="public"
5428      deprecated="not deprecated">
5429      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5430      <doc>
5431      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5432      </doc>
5433    </method>
5434    <doc>
5435    <![CDATA[Matcher implementations. Supports matching classes and methods.
5436
5437 @author crazybob@google.com (Bob Lee)]]>
5438    </doc>
5439  </class>
5440  <!-- end class com.google.inject.matcher.Matchers -->
5441</package>
5442<package name="com.google.inject.multibindings">
5443  <!-- start class com.google.inject.multibindings.MapBinder -->
5444  <class name="MapBinder" extends="java.lang.Object"
5445    abstract="true"
5446    static="false" final="false" visibility="public"
5447    deprecated="not deprecated">
5448    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5449      abstract="false" native="false" synchronized="false"
5450      static="true" final="false" visibility="public"
5451      deprecated="not deprecated">
5452      <param name="binder" type="com.google.inject.Binder"/>
5453      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5454      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5455      <doc>
5456      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5457 {@link Map} that is itself bound with no binding annotation.]]>
5458      </doc>
5459    </method>
5460    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5461      abstract="false" native="false" synchronized="false"
5462      static="true" final="false" visibility="public"
5463      deprecated="not deprecated">
5464      <param name="binder" type="com.google.inject.Binder"/>
5465      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5466      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5467      <doc>
5468      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5469 {@link Map} that is itself bound with no binding annotation.]]>
5470      </doc>
5471    </method>
5472    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5473      abstract="false" native="false" synchronized="false"
5474      static="true" final="false" visibility="public"
5475      deprecated="not deprecated">
5476      <param name="binder" type="com.google.inject.Binder"/>
5477      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5478      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5479      <param name="annotation" type="java.lang.annotation.Annotation"/>
5480      <doc>
5481      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5482 {@link Map} that is itself bound with {@code annotation}.]]>
5483      </doc>
5484    </method>
5485    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5486      abstract="false" native="false" synchronized="false"
5487      static="true" final="false" visibility="public"
5488      deprecated="not deprecated">
5489      <param name="binder" type="com.google.inject.Binder"/>
5490      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5491      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5492      <param name="annotation" type="java.lang.annotation.Annotation"/>
5493      <doc>
5494      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5495 {@link Map} that is itself bound with {@code annotation}.]]>
5496      </doc>
5497    </method>
5498    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5499      abstract="false" native="false" synchronized="false"
5500      static="true" final="false" visibility="public"
5501      deprecated="not deprecated">
5502      <param name="binder" type="com.google.inject.Binder"/>
5503      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5504      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5505      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5506      <doc>
5507      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5508 {@link Map} that is itself bound with {@code annotationType}.]]>
5509      </doc>
5510    </method>
5511    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5512      abstract="false" native="false" synchronized="false"
5513      static="true" final="false" visibility="public"
5514      deprecated="not deprecated">
5515      <param name="binder" type="com.google.inject.Binder"/>
5516      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5517      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5518      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5519      <doc>
5520      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5521 {@link Map} that is itself bound with {@code annotationType}.]]>
5522      </doc>
5523    </method>
5524    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5525      abstract="true" native="false" synchronized="false"
5526      static="false" final="false" visibility="public"
5527      deprecated="not deprecated">
5528      <doc>
5529      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5530 <p>When multiple equal keys are bound, the value that gets included in the map is
5531 arbitrary.
5532 <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5533 maps that are normally bound, a {@code Map<K, Set<V>>} and
5534 {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5535 all values bound to each key.
5536 <p>
5537 When multiple modules contribute elements to the map, this configuration
5538 option impacts all of them.
5539
5540 @return this map binder
5541 @since 3.0]]>
5542      </doc>
5543    </method>
5544    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5545      abstract="true" native="false" synchronized="false"
5546      static="false" final="false" visibility="public"
5547      deprecated="not deprecated">
5548      <param name="key" type="K"/>
5549      <doc>
5550      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5551 key must be distinct (and non-null). Bound providers will be evaluated each
5552 time the map is injected.
5553
5554 <p>It is an error to call this method without also calling one of the
5555 {@code to} methods on the returned binding builder.
5556
5557 <p>Scoping elements independently is supported. Use the {@code in} method
5558 to specify a binding scope.]]>
5559      </doc>
5560    </method>
5561    <doc>
5562    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5563 a complete map. MapBinder is intended for use in your application's module:
5564 <pre><code>
5565 public class SnacksModule extends AbstractModule {
5566   protected void configure() {
5567     MapBinder&lt;String, Snack&gt; mapbinder
5568         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5569     mapbinder.addBinding("twix").toInstance(new Twix());
5570     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5571     mapbinder.addBinding("skittles").to(Skittles.class);
5572   }
5573 }</code></pre>
5574
5575 <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5576 injected:
5577 <pre><code>
5578 class SnackMachine {
5579   {@literal @}Inject
5580   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5581 }</code></pre>
5582
5583 <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5584 {@code Map<K, Provider<V>>} for lazy value provision:
5585 <pre><code>
5586 class SnackMachine {
5587   {@literal @}Inject
5588   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5589 }</code></pre>
5590
5591 <p>Contributing mapbindings from different modules is supported. For example,
5592 it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5593 create their own {@code MapBinder<String, Snack>}, and to each contribute
5594 bindings to the snacks map. When that map is injected, it will contain
5595 entries from both modules.
5596
5597 <p>The map's iteration order is consistent with the binding order. This is
5598 convenient when multiple elements are contributed by the same module because
5599 that module can order its bindings appropriately. Avoid relying on the
5600 iteration order of elements contributed by different modules, since there is
5601 no equivalent mechanism to order modules.
5602
5603 <p>The map is unmodifiable.  Elements can only be added to the map by
5604 configuring the MapBinder.  Elements can never be removed from the map.
5605
5606 <p>Values are resolved at map injection time. If a value is bound to a
5607 provider, that provider's get method will be called each time the map is
5608 injected (unless the binding is also scoped, or a map of providers is injected).
5609
5610 <p>Annotations are used to create different maps of the same key/value
5611 type. Each distinct annotation gets its own independent map.
5612
5613 <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5614 once, map injection will fail. However, use {@link #permitDuplicates()} in
5615 order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5616 {@code Map<K, Set<Provider<V>>} will be added.
5617
5618 <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5619 throw an unchecked exception.
5620
5621 <p><strong>Values must be non-null to use map injection.</strong> If any
5622 value is null, map injection will fail (although injecting a map of providers
5623 will not).
5624
5625 @author dpb@google.com (David P. Baker)]]>
5626    </doc>
5627  </class>
5628  <!-- end class com.google.inject.multibindings.MapBinder -->
5629  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5630  <interface name="MapBinderBinding"    abstract="true"
5631    static="false" final="false" visibility="public"
5632    deprecated="not deprecated">
5633    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5634      abstract="true" native="false" synchronized="false"
5635      static="false" final="false" visibility="public"
5636      deprecated="not deprecated">
5637      <doc>
5638      <![CDATA[Returns the {@link Key} for the map.]]>
5639      </doc>
5640    </method>
5641    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5642      abstract="true" native="false" synchronized="false"
5643      static="false" final="false" visibility="public"
5644      deprecated="not deprecated">
5645      <doc>
5646      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5647 <p>
5648 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5649 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5650 <code>TypeLiteral&lt;String></code>.]]>
5651      </doc>
5652    </method>
5653    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5654      abstract="true" native="false" synchronized="false"
5655      static="false" final="false" visibility="public"
5656      deprecated="not deprecated">
5657      <doc>
5658      <![CDATA[Returns the TypeLiteral describing the values of the map.
5659 <p>
5660 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5661 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5662 <code>TypeLiteral&lt;Snack></code>.]]>
5663      </doc>
5664    </method>
5665    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5666      abstract="true" native="false" synchronized="false"
5667      static="false" final="false" visibility="public"
5668      deprecated="not deprecated">
5669      <doc>
5670      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5671 to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5672 This is only supported on bindings returned from an injector. This will throw
5673 {@link UnsupportedOperationException} if it is called on an element retrieved from
5674 {@link Elements#getElements}.
5675 <p>
5676 The elements will always match the type Map's generic type. For example, if getMapKey returns a
5677 key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5678 <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5679      </doc>
5680    </method>
5681    <method name="permitsDuplicates" return="boolean"
5682      abstract="true" native="false" synchronized="false"
5683      static="false" final="false" visibility="public"
5684      deprecated="not deprecated">
5685      <doc>
5686      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5687 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5688 MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5689      </doc>
5690    </method>
5691    <method name="containsElement" return="boolean"
5692      abstract="true" native="false" synchronized="false"
5693      static="false" final="false" visibility="public"
5694      deprecated="not deprecated">
5695      <param name="element" type="com.google.inject.spi.Element"/>
5696      <doc>
5697      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5698 given Element in order to support building and injecting the map. This will work for
5699 MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5700 only necessary if you are working with elements retrieved from modules (without an Injector),
5701 otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5702 <p>
5703 If you need to introspect the details of the map, such as the keys, values or if it permits
5704 duplicates, it is necessary to pass the elements through an Injector and use
5705 {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5706      </doc>
5707    </method>
5708    <doc>
5709    <![CDATA[A binding for a MapBinder.
5710 <p>
5711 Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5712 &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5713 Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5714 MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5715 bindings can be validated to be derived from this MapBinderBinding using
5716 {@link #containsElement(Element)}.
5717
5718 @param <T> The fully qualified type of the map, including Map. For example:
5719          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5720
5721 @since 3.0
5722 @author sameb@google.com (Sam Berlin)]]>
5723    </doc>
5724  </interface>
5725  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5726  <!-- start class com.google.inject.multibindings.Multibinder -->
5727  <class name="Multibinder" extends="java.lang.Object"
5728    abstract="true"
5729    static="false" final="false" visibility="public"
5730    deprecated="not deprecated">
5731    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5732      abstract="false" native="false" synchronized="false"
5733      static="true" final="false" visibility="public"
5734      deprecated="not deprecated">
5735      <param name="binder" type="com.google.inject.Binder"/>
5736      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5737      <doc>
5738      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5739 itself bound with no binding annotation.]]>
5740      </doc>
5741    </method>
5742    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5743      abstract="false" native="false" synchronized="false"
5744      static="true" final="false" visibility="public"
5745      deprecated="not deprecated">
5746      <param name="binder" type="com.google.inject.Binder"/>
5747      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5748      <doc>
5749      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5750 itself bound with no binding annotation.]]>
5751      </doc>
5752    </method>
5753    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5754      abstract="false" native="false" synchronized="false"
5755      static="true" final="false" visibility="public"
5756      deprecated="not deprecated">
5757      <param name="binder" type="com.google.inject.Binder"/>
5758      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5759      <param name="annotation" type="java.lang.annotation.Annotation"/>
5760      <doc>
5761      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5762 itself bound with {@code annotation}.]]>
5763      </doc>
5764    </method>
5765    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5766      abstract="false" native="false" synchronized="false"
5767      static="true" final="false" visibility="public"
5768      deprecated="not deprecated">
5769      <param name="binder" type="com.google.inject.Binder"/>
5770      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5771      <param name="annotation" type="java.lang.annotation.Annotation"/>
5772      <doc>
5773      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5774 itself bound with {@code annotation}.]]>
5775      </doc>
5776    </method>
5777    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5778      abstract="false" native="false" synchronized="false"
5779      static="true" final="false" visibility="public"
5780      deprecated="not deprecated">
5781      <param name="binder" type="com.google.inject.Binder"/>
5782      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5783      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5784      <doc>
5785      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5786 itself bound with {@code annotationType}.]]>
5787      </doc>
5788    </method>
5789    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5790      abstract="false" native="false" synchronized="false"
5791      static="true" final="false" visibility="public"
5792      deprecated="not deprecated">
5793      <param name="binder" type="com.google.inject.Binder"/>
5794      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5795      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5796      <doc>
5797      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5798 itself bound with {@code annotationType}.]]>
5799      </doc>
5800    </method>
5801    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5802      abstract="true" native="false" synchronized="false"
5803      static="false" final="false" visibility="public"
5804      deprecated="not deprecated">
5805      <doc>
5806      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5807 bound, the one that gets included is arbitrary. When multiple modules contribute elements to
5808 the set, this configuration option impacts all of them.
5809
5810 @return this multibinder
5811 @since 3.0]]>
5812      </doc>
5813    </method>
5814    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
5815      abstract="true" native="false" synchronized="false"
5816      static="false" final="false" visibility="public"
5817      deprecated="not deprecated">
5818      <doc>
5819      <![CDATA[Returns a binding builder used to add a new element in the set. Each
5820 bound element must have a distinct value. Bound providers will be
5821 evaluated each time the set is injected.
5822
5823 <p>It is an error to call this method without also calling one of the
5824 {@code to} methods on the returned binding builder.
5825
5826 <p>Scoping elements independently is supported. Use the {@code in} method
5827 to specify a binding scope.]]>
5828      </doc>
5829    </method>
5830    <doc>
5831    <![CDATA[An API to bind multiple values separately, only to later inject them as a
5832 complete collection. Multibinder is intended for use in your application's
5833 module:
5834 <pre><code>
5835 public class SnacksModule extends AbstractModule {
5836   protected void configure() {
5837     Multibinder&lt;Snack&gt; multibinder
5838         = Multibinder.newSetBinder(binder(), Snack.class);
5839     multibinder.addBinding().toInstance(new Twix());
5840     multibinder.addBinding().toProvider(SnickersProvider.class);
5841     multibinder.addBinding().to(Skittles.class);
5842   }
5843 }</code></pre>
5844
5845 <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
5846 <pre><code>
5847 class SnackMachine {
5848   {@literal @}Inject
5849   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
5850 }</code></pre>
5851
5852 <p>Contributing multibindings from different modules is supported. For
5853 example, it is okay for both {@code CandyModule} and {@code ChipsModule}
5854 to create their own {@code Multibinder<Snack>}, and to each contribute
5855 bindings to the set of snacks. When that set is injected, it will contain
5856 elements from both modules.
5857
5858 <p>The set's iteration order is consistent with the binding order. This is
5859 convenient when multiple elements are contributed by the same module because
5860 that module can order its bindings appropriately. Avoid relying on the
5861 iteration order of elements contributed by different modules, since there is
5862 no equivalent mechanism to order modules.
5863
5864 <p>The set is unmodifiable.  Elements can only be added to the set by
5865 configuring the multibinder.  Elements can never be removed from the set.
5866
5867 <p>Elements are resolved at set injection time. If an element is bound to a
5868 provider, that provider's get method will be called each time the set is
5869 injected (unless the binding is also scoped).
5870
5871 <p>Annotations are be used to create different sets of the same element
5872 type. Each distinct annotation gets its own independent collection of
5873 elements.
5874
5875 <p><strong>Elements must be distinct.</strong> If multiple bound elements
5876 have the same value, set injection will fail.
5877
5878 <p><strong>Elements must be non-null.</strong> If any set element is null,
5879 set injection will fail.
5880
5881 @author jessewilson@google.com (Jesse Wilson)]]>
5882    </doc>
5883  </class>
5884  <!-- end class com.google.inject.multibindings.Multibinder -->
5885  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
5886  <interface name="MultibinderBinding"    abstract="true"
5887    static="false" final="false" visibility="public"
5888    deprecated="not deprecated">
5889    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
5890      abstract="true" native="false" synchronized="false"
5891      static="false" final="false" visibility="public"
5892      deprecated="not deprecated">
5893      <doc>
5894      <![CDATA[Returns the key for the set.]]>
5895      </doc>
5896    </method>
5897    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5898      abstract="true" native="false" synchronized="false"
5899      static="false" final="false" visibility="public"
5900      deprecated="not deprecated">
5901      <doc>
5902      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
5903 <p>
5904 The elements will always match the type Set's generic type. For example, if getSetKey returns a
5905 key of <code>Set&lt;String></code>, then this will always return a
5906 <code>TypeLiteral&lt;String></code>.]]>
5907      </doc>
5908    </method>
5909    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
5910      abstract="true" native="false" synchronized="false"
5911      static="false" final="false" visibility="public"
5912      deprecated="not deprecated">
5913      <doc>
5914      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
5915 injector. This will throw {@link UnsupportedOperationException} if it is called on an element
5916 retrieved from {@link Elements#getElements}.
5917 <p>
5918 The elements will always match the type Set's generic type. For example, if getSetKey returns a
5919 key of <code>Set&lt;String></code>, then this will always return a list of type
5920 <code>List&lt;Binding&lt;String>></code>.]]>
5921      </doc>
5922    </method>
5923    <method name="permitsDuplicates" return="boolean"
5924      abstract="true" native="false" synchronized="false"
5925      static="false" final="false" visibility="public"
5926      deprecated="not deprecated">
5927      <doc>
5928      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
5929 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5930 MultibinderBinding retrieved from {@link Elements#getElements}.]]>
5931      </doc>
5932    </method>
5933    <method name="containsElement" return="boolean"
5934      abstract="true" native="false" synchronized="false"
5935      static="false" final="false" visibility="public"
5936      deprecated="not deprecated">
5937      <param name="element" type="com.google.inject.spi.Element"/>
5938      <doc>
5939      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
5940 derive the elements of the set and other bindings that Multibinder uses internally. This will
5941 work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
5942 Usually this is only necessary if you are working with elements retrieved from modules (without
5943 an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
5944 <p>
5945 If you need to introspect the details of the set, such as the values or if it permits
5946 duplicates, it is necessary to pass the elements through an Injector and use
5947 {@link #getElements()} and {@link #permitsDuplicates()}.]]>
5948      </doc>
5949    </method>
5950    <doc>
5951    <![CDATA[A binding for a Multibinder.
5952
5953 @param <T> The fully qualified type of the set, including Set. For example:
5954          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
5955
5956 @since 3.0
5957 @author sameb@google.com (Sam Berlin)]]>
5958    </doc>
5959  </interface>
5960  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
5961  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
5962  <interface name="MultibindingsTargetVisitor"    abstract="true"
5963    static="false" final="false" visibility="public"
5964    deprecated="not deprecated">
5965    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
5966    <method name="visit" return="V"
5967      abstract="true" native="false" synchronized="false"
5968      static="false" final="false" visibility="public"
5969      deprecated="not deprecated">
5970      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
5971      <doc>
5972      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
5973      </doc>
5974    </method>
5975    <method name="visit" return="V"
5976      abstract="true" native="false" synchronized="false"
5977      static="false" final="false" visibility="public"
5978      deprecated="not deprecated">
5979      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
5980      <doc>
5981      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
5982      </doc>
5983    </method>
5984    <doc>
5985    <![CDATA[A visitor for the multibinder extension.
5986 <p>
5987 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
5988 {@link Multibinder} or {@link MapBinder} will be visited through this interface.
5989
5990 @since 3.0
5991 @author sameb@google.com (Sam Berlin)]]>
5992    </doc>
5993  </interface>
5994  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
5995</package>
5996<package name="com.google.inject.name">
5997  <!-- start class com.google.inject.name.Named -->
5998  <class name="Named"    abstract="true"
5999    static="false" final="false" visibility="public"
6000    deprecated="not deprecated">
6001    <implements name="java.lang.annotation.Annotation"/>
6002    <doc>
6003    <![CDATA[Annotates named things.
6004
6005 @author crazybob@google.com (Bob Lee)]]>
6006    </doc>
6007  </class>
6008  <!-- end class com.google.inject.name.Named -->
6009  <!-- start class com.google.inject.name.Names -->
6010  <class name="Names" extends="java.lang.Object"
6011    abstract="false"
6012    static="false" final="false" visibility="public"
6013    deprecated="not deprecated">
6014    <method name="named" return="com.google.inject.name.Named"
6015      abstract="false" native="false" synchronized="false"
6016      static="true" final="false" visibility="public"
6017      deprecated="not deprecated">
6018      <param name="name" type="java.lang.String"/>
6019      <doc>
6020      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6021      </doc>
6022    </method>
6023    <method name="bindProperties"
6024      abstract="false" native="false" synchronized="false"
6025      static="true" final="false" visibility="public"
6026      deprecated="not deprecated">
6027      <param name="binder" type="com.google.inject.Binder"/>
6028      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6029      <doc>
6030      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6031 {@code properties}.]]>
6032      </doc>
6033    </method>
6034    <method name="bindProperties"
6035      abstract="false" native="false" synchronized="false"
6036      static="true" final="false" visibility="public"
6037      deprecated="not deprecated">
6038      <param name="binder" type="com.google.inject.Binder"/>
6039      <param name="properties" type="java.util.Properties"/>
6040      <doc>
6041      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6042 method binds all properties including those inherited from
6043 {@link Properties#defaults defaults}.]]>
6044      </doc>
6045    </method>
6046    <doc>
6047    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6048
6049 @author crazybob@google.com (Bob Lee)]]>
6050    </doc>
6051  </class>
6052  <!-- end class com.google.inject.name.Names -->
6053</package>
6054<package name="com.google.inject.persist">
6055  <!-- start class com.google.inject.persist.PersistFilter -->
6056  <class name="PersistFilter" extends="java.lang.Object"
6057    abstract="false"
6058    static="false" final="true" visibility="public"
6059    deprecated="not deprecated">
6060    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6061      static="false" final="false" visibility="public"
6062      deprecated="not deprecated">
6063    </constructor>
6064    <method name="init"
6065      abstract="false" native="false" synchronized="false"
6066      static="false" final="false" visibility="public"
6067      deprecated="not deprecated">
6068      <param name="filterConfig" type="FilterConfig"/>
6069      <exception name="ServletException" type="ServletException"/>
6070    </method>
6071    <method name="destroy"
6072      abstract="false" native="false" synchronized="false"
6073      static="false" final="false" visibility="public"
6074      deprecated="not deprecated">
6075    </method>
6076    <method name="doFilter"
6077      abstract="false" native="false" synchronized="false"
6078      static="false" final="false" visibility="public"
6079      deprecated="not deprecated">
6080      <param name="servletRequest" type="ServletRequest"/>
6081      <param name="servletResponse" type="ServletResponse"/>
6082      <param name="filterChain" type="FilterChain"/>
6083      <exception name="IOException" type="java.io.IOException"/>
6084      <exception name="ServletException" type="ServletException"/>
6085    </method>
6086    <doc>
6087    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6088 guice-persist manage the lifecycle of active units of work.
6089 The filter automatically starts and stops the relevant {@link PersistService}
6090 upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6091 {@link javax.servlet.Filter#destroy()} respectively.
6092
6093 <p> To be able to use the open session-in-view pattern (i.e. work per request),
6094 register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6095 important that you register this filter before any other filter.
6096
6097 For multiple providers, you should register this filter once per provider, inside
6098 a private module for each persist module installed (this must be the same private
6099 module where the specific persist module is itself installed).
6100
6101 <p>
6102 Example configuration:
6103 <pre>{@code
6104  public class MyModule extends ServletModule {
6105    public void configureServlets() {
6106      filter("/*").through(PersistFilter.class);
6107
6108      serve("/index.html").with(MyHtmlServlet.class);
6109      // Etc.
6110    }
6111  }
6112 }</pre>
6113 <p>
6114 This filter is thread safe and allows you to create injectors concurrently
6115 and deploy multiple guice-persist modules within the same injector, or even
6116 multiple injectors with persist modules withing the same JVM or web app.
6117 <p>
6118 This filter requires the Guice Servlet extension.
6119
6120 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6121    </doc>
6122  </class>
6123  <!-- end class com.google.inject.persist.PersistFilter -->
6124  <!-- start class com.google.inject.persist.PersistModule -->
6125  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6126    abstract="true"
6127    static="false" final="false" visibility="public"
6128    deprecated="not deprecated">
6129    <constructor name="PersistModule"
6130      static="false" final="false" visibility="public"
6131      deprecated="not deprecated">
6132    </constructor>
6133    <method name="configure"
6134      abstract="false" native="false" synchronized="false"
6135      static="false" final="true" visibility="protected"
6136      deprecated="not deprecated">
6137    </method>
6138    <method name="configurePersistence"
6139      abstract="true" native="false" synchronized="false"
6140      static="false" final="false" visibility="protected"
6141      deprecated="not deprecated">
6142    </method>
6143    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6144      abstract="true" native="false" synchronized="false"
6145      static="false" final="false" visibility="protected"
6146      deprecated="not deprecated">
6147    </method>
6148    <doc>
6149    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6150 providers.
6151
6152 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6153    </doc>
6154  </class>
6155  <!-- end class com.google.inject.persist.PersistModule -->
6156  <!-- start interface com.google.inject.persist.PersistService -->
6157  <interface name="PersistService"    abstract="true"
6158    static="false" final="false" visibility="public"
6159    deprecated="not deprecated">
6160    <method name="start"
6161      abstract="true" native="false" synchronized="false"
6162      static="false" final="false" visibility="public"
6163      deprecated="not deprecated">
6164      <doc>
6165      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6166 use. For instance, with JPA, it creates an EntityManagerFactory and may
6167 open connection pools. This method must be called by your code prior to
6168 using any guice-persist or JPA artifacts. If already started,
6169 calling this method does nothing, if already stopped, it also does
6170 nothing.]]>
6171      </doc>
6172    </method>
6173    <method name="stop"
6174      abstract="true" native="false" synchronized="false"
6175      static="false" final="false" visibility="public"
6176      deprecated="not deprecated">
6177      <doc>
6178      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6179 closes the {@code EntityManagerFactory}. If already stopped, calling this
6180 method does nothing. If not yet started, it also does nothing.]]>
6181      </doc>
6182    </method>
6183    <doc>
6184    <![CDATA[Persistence provider service. Use this to manage the overall
6185 startup and stop of the persistence module(s).
6186
6187 TODO(dhanji): Integrate with Service API when appropriate.
6188
6189 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6190    </doc>
6191  </interface>
6192  <!-- end interface com.google.inject.persist.PersistService -->
6193  <!-- start class com.google.inject.persist.Transactional -->
6194  <class name="Transactional"    abstract="true"
6195    static="false" final="false" visibility="public"
6196    deprecated="not deprecated">
6197    <implements name="java.lang.annotation.Annotation"/>
6198    <doc>
6199    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6200 Consult the documentation on http://code.google.com/p/google-guice for detailed semantics.
6201 Marking a method {@code @Transactional} will start a new transaction before the method
6202 executes and commit it after the method returns.
6203 <p>
6204 If the method throws an exception, the transaction will be rolled back <em>unless</em>
6205 you have specifically requested not to in the {@link #ignore()} clause.
6206 <p>
6207 Similarly, the set of exceptions that will trigger a rollback can be defined in
6208 the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6209 rollback.
6210
6211 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6212    </doc>
6213  </class>
6214  <!-- end class com.google.inject.persist.Transactional -->
6215  <!-- start interface com.google.inject.persist.UnitOfWork -->
6216  <interface name="UnitOfWork"    abstract="true"
6217    static="false" final="false" visibility="public"
6218    deprecated="not deprecated">
6219    <method name="begin"
6220      abstract="true" native="false" synchronized="false"
6221      static="false" final="false" visibility="public"
6222      deprecated="not deprecated">
6223      <doc>
6224      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6225 is already one open, the invocation will do nothing. In this way, you can define arbitrary
6226 units-of-work that nest within one another safely.
6227
6228 Transaction semantics are not affected.]]>
6229      </doc>
6230    </method>
6231    <method name="end"
6232      abstract="true" native="false" synchronized="false"
6233      static="false" final="false" visibility="public"
6234      deprecated="not deprecated">
6235      <doc>
6236      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6237 layer to close. If there is no Unit of work open, then the call returns silently. You can
6238 safely invoke end() repeatedly.
6239 <p>
6240 Transaction semantics are not affected.]]>
6241      </doc>
6242    </method>
6243    <doc>
6244    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6245 work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6246 of work is required. Starting and ending a unit of work directly corresponds to opening and
6247 closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6248 <p> The
6249 Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6250 end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6251 behind thread-locality of Unit of Work semantics).
6252
6253 <ul>
6254   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6255   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6256   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6257       background or bootstrap thread) is probably a good use case.</li>
6258  </ul>
6259
6260 @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6261    </doc>
6262  </interface>
6263  <!-- end interface com.google.inject.persist.UnitOfWork -->
6264</package>
6265<package name="com.google.inject.persist.finder">
6266  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6267  <class name="DynamicFinder" extends="java.lang.Object"
6268    abstract="false"
6269    static="false" final="true" visibility="public"
6270    deprecated="not deprecated">
6271    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6272      static="false" final="false" visibility="public"
6273      deprecated="not deprecated">
6274    </constructor>
6275    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6276      abstract="false" native="false" synchronized="false"
6277      static="true" final="false" visibility="public"
6278      deprecated="not deprecated">
6279      <param name="method" type="java.lang.reflect.Method"/>
6280      <doc>
6281      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6282
6283 @param method a method you want to test as a dynamic finder]]>
6284      </doc>
6285    </method>
6286    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6287      abstract="false" native="false" synchronized="false"
6288      static="false" final="false" visibility="public"
6289      deprecated="not deprecated">
6290    </method>
6291    <doc>
6292    <![CDATA[Utility that helps you introspect dynamic finder methods.
6293
6294 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6295    </doc>
6296  </class>
6297  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6298  <!-- start class com.google.inject.persist.finder.Finder -->
6299  <class name="Finder"    abstract="true"
6300    static="false" final="false" visibility="public"
6301    deprecated="not deprecated">
6302    <implements name="java.lang.annotation.Annotation"/>
6303    <doc>
6304    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6305 specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6306
6307 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6308    </doc>
6309  </class>
6310  <!-- end class com.google.inject.persist.finder.Finder -->
6311  <!-- start class com.google.inject.persist.finder.FirstResult -->
6312  <class name="FirstResult"    abstract="true"
6313    static="false" final="false" visibility="public"
6314    deprecated="not deprecated">
6315    <implements name="java.lang.annotation.Annotation"/>
6316    <doc>
6317    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6318 the index of the first result in the result set you are interested in.
6319 Useful for paging result sets. Complemented by {@link MaxResults}.
6320
6321 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6322    </doc>
6323  </class>
6324  <!-- end class com.google.inject.persist.finder.FirstResult -->
6325  <!-- start class com.google.inject.persist.finder.MaxResults -->
6326  <class name="MaxResults"    abstract="true"
6327    static="false" final="false" visibility="public"
6328    deprecated="not deprecated">
6329    <implements name="java.lang.annotation.Annotation"/>
6330    <doc>
6331    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6332 the maximum size of returned result window. Usefule for paging result sets.
6333 Complement of {@link FirstResult}.
6334
6335 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6336    </doc>
6337  </class>
6338  <!-- end class com.google.inject.persist.finder.MaxResults -->
6339</package>
6340<package name="com.google.inject.persist.jpa">
6341  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6342  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6343    abstract="false"
6344    static="false" final="true" visibility="public"
6345    deprecated="not deprecated">
6346    <constructor name="JpaPersistModule" type="java.lang.String"
6347      static="false" final="false" visibility="public"
6348      deprecated="not deprecated">
6349    </constructor>
6350    <method name="configurePersistence"
6351      abstract="false" native="false" synchronized="false"
6352      static="false" final="false" visibility="protected"
6353      deprecated="not deprecated">
6354    </method>
6355    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6356      abstract="false" native="false" synchronized="false"
6357      static="false" final="false" visibility="protected"
6358      deprecated="not deprecated">
6359    </method>
6360    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6361      abstract="false" native="false" synchronized="false"
6362      static="false" final="false" visibility="public"
6363      deprecated="not deprecated">
6364      <param name="properties" type="java.util.Properties"/>
6365      <doc>
6366      <![CDATA[Configures the JPA persistence provider with a set of properties.
6367
6368 @param properties A set of name value pairs that configure a JPA persistence
6369 provider as per the specification.]]>
6370      </doc>
6371    </method>
6372    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6373      abstract="false" native="false" synchronized="false"
6374      static="false" final="false" visibility="public"
6375      deprecated="not deprecated">
6376      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6377      <doc>
6378      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6379
6380 @param iface Any interface type whose methods are all dynamic finders.]]>
6381      </doc>
6382    </method>
6383    <doc>
6384    <![CDATA[JPA provider for guice persist.
6385
6386 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6387    </doc>
6388  </class>
6389  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6390</package>
6391<package name="com.google.inject.servlet">
6392  <!-- start class com.google.inject.servlet.GuiceFilter -->
6393  <class name="GuiceFilter" extends="java.lang.Object"
6394    abstract="false"
6395    static="false" final="false" visibility="public"
6396    deprecated="not deprecated">
6397    <constructor name="GuiceFilter"
6398      static="false" final="false" visibility="public"
6399      deprecated="not deprecated">
6400    </constructor>
6401    <method name="doFilter"
6402      abstract="false" native="false" synchronized="false"
6403      static="false" final="false" visibility="public"
6404      deprecated="not deprecated">
6405      <param name="servletRequest" type="ServletRequest"/>
6406      <param name="servletResponse" type="ServletResponse"/>
6407      <param name="filterChain" type="FilterChain"/>
6408      <exception name="IOException" type="java.io.IOException"/>
6409      <exception name="ServletException" type="ServletException"/>
6410    </method>
6411    <method name="init"
6412      abstract="false" native="false" synchronized="false"
6413      static="false" final="false" visibility="public"
6414      deprecated="not deprecated">
6415      <param name="filterConfig" type="FilterConfig"/>
6416      <exception name="ServletException" type="ServletException"/>
6417    </method>
6418    <method name="destroy"
6419      abstract="false" native="false" synchronized="false"
6420      static="false" final="false" visibility="public"
6421      deprecated="not deprecated">
6422    </method>
6423    <doc>
6424    <![CDATA[<p>
6425 Apply this filter in web.xml above all other filters (typically), to all requests where you plan
6426  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
6427  and servlets:
6428  <pre>
6429  &lt;filter&gt;
6430    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6431    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
6432  &lt;/filter&gt;
6433
6434  &lt;filter-mapping&gt;
6435    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6436    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
6437  &lt;/filter-mapping&gt;
6438  </pre>
6439
6440 This filter must appear before every filter that makes use of Guice injection or servlet
6441 scopes functionality. Typically, you will only register this filter in web.xml and register
6442 any other filters (and servlets) using a {@link ServletModule}.
6443
6444 @author crazybob@google.com (Bob Lee)
6445 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6446    </doc>
6447  </class>
6448  <!-- end class com.google.inject.servlet.GuiceFilter -->
6449  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
6450  <class name="GuiceServletContextListener" extends="java.lang.Object"
6451    abstract="true"
6452    static="false" final="false" visibility="public"
6453    deprecated="not deprecated">
6454    <constructor name="GuiceServletContextListener"
6455      static="false" final="false" visibility="public"
6456      deprecated="not deprecated">
6457    </constructor>
6458    <method name="contextInitialized"
6459      abstract="false" native="false" synchronized="false"
6460      static="false" final="false" visibility="public"
6461      deprecated="not deprecated">
6462      <param name="servletContextEvent" type="ServletContextEvent"/>
6463    </method>
6464    <method name="contextDestroyed"
6465      abstract="false" native="false" synchronized="false"
6466      static="false" final="false" visibility="public"
6467      deprecated="not deprecated">
6468      <param name="servletContextEvent" type="ServletContextEvent"/>
6469    </method>
6470    <method name="getInjector" return="com.google.inject.Injector"
6471      abstract="true" native="false" synchronized="false"
6472      static="false" final="false" visibility="protected"
6473      deprecated="not deprecated">
6474      <doc>
6475      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
6476 injector.]]>
6477      </doc>
6478    </method>
6479    <doc>
6480    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
6481 class as a logical place to create and configure your injector. This will ensure the injector
6482 is created when the web application is deployed.
6483
6484 @author Kevin Bourrillion (kevinb@google.com)
6485 @since 2.0]]>
6486    </doc>
6487  </class>
6488  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
6489  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
6490  <interface name="InstanceFilterBinding"    abstract="true"
6491    static="false" final="false" visibility="public"
6492    deprecated="not deprecated">
6493    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6494    <method name="getFilterInstance" return="Filter"
6495      abstract="true" native="false" synchronized="false"
6496      static="false" final="false" visibility="public"
6497      deprecated="not deprecated">
6498      <doc>
6499      <![CDATA[Returns the filter instance that will be used.]]>
6500      </doc>
6501    </method>
6502    <doc>
6503    <![CDATA[A binding to a single instance of a filter.
6504
6505 @author sameb@google.com
6506 @since 3.0]]>
6507    </doc>
6508  </interface>
6509  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
6510  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
6511  <interface name="InstanceServletBinding"    abstract="true"
6512    static="false" final="false" visibility="public"
6513    deprecated="not deprecated">
6514    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6515    <method name="getServletInstance" return="HttpServlet"
6516      abstract="true" native="false" synchronized="false"
6517      static="false" final="false" visibility="public"
6518      deprecated="not deprecated">
6519      <doc>
6520      <![CDATA[Returns the servlet instance that will be used.]]>
6521      </doc>
6522    </method>
6523    <doc>
6524    <![CDATA[A binding to a single instance of a servlet.
6525
6526 @author sameb@google.com
6527 @since 3.0]]>
6528    </doc>
6529  </interface>
6530  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
6531  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
6532  <interface name="LinkedFilterBinding"    abstract="true"
6533    static="false" final="false" visibility="public"
6534    deprecated="not deprecated">
6535    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6536    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends Filter&gt;"
6537      abstract="true" native="false" synchronized="false"
6538      static="false" final="false" visibility="public"
6539      deprecated="not deprecated">
6540      <doc>
6541      <![CDATA[Returns the key used to lookup the filter instance.]]>
6542      </doc>
6543    </method>
6544    <doc>
6545    <![CDATA[A linked binding to a filter.
6546
6547 @author sameb@google.com
6548 @since 3.0]]>
6549    </doc>
6550  </interface>
6551  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
6552  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
6553  <interface name="LinkedServletBinding"    abstract="true"
6554    static="false" final="false" visibility="public"
6555    deprecated="not deprecated">
6556    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6557    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends HttpServlet&gt;"
6558      abstract="true" native="false" synchronized="false"
6559      static="false" final="false" visibility="public"
6560      deprecated="not deprecated">
6561      <doc>
6562      <![CDATA[Returns the key used to lookup the servlet instance.]]>
6563      </doc>
6564    </method>
6565    <doc>
6566    <![CDATA[A linked binding to a servlet.
6567
6568 @author sameb@google.com
6569 @since 3.0]]>
6570    </doc>
6571  </interface>
6572  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
6573  <!-- start class com.google.inject.servlet.RequestParameters -->
6574  <class name="RequestParameters"    abstract="true"
6575    static="false" final="false" visibility="public"
6576    deprecated="not deprecated">
6577    <implements name="java.lang.annotation.Annotation"/>
6578    <doc>
6579    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
6580 when you want the HTTP request parameter map to be injected.
6581
6582 @author crazybob@google.com (Bob Lee)]]>
6583    </doc>
6584  </class>
6585  <!-- end class com.google.inject.servlet.RequestParameters -->
6586  <!-- start class com.google.inject.servlet.RequestScoped -->
6587  <class name="RequestScoped"    abstract="true"
6588    static="false" final="false" visibility="public"
6589    deprecated="not deprecated">
6590    <implements name="java.lang.annotation.Annotation"/>
6591    <doc>
6592    <![CDATA[Apply this to implementation classes when you want one instance per request.
6593
6594 @author crazybob@google.com (Bob Lee)]]>
6595    </doc>
6596  </class>
6597  <!-- end class com.google.inject.servlet.RequestScoped -->
6598  <!-- start class com.google.inject.servlet.ScopingException -->
6599  <class name="ScopingException" extends="java.lang.IllegalStateException"
6600    abstract="false"
6601    static="false" final="true" visibility="public"
6602    deprecated="not deprecated">
6603    <constructor name="ScopingException" type="java.lang.String"
6604      static="false" final="false" visibility="public"
6605      deprecated="not deprecated">
6606    </constructor>
6607    <doc>
6608    <![CDATA[Exception thrown when there was a failure entering request scope.
6609
6610 @author Chris Nokleberg]]>
6611    </doc>
6612  </class>
6613  <!-- end class com.google.inject.servlet.ScopingException -->
6614  <!-- start class com.google.inject.servlet.ScopingOnly -->
6615  <class name="ScopingOnly"    abstract="true"
6616    static="false" final="false" visibility="public"
6617    deprecated="not deprecated">
6618    <implements name="java.lang.annotation.Annotation"/>
6619    <doc>
6620    <![CDATA[Annotates a {@link GuiceFilter} that provides scope functionality, but
6621 doesn't dispatch to {@link ServletModule} bound servlets or filters.
6622
6623 @author iqshum@google.com (Isaac Shum)]]>
6624    </doc>
6625  </class>
6626  <!-- end class com.google.inject.servlet.ScopingOnly -->
6627  <!-- start class com.google.inject.servlet.ServletModule -->
6628  <class name="ServletModule" extends="com.google.inject.AbstractModule"
6629    abstract="false"
6630    static="false" final="false" visibility="public"
6631    deprecated="not deprecated">
6632    <constructor name="ServletModule"
6633      static="false" final="false" visibility="public"
6634      deprecated="not deprecated">
6635    </constructor>
6636    <method name="configure"
6637      abstract="false" native="false" synchronized="false"
6638      static="false" final="true" visibility="protected"
6639      deprecated="not deprecated">
6640    </method>
6641    <method name="configureServlets"
6642      abstract="false" native="false" synchronized="false"
6643      static="false" final="false" visibility="protected"
6644      deprecated="not deprecated">
6645      <doc>
6646      <![CDATA[<h3>Servlet Mapping EDSL</h3>
6647
6648 <p> Part of the EDSL builder language for configuring servlets
6649 and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
6650 Filters and servlets are configured here using simple java method calls. Here is a typical
6651 example of registering a filter when creating your Guice injector:
6652
6653 <pre>
6654   Guice.createInjector(..., new ServletModule() {
6655
6656     {@literal @}Override
6657     protected void configureServlets() {
6658       <b>serve("*.html").with(MyServlet.class)</b>
6659     }
6660   }
6661 </pre>
6662
6663 This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
6664 any web pages ending in {@code .html}. You can also use a path-style syntax to register
6665 servlets:
6666
6667 <pre>
6668       <b>serve("/my/*").with(MyServlet.class)</b>
6669 </pre>
6670
6671 Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
6672 directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
6673 your module. Mapping a servlet that is bound under any other scope is an error.
6674
6675 <p>
6676 <h4>Dispatch Order</h4>
6677 You are free to register as many servlets and filters as you like this way. They will
6678 be compared and dispatched in the order in which the filter methods are called:
6679
6680 <pre>
6681
6682   Guice.createInjector(..., new ServletModule() {
6683
6684     {@literal @}Override
6685     protected void configureServlets() {
6686       filter("/*").through(MyFilter.class);
6687       filter("*.css").through(MyCssFilter.class);
6688       filter("*.jpg").through(new MyJpgFilter());
6689       // etc..
6690
6691       serve("*.html").with(MyServlet.class);
6692       serve("/my/*").with(MyServlet.class);
6693       serve("*.jpg").with(new MyServlet());
6694       // etc..
6695      }
6696    }
6697 </pre>
6698 This will traverse down the list of rules in lexical order. For example, a url
6699  "{@code /my/file.js}" (after it runs through the matching filters) will first
6700  be compared against the servlet mapping:
6701
6702 <pre>
6703       serve("*.html").with(MyServlet.class);
6704 </pre>
6705 And failing that, it will descend to the next servlet mapping:
6706
6707 <pre>
6708       serve("/my/*").with(MyServlet.class);
6709 </pre>
6710
6711 Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
6712 two mapping rules can also be written in more compact form using varargs syntax:
6713
6714 <pre>
6715       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
6716 </pre>
6717
6718 This way you can map several URI patterns to the same servlet. A similar syntax is
6719 also available for filter mappings.
6720
6721 <p>
6722 <h4>Regular Expressions</h4>
6723 You can also map servlets (or filters) to URIs using regular expressions:
6724 <pre>
6725    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
6726 </pre>
6727
6728 This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
6729 <ul>
6730 <li>http://www.google.com/ajax.html</li>
6731 <li>http://www.google.com/content/ajax/index</li>
6732 <li>http://www.google.com/it/is_totally_ajaxian</li>
6733 </ul>
6734
6735
6736 <h3>Initialization Parameters</h3>
6737
6738 Servlets (and filters) allow you to pass in init params
6739 using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
6740 Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
6741 name/value pairs. For example, to initialize {@code MyServlet} with two parameters
6742 ({@code name="Dhanji", site="google.com"}) you could write:
6743
6744 <pre>
6745  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
6746  params.put("name", "Dhanji");
6747  params.put("site", "google.com");
6748
6749  ...
6750      serve("/*").with(MyServlet.class, <b>params</b>)
6751 </pre>
6752
6753 <p>
6754 <h3>Binding Keys</h3>
6755
6756 You can also bind keys rather than classes. This lets you hide
6757 implementations with package-local visbility and expose them using
6758 only a Guice module and an annotation:
6759
6760 <pre>
6761  ...
6762      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
6763 </pre>
6764
6765 Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
6766 custom binding annotation. Elsewhere (in one of your own modules) you can bind this
6767 filter's implementation:
6768
6769 <pre>
6770   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
6771 </pre>
6772
6773 See {@link com.google.inject.Binder} for more information on binding syntax.
6774
6775 <p>
6776 <h3>Multiple Modules</h3>
6777
6778 It is sometimes useful to capture servlet and filter mappings from multiple different
6779 modules. This is essential if you want to package and offer drop-in Guice plugins that
6780 provide servlet functionality.
6781
6782 <p>
6783 Guice Servlet allows you to register several instances of {@code ServletModule} to your
6784 injector. The order in which these modules are installed determines the dispatch order
6785 of filters and the precedence order of servlets. For example, if you had two servlet modules,
6786 {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
6787 to the same URI pattern, {@code "/*"}:
6788
6789 <p>
6790 In {@code RpcModule}:
6791 <pre>
6792     filter("/*").through(RpcFilter.class);
6793 </pre>
6794
6795 In {@code WebServiceModule}:
6796 <pre>
6797     filter("/*").through(WebServiceFilter.class);
6798 </pre>
6799
6800 Then the order in which these filters are dispatched is determined by the order in which
6801 the modules are installed:
6802
6803 <pre>
6804   <b>install(new WebServiceModule());</b>
6805   install(new RpcModule());
6806 </pre>
6807
6808 In the case shown above {@code WebServiceFilter} will run first.
6809
6810 @since 2.0]]>
6811      </doc>
6812    </method>
6813    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6814      abstract="false" native="false" synchronized="false"
6815      static="false" final="true" visibility="protected"
6816      deprecated="not deprecated">
6817      <param name="urlPattern" type="java.lang.String"/>
6818      <param name="morePatterns" type="java.lang.String[]"/>
6819      <doc>
6820      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6821 @since 2.0]]>
6822      </doc>
6823    </method>
6824    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6825      abstract="false" native="false" synchronized="false"
6826      static="false" final="true" visibility="protected"
6827      deprecated="not deprecated">
6828      <param name="regex" type="java.lang.String"/>
6829      <param name="regexes" type="java.lang.String[]"/>
6830      <doc>
6831      <![CDATA[@param regex Any Java-style regular expression.
6832 @since 2.0]]>
6833      </doc>
6834    </method>
6835    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6836      abstract="false" native="false" synchronized="false"
6837      static="false" final="true" visibility="protected"
6838      deprecated="not deprecated">
6839      <param name="urlPattern" type="java.lang.String"/>
6840      <param name="morePatterns" type="java.lang.String[]"/>
6841      <doc>
6842      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6843 @since 2.0]]>
6844      </doc>
6845    </method>
6846    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6847      abstract="false" native="false" synchronized="false"
6848      static="false" final="true" visibility="protected"
6849      deprecated="not deprecated">
6850      <param name="regex" type="java.lang.String"/>
6851      <param name="regexes" type="java.lang.String[]"/>
6852      <doc>
6853      <![CDATA[@param regex Any Java-style regular expression.
6854 @since 2.0]]>
6855      </doc>
6856    </method>
6857    <method name="getServletContext" return="ServletContext"
6858      abstract="false" native="false" synchronized="false"
6859      static="false" final="true" visibility="protected"
6860      deprecated="not deprecated">
6861      <doc>
6862      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
6863 create your injector. Otherwise, it returns null.
6864 @return The current servlet context.
6865 @since 3.0]]>
6866      </doc>
6867    </method>
6868    <doc>
6869    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
6870 objects so you can inject the request, response, session, etc.
6871
6872 <p>
6873 You should subclass this module to register servlets and
6874 filters in the {@link #configureServlets()} method.
6875
6876 @author crazybob@google.com (Bob Lee)
6877 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6878    </doc>
6879  </class>
6880  <!-- end class com.google.inject.servlet.ServletModule -->
6881  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
6882  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
6883    static="true" final="false" visibility="public"
6884    deprecated="not deprecated">
6885    <method name="through"
6886      abstract="true" native="false" synchronized="false"
6887      static="false" final="false" visibility="public"
6888      deprecated="not deprecated">
6889      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6890    </method>
6891    <method name="through"
6892      abstract="true" native="false" synchronized="false"
6893      static="false" final="false" visibility="public"
6894      deprecated="not deprecated">
6895      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6896    </method>
6897    <method name="through"
6898      abstract="true" native="false" synchronized="false"
6899      static="false" final="false" visibility="public"
6900      deprecated="not deprecated">
6901      <param name="filter" type="Filter"/>
6902      <doc>
6903      <![CDATA[@since 3.0]]>
6904      </doc>
6905    </method>
6906    <method name="through"
6907      abstract="true" native="false" synchronized="false"
6908      static="false" final="false" visibility="public"
6909      deprecated="not deprecated">
6910      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6911      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6912    </method>
6913    <method name="through"
6914      abstract="true" native="false" synchronized="false"
6915      static="false" final="false" visibility="public"
6916      deprecated="not deprecated">
6917      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6918      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6919    </method>
6920    <method name="through"
6921      abstract="true" native="false" synchronized="false"
6922      static="false" final="false" visibility="public"
6923      deprecated="not deprecated">
6924      <param name="filter" type="Filter"/>
6925      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6926      <doc>
6927      <![CDATA[@since 3.0]]>
6928      </doc>
6929    </method>
6930    <doc>
6931    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
6932
6933 @since 2.0]]>
6934    </doc>
6935  </interface>
6936  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
6937  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
6938  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
6939    static="true" final="false" visibility="public"
6940    deprecated="not deprecated">
6941    <method name="with"
6942      abstract="true" native="false" synchronized="false"
6943      static="false" final="false" visibility="public"
6944      deprecated="not deprecated">
6945      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
6946    </method>
6947    <method name="with"
6948      abstract="true" native="false" synchronized="false"
6949      static="false" final="false" visibility="public"
6950      deprecated="not deprecated">
6951      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
6952    </method>
6953    <method name="with"
6954      abstract="true" native="false" synchronized="false"
6955      static="false" final="false" visibility="public"
6956      deprecated="not deprecated">
6957      <param name="servlet" type="HttpServlet"/>
6958      <doc>
6959      <![CDATA[@since 3.0]]>
6960      </doc>
6961    </method>
6962    <method name="with"
6963      abstract="true" native="false" synchronized="false"
6964      static="false" final="false" visibility="public"
6965      deprecated="not deprecated">
6966      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
6967      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6968    </method>
6969    <method name="with"
6970      abstract="true" native="false" synchronized="false"
6971      static="false" final="false" visibility="public"
6972      deprecated="not deprecated">
6973      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
6974      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6975    </method>
6976    <method name="with"
6977      abstract="true" native="false" synchronized="false"
6978      static="false" final="false" visibility="public"
6979      deprecated="not deprecated">
6980      <param name="servlet" type="HttpServlet"/>
6981      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6982      <doc>
6983      <![CDATA[@since 3.0]]>
6984      </doc>
6985    </method>
6986    <doc>
6987    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
6988
6989 @since 2.0]]>
6990    </doc>
6991  </interface>
6992  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
6993  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
6994  <interface name="ServletModuleBinding"    abstract="true"
6995    static="false" final="false" visibility="public"
6996    deprecated="not deprecated">
6997    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
6998      abstract="true" native="false" synchronized="false"
6999      static="false" final="false" visibility="public"
7000      deprecated="not deprecated">
7001      <doc>
7002      <![CDATA[Returns the pattern type that this binding was created with.]]>
7003      </doc>
7004    </method>
7005    <method name="getPattern" return="java.lang.String"
7006      abstract="true" native="false" synchronized="false"
7007      static="false" final="false" visibility="public"
7008      deprecated="not deprecated">
7009      <doc>
7010      <![CDATA[Returns the pattern used to match against the binding.]]>
7011      </doc>
7012    </method>
7013    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7014      abstract="true" native="false" synchronized="false"
7015      static="false" final="false" visibility="public"
7016      deprecated="not deprecated">
7017      <doc>
7018      <![CDATA[Returns any context params supplied when creating the binding.]]>
7019      </doc>
7020    </method>
7021    <method name="matchesUri" return="boolean"
7022      abstract="true" native="false" synchronized="false"
7023      static="false" final="false" visibility="public"
7024      deprecated="not deprecated">
7025      <param name="uri" type="java.lang.String"/>
7026      <doc>
7027      <![CDATA[Returns true if the given URI will match this binding.]]>
7028      </doc>
7029    </method>
7030    <doc>
7031    <![CDATA[A binding created by {@link ServletModule}.
7032
7033 @author sameb@google.com (Sam Berlin)
7034 @since 3.0]]>
7035    </doc>
7036  </interface>
7037  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7038  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7039  <interface name="ServletModuleTargetVisitor"    abstract="true"
7040    static="false" final="false" visibility="public"
7041    deprecated="not deprecated">
7042    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7043    <method name="visit" return="V"
7044      abstract="true" native="false" synchronized="false"
7045      static="false" final="false" visibility="public"
7046      deprecated="not deprecated">
7047      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7048      <doc>
7049      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7050 {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7051
7052 If multiple patterns were specified, this will be called multiple times.]]>
7053      </doc>
7054    </method>
7055    <method name="visit" return="V"
7056      abstract="true" native="false" synchronized="false"
7057      static="false" final="false" visibility="public"
7058      deprecated="not deprecated">
7059      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7060      <doc>
7061      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7062 {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7063
7064 If multiple patterns were specified, this will be called multiple times.]]>
7065      </doc>
7066    </method>
7067    <method name="visit" return="V"
7068      abstract="true" native="false" synchronized="false"
7069      static="false" final="false" visibility="public"
7070      deprecated="not deprecated">
7071      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7072      <doc>
7073      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7074 {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7075
7076 If multiple patterns were specified, this will be called multiple times.]]>
7077      </doc>
7078    </method>
7079    <method name="visit" return="V"
7080      abstract="true" native="false" synchronized="false"
7081      static="false" final="false" visibility="public"
7082      deprecated="not deprecated">
7083      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7084      <doc>
7085      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7086 {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7087
7088 If multiple patterns were specified, this will be called multiple times.]]>
7089      </doc>
7090    </method>
7091    <doc>
7092    <![CDATA[A visitor for the servlet extension.
7093
7094 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7095 {@link ServletModule} will be visited through this interface.
7096
7097 @since 3.0
7098 @author sameb@google.com (Sam Berlin)]]>
7099    </doc>
7100  </interface>
7101  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7102  <!-- start class com.google.inject.servlet.ServletScopes -->
7103  <class name="ServletScopes" extends="java.lang.Object"
7104    abstract="false"
7105    static="false" final="false" visibility="public"
7106    deprecated="not deprecated">
7107    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7108      abstract="false" native="false" synchronized="false"
7109      static="true" final="false" visibility="public"
7110      deprecated="not deprecated">
7111      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7112      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7113      <doc>
7114      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7115 HTTP request in another thread. This acts as a way of transporting
7116 request context data from the request processing thread to to worker
7117 threads.
7118 <p>
7119 There are some limitations:
7120 <ul>
7121   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7122      transported.</li>
7123   <li>State changes to the HttpServletRequest after this method is called
7124      will not be seen in the continued thread.</li>
7125   <li>Only the HttpServletRequest, ServletContext and request parameter
7126      map are available in the continued thread. The response and session
7127      are not available.</li>
7128 </ul>
7129
7130 <p>The returned callable will throw a {@link ScopingException} when called
7131 if the HTTP request scope is still active on the current thread.
7132
7133 @param callable code to be executed in another thread, which depends on
7134     the request scope.
7135 @param seedMap the initial set of scoped instances for Guice to seed the
7136     request scope with.  To seed a key with null, use {@code null} as
7137     the value.
7138 @return a callable that will invoke the given callable, making the request
7139     context available to it.
7140 @throws OutOfScopeException if this method is called from a non-request
7141     thread, or if the request has completed.
7142
7143 @since 3.0]]>
7144      </doc>
7145    </method>
7146    <method name="transferRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7147      abstract="false" native="false" synchronized="false"
7148      static="true" final="false" visibility="public"
7149      deprecated="not deprecated">
7150      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7151      <doc>
7152      <![CDATA[Wraps the given callable in a contextual callable that "transfers" the
7153 request to another thread. This acts as a way of transporting
7154 request context data from the current thread to a future thread.
7155
7156 <p>As opposed to {@link #continueRequest}, this method propagates all
7157 existing scoped objects. The primary use case is in server implementations
7158 where you can detach the request processing thread while waiting for data,
7159 and reattach to a different thread to finish processing at a later time.
7160
7161 <p>Because {@code HttpServletRequest} objects are not typically
7162 thread-safe, the callable returned by this method must not be run on a
7163 different thread until the current request scope has terminated. In other
7164 words, do not use this method to propagate the current request scope to
7165 worker threads that may run concurrently with the current thread.
7166
7167 <p>The returned callable will throw a {@link ScopingException} when called
7168 if the request scope being transferred is still active on a different
7169 thread.
7170
7171 @param callable code to be executed in another thread, which depends on
7172     the request scope.
7173 @return a callable that will invoke the given callable, making the request
7174     context available to it.
7175 @throws OutOfScopeException if this method is called from a non-request
7176     thread, or if the request has completed.]]>
7177      </doc>
7178    </method>
7179    <method name="isRequestScoped" return="boolean"
7180      abstract="false" native="false" synchronized="false"
7181      static="true" final="false" visibility="public"
7182      deprecated="not deprecated">
7183      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
7184      <doc>
7185      <![CDATA[Returns true if {@code binding} is request-scoped. If the binding is a
7186 {@link com.google.inject.spi.LinkedKeyBinding linked key binding} and
7187 belongs to an injector (i. e. it was retrieved via
7188 {@link Injector#getBinding Injector.getBinding()}), then this method will
7189 also return true if the target binding is request-scoped.]]>
7190      </doc>
7191    </method>
7192    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7193      abstract="false" native="false" synchronized="false"
7194      static="true" final="false" visibility="public"
7195      deprecated="not deprecated">
7196      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7197      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7198      <doc>
7199      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7200 as the HTTP request scope, but is used if no HTTP request scope is in
7201 progress. In this way, keys can be scoped as @RequestScoped and exist
7202 in non-HTTP requests (for example: RPC requests) as well as in HTTP
7203 request threads.
7204
7205 <p>The returned callable will throw a {@link ScopingException} when called
7206 if there is a request scope already active on the current thread.
7207
7208 @param callable code to be executed which depends on the request scope.
7209     Typically in another thread, but not necessarily so.
7210 @param seedMap the initial set of scoped instances for Guice to seed the
7211     request scope with.  To seed a key with null, use {@code null} as
7212     the value.
7213 @return a callable that when called will run inside the a request scope
7214     that exposes the instances in the {@code seedMap} as scoped keys.
7215 @since 3.0]]>
7216      </doc>
7217    </method>
7218    <field name="REQUEST" type="com.google.inject.Scope"
7219      transient="false" volatile="false"
7220      static="true" final="true" visibility="public"
7221      deprecated="not deprecated">
7222      <doc>
7223      <![CDATA[HTTP servlet request scope.]]>
7224      </doc>
7225    </field>
7226    <field name="SESSION" type="com.google.inject.Scope"
7227      transient="false" volatile="false"
7228      static="true" final="true" visibility="public"
7229      deprecated="not deprecated">
7230      <doc>
7231      <![CDATA[HTTP session scope.]]>
7232      </doc>
7233    </field>
7234    <doc>
7235    <![CDATA[Servlet scopes.
7236
7237 @author crazybob@google.com (Bob Lee)]]>
7238    </doc>
7239  </class>
7240  <!-- end class com.google.inject.servlet.ServletScopes -->
7241  <!-- start class com.google.inject.servlet.SessionScoped -->
7242  <class name="SessionScoped"    abstract="true"
7243    static="false" final="false" visibility="public"
7244    deprecated="not deprecated">
7245    <implements name="java.lang.annotation.Annotation"/>
7246    <doc>
7247    <![CDATA[Apply this to implementation classes when you want one instance per session.
7248
7249 @see com.google.inject.Scopes#SINGLETON
7250 @author crazybob@google.com (Bob Lee)]]>
7251    </doc>
7252  </class>
7253  <!-- end class com.google.inject.servlet.SessionScoped -->
7254  <!-- start class com.google.inject.servlet.UriPatternType -->
7255  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7256    abstract="false"
7257    static="false" final="true" visibility="public"
7258    deprecated="not deprecated">
7259    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7260      abstract="false" native="false" synchronized="false"
7261      static="true" final="false" visibility="public"
7262      deprecated="not deprecated">
7263    </method>
7264    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7265      abstract="false" native="false" synchronized="false"
7266      static="true" final="false" visibility="public"
7267      deprecated="not deprecated">
7268      <param name="name" type="java.lang.String"/>
7269    </method>
7270    <doc>
7271    <![CDATA[An enumeration of the available URI-pattern matching styles
7272
7273 @since 3.0]]>
7274    </doc>
7275  </class>
7276  <!-- end class com.google.inject.servlet.UriPatternType -->
7277</package>
7278<package name="com.google.inject.spi">
7279  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
7280  <interface name="BindingScopingVisitor"    abstract="true"
7281    static="false" final="false" visibility="public"
7282    deprecated="not deprecated">
7283    <method name="visitEagerSingleton" return="V"
7284      abstract="true" native="false" synchronized="false"
7285      static="false" final="false" visibility="public"
7286      deprecated="not deprecated">
7287      <doc>
7288      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
7289 injector bindings.]]>
7290      </doc>
7291    </method>
7292    <method name="visitScope" return="V"
7293      abstract="true" native="false" synchronized="false"
7294      static="false" final="false" visibility="public"
7295      deprecated="not deprecated">
7296      <param name="scope" type="com.google.inject.Scope"/>
7297      <doc>
7298      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
7299      </doc>
7300    </method>
7301    <method name="visitScopeAnnotation" return="V"
7302      abstract="true" native="false" synchronized="false"
7303      static="false" final="false" visibility="public"
7304      deprecated="not deprecated">
7305      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7306      <doc>
7307      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
7308 that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
7309 Scope) Binder.bindScope()}.]]>
7310      </doc>
7311    </method>
7312    <method name="visitNoScoping" return="V"
7313      abstract="true" native="false" synchronized="false"
7314      static="false" final="false" visibility="public"
7315      deprecated="not deprecated">
7316      <doc>
7317      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
7318 injector should use scoping annotations to find a scope. On an injector, it indicates that
7319 no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
7320 is linked to a scoped binding.]]>
7321      </doc>
7322    </method>
7323    <doc>
7324    <![CDATA[Visits each of the strategies used to scope an injection.
7325
7326 @param <V> any type to be returned by the visit method. Use {@link Void} with
7327     {@code return null} if no return type is needed.
7328 @since 2.0]]>
7329    </doc>
7330  </interface>
7331  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
7332  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
7333  <interface name="BindingTargetVisitor"    abstract="true"
7334    static="false" final="false" visibility="public"
7335    deprecated="not deprecated">
7336    <method name="visit" return="V"
7337      abstract="true" native="false" synchronized="false"
7338      static="false" final="false" visibility="public"
7339      deprecated="not deprecated">
7340      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7341      <doc>
7342      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
7343 found in both module and injector bindings.]]>
7344      </doc>
7345    </method>
7346    <method name="visit" return="V"
7347      abstract="true" native="false" synchronized="false"
7348      static="false" final="false" visibility="public"
7349      deprecated="not deprecated">
7350      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7351      <doc>
7352      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
7353 injections. This target is found in both module and injector bindings.]]>
7354      </doc>
7355    </method>
7356    <method name="visit" return="V"
7357      abstract="true" native="false" synchronized="false"
7358      static="false" final="false" visibility="public"
7359      deprecated="not deprecated">
7360      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7361      <doc>
7362      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
7363 that provider's {@code get} method is invoked. This target is found in both module and injector
7364 bindings.]]>
7365      </doc>
7366    </method>
7367    <method name="visit" return="V"
7368      abstract="true" native="false" synchronized="false"
7369      static="false" final="false" visibility="public"
7370      deprecated="not deprecated">
7371      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7372      <doc>
7373      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
7374 target is found in both module and injector bindings.]]>
7375      </doc>
7376    </method>
7377    <method name="visit" return="V"
7378      abstract="true" native="false" synchronized="false"
7379      static="false" final="false" visibility="public"
7380      deprecated="not deprecated">
7381      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7382      <doc>
7383      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
7384 found in injector bindings.]]>
7385      </doc>
7386    </method>
7387    <method name="visit" return="V"
7388      abstract="true" native="false" synchronized="false"
7389      static="false" final="false" visibility="public"
7390      deprecated="not deprecated">
7391      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7392      <doc>
7393      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
7394 that the injector should use its implicit binding strategies to resolve injections.]]>
7395      </doc>
7396    </method>
7397    <method name="visit" return="V"
7398      abstract="true" native="false" synchronized="false"
7399      static="false" final="false" visibility="public"
7400      deprecated="not deprecated">
7401      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7402      <doc>
7403      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
7404 {@code constructor}. This target is found only on injector bindings.]]>
7405      </doc>
7406    </method>
7407    <method name="visit" return="V"
7408      abstract="true" native="false" synchronized="false"
7409      static="false" final="false" visibility="public"
7410      deprecated="not deprecated">
7411      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7412      <doc>
7413      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
7414 has the same binding annotation but a different type. This target is found only on injector
7415 bindings.]]>
7416      </doc>
7417    </method>
7418    <method name="visit" return="V"
7419      abstract="true" native="false" synchronized="false"
7420      static="false" final="false" visibility="public"
7421      deprecated="not deprecated">
7422      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7423      <doc>
7424      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
7425 provided type. This target is found only on injector bindings.]]>
7426      </doc>
7427    </method>
7428    <doc>
7429    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
7430
7431 @param <V> any type to be returned by the visit method. Use {@link Void} with
7432     {@code return null} if no return type is needed.
7433 @since 2.0]]>
7434    </doc>
7435  </interface>
7436  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
7437  <!-- start interface com.google.inject.spi.ConstructorBinding -->
7438  <interface name="ConstructorBinding"    abstract="true"
7439    static="false" final="false" visibility="public"
7440    deprecated="not deprecated">
7441    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7442    <implements name="com.google.inject.spi.HasDependencies"/>
7443    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
7444      abstract="true" native="false" synchronized="false"
7445      static="false" final="false" visibility="public"
7446      deprecated="not deprecated">
7447      <doc>
7448      <![CDATA[Gets the constructor this binding injects.]]>
7449      </doc>
7450    </method>
7451    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
7452      abstract="true" native="false" synchronized="false"
7453      static="false" final="false" visibility="public"
7454      deprecated="not deprecated">
7455      <doc>
7456      <![CDATA[Returns all instance method and field injection points on {@code type}.
7457
7458 @return a possibly empty set of injection points. The set has a specified iteration order. All
7459      fields are returned and then all methods. Within the fields, supertype fields are returned
7460      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
7461      </doc>
7462    </method>
7463    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
7464      abstract="true" native="false" synchronized="false"
7465      static="false" final="false" visibility="public"
7466      deprecated="not deprecated">
7467      <doc>
7468      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
7469
7470 @return a possibly empty map]]>
7471      </doc>
7472    </method>
7473    <doc>
7474    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
7475 instantiated by invoking the constructor.
7476
7477 @author jessewilson@google.com (Jesse Wilson)
7478 @since 2.0]]>
7479    </doc>
7480  </interface>
7481  <!-- end interface com.google.inject.spi.ConstructorBinding -->
7482  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
7483  <interface name="ConvertedConstantBinding"    abstract="true"
7484    static="false" final="false" visibility="public"
7485    deprecated="not deprecated">
7486    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7487    <implements name="com.google.inject.spi.HasDependencies"/>
7488    <method name="getValue" return="T"
7489      abstract="true" native="false" synchronized="false"
7490      static="false" final="false" visibility="public"
7491      deprecated="not deprecated">
7492      <doc>
7493      <![CDATA[Returns the converted value.]]>
7494      </doc>
7495    </method>
7496    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
7497      abstract="true" native="false" synchronized="false"
7498      static="false" final="false" visibility="public"
7499      deprecated="not deprecated">
7500      <doc>
7501      <![CDATA[Returns the type converter binding used to convert the constant.
7502
7503 @since 3.0]]>
7504      </doc>
7505    </method>
7506    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
7507      abstract="true" native="false" synchronized="false"
7508      static="false" final="false" visibility="public"
7509      deprecated="not deprecated">
7510      <doc>
7511      <![CDATA[Returns the key for the source binding. That binding can be retrieved from an injector using
7512 {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
7513      </doc>
7514    </method>
7515    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7516      abstract="true" native="false" synchronized="false"
7517      static="false" final="false" visibility="public"
7518      deprecated="not deprecated">
7519      <doc>
7520      <![CDATA[Returns a singleton set containing only the converted key.]]>
7521      </doc>
7522    </method>
7523    <doc>
7524    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
7525 binding annotation but a different type.
7526
7527 @author jessewilson@google.com (Jesse Wilson)
7528 @since 2.0]]>
7529    </doc>
7530  </interface>
7531  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
7532  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
7533  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
7534    abstract="false"
7535    static="false" final="false" visibility="public"
7536    deprecated="not deprecated">
7537    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
7538    <constructor name="DefaultBindingScopingVisitor"
7539      static="false" final="false" visibility="public"
7540      deprecated="not deprecated">
7541    </constructor>
7542    <method name="visitOther" return="V"
7543      abstract="false" native="false" synchronized="false"
7544      static="false" final="false" visibility="protected"
7545      deprecated="not deprecated">
7546      <doc>
7547      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7548      </doc>
7549    </method>
7550    <method name="visitEagerSingleton" return="V"
7551      abstract="false" native="false" synchronized="false"
7552      static="false" final="false" visibility="public"
7553      deprecated="not deprecated">
7554    </method>
7555    <method name="visitScope" return="V"
7556      abstract="false" native="false" synchronized="false"
7557      static="false" final="false" visibility="public"
7558      deprecated="not deprecated">
7559      <param name="scope" type="com.google.inject.Scope"/>
7560    </method>
7561    <method name="visitScopeAnnotation" return="V"
7562      abstract="false" native="false" synchronized="false"
7563      static="false" final="false" visibility="public"
7564      deprecated="not deprecated">
7565      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7566    </method>
7567    <method name="visitNoScoping" return="V"
7568      abstract="false" native="false" synchronized="false"
7569      static="false" final="false" visibility="public"
7570      deprecated="not deprecated">
7571    </method>
7572    <doc>
7573    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7574 {@link #visitOther()}, returning its result.
7575
7576 @param <V> any type to be returned by the visit method. Use {@link Void} with
7577     {@code return null} if no return type is needed.
7578
7579 @author jessewilson@google.com (Jesse Wilson)
7580 @since 2.0]]>
7581    </doc>
7582  </class>
7583  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
7584  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
7585  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
7586    abstract="true"
7587    static="false" final="false" visibility="public"
7588    deprecated="not deprecated">
7589    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7590    <constructor name="DefaultBindingTargetVisitor"
7591      static="false" final="false" visibility="public"
7592      deprecated="not deprecated">
7593    </constructor>
7594    <method name="visitOther" return="V"
7595      abstract="false" native="false" synchronized="false"
7596      static="false" final="false" visibility="protected"
7597      deprecated="not deprecated">
7598      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
7599      <doc>
7600      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7601      </doc>
7602    </method>
7603    <method name="visit" return="V"
7604      abstract="false" native="false" synchronized="false"
7605      static="false" final="false" visibility="public"
7606      deprecated="not deprecated">
7607      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7608    </method>
7609    <method name="visit" return="V"
7610      abstract="false" native="false" synchronized="false"
7611      static="false" final="false" visibility="public"
7612      deprecated="not deprecated">
7613      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7614    </method>
7615    <method name="visit" return="V"
7616      abstract="false" native="false" synchronized="false"
7617      static="false" final="false" visibility="public"
7618      deprecated="not deprecated">
7619      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7620    </method>
7621    <method name="visit" return="V"
7622      abstract="false" native="false" synchronized="false"
7623      static="false" final="false" visibility="public"
7624      deprecated="not deprecated">
7625      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7626    </method>
7627    <method name="visit" return="V"
7628      abstract="false" native="false" synchronized="false"
7629      static="false" final="false" visibility="public"
7630      deprecated="not deprecated">
7631      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7632    </method>
7633    <method name="visit" return="V"
7634      abstract="false" native="false" synchronized="false"
7635      static="false" final="false" visibility="public"
7636      deprecated="not deprecated">
7637      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7638    </method>
7639    <method name="visit" return="V"
7640      abstract="false" native="false" synchronized="false"
7641      static="false" final="false" visibility="public"
7642      deprecated="not deprecated">
7643      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7644    </method>
7645    <method name="visit" return="V"
7646      abstract="false" native="false" synchronized="false"
7647      static="false" final="false" visibility="public"
7648      deprecated="not deprecated">
7649      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7650    </method>
7651    <method name="visit" return="V"
7652      abstract="false" native="false" synchronized="false"
7653      static="false" final="false" visibility="public"
7654      deprecated="not deprecated">
7655      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7656    </method>
7657    <doc>
7658    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
7659 #visitOther(Binding)}, returning its result.
7660
7661 @param <V> any type to be returned by the visit method. Use {@link Void} with
7662     {@code return null} if no return type is needed.
7663
7664 @author jessewilson@google.com (Jesse Wilson)
7665 @since 2.0]]>
7666    </doc>
7667  </class>
7668  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
7669  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
7670  <class name="DefaultElementVisitor" extends="java.lang.Object"
7671    abstract="true"
7672    static="false" final="false" visibility="public"
7673    deprecated="not deprecated">
7674    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
7675    <constructor name="DefaultElementVisitor"
7676      static="false" final="false" visibility="public"
7677      deprecated="not deprecated">
7678    </constructor>
7679    <method name="visitOther" return="V"
7680      abstract="false" native="false" synchronized="false"
7681      static="false" final="false" visibility="protected"
7682      deprecated="not deprecated">
7683      <param name="element" type="com.google.inject.spi.Element"/>
7684      <doc>
7685      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7686      </doc>
7687    </method>
7688    <method name="visit" return="V"
7689      abstract="false" native="false" synchronized="false"
7690      static="false" final="false" visibility="public"
7691      deprecated="not deprecated">
7692      <param name="message" type="com.google.inject.spi.Message"/>
7693    </method>
7694    <method name="visit" return="V"
7695      abstract="false" native="false" synchronized="false"
7696      static="false" final="false" visibility="public"
7697      deprecated="not deprecated">
7698      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
7699    </method>
7700    <method name="visit" return="V"
7701      abstract="false" native="false" synchronized="false"
7702      static="false" final="false" visibility="public"
7703      deprecated="not deprecated">
7704      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
7705    </method>
7706    <method name="visit" return="V"
7707      abstract="false" native="false" synchronized="false"
7708      static="false" final="false" visibility="public"
7709      deprecated="not deprecated">
7710      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
7711    </method>
7712    <method name="visit" return="V"
7713      abstract="false" native="false" synchronized="false"
7714      static="false" final="false" visibility="public"
7715      deprecated="not deprecated">
7716      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
7717    </method>
7718    <method name="visit" return="V"
7719      abstract="false" native="false" synchronized="false"
7720      static="false" final="false" visibility="public"
7721      deprecated="not deprecated">
7722      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
7723    </method>
7724    <method name="visit" return="V"
7725      abstract="false" native="false" synchronized="false"
7726      static="false" final="false" visibility="public"
7727      deprecated="not deprecated">
7728      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
7729    </method>
7730    <method name="visit" return="V"
7731      abstract="false" native="false" synchronized="false"
7732      static="false" final="false" visibility="public"
7733      deprecated="not deprecated">
7734      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
7735    </method>
7736    <method name="visit" return="V"
7737      abstract="false" native="false" synchronized="false"
7738      static="false" final="false" visibility="public"
7739      deprecated="not deprecated">
7740      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
7741    </method>
7742    <method name="visit" return="V"
7743      abstract="false" native="false" synchronized="false"
7744      static="false" final="false" visibility="public"
7745      deprecated="not deprecated">
7746      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
7747    </method>
7748    <method name="visit" return="V"
7749      abstract="false" native="false" synchronized="false"
7750      static="false" final="false" visibility="public"
7751      deprecated="not deprecated">
7752      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
7753    </method>
7754    <method name="visit" return="V"
7755      abstract="false" native="false" synchronized="false"
7756      static="false" final="false" visibility="public"
7757      deprecated="not deprecated">
7758      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
7759    </method>
7760    <method name="visit" return="V"
7761      abstract="false" native="false" synchronized="false"
7762      static="false" final="false" visibility="public"
7763      deprecated="not deprecated">
7764      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
7765    </method>
7766    <method name="visit" return="V"
7767      abstract="false" native="false" synchronized="false"
7768      static="false" final="false" visibility="public"
7769      deprecated="not deprecated">
7770      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
7771    </method>
7772    <method name="visit" return="V"
7773      abstract="false" native="false" synchronized="false"
7774      static="false" final="false" visibility="public"
7775      deprecated="not deprecated">
7776      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
7777    </method>
7778    <method name="visit" return="V"
7779      abstract="false" native="false" synchronized="false"
7780      static="false" final="false" visibility="public"
7781      deprecated="not deprecated">
7782      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
7783    </method>
7784    <doc>
7785    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7786 {@link #visitOther(Element)}, returning its result.
7787
7788 @param <V> any type to be returned by the visit method. Use {@link Void} with
7789     {@code return null} if no return type is needed.
7790
7791 @author sberlin@gmail.com (Sam Berlin)
7792 @since 2.0]]>
7793    </doc>
7794  </class>
7795  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
7796  <!-- start class com.google.inject.spi.Dependency -->
7797  <class name="Dependency" extends="java.lang.Object"
7798    abstract="false"
7799    static="false" final="true" visibility="public"
7800    deprecated="not deprecated">
7801    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
7802      abstract="false" native="false" synchronized="false"
7803      static="true" final="false" visibility="public"
7804      deprecated="not deprecated">
7805      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
7806      <doc>
7807      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
7808 nullable.]]>
7809      </doc>
7810    </method>
7811    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7812      abstract="false" native="false" synchronized="false"
7813      static="true" final="false" visibility="public"
7814      deprecated="not deprecated">
7815      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
7816      <doc>
7817      <![CDATA[Returns the dependencies from the given injection points.]]>
7818      </doc>
7819    </method>
7820    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
7821      abstract="false" native="false" synchronized="false"
7822      static="false" final="false" visibility="public"
7823      deprecated="not deprecated">
7824      <doc>
7825      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
7826      </doc>
7827    </method>
7828    <method name="isNullable" return="boolean"
7829      abstract="false" native="false" synchronized="false"
7830      static="false" final="false" visibility="public"
7831      deprecated="not deprecated">
7832      <doc>
7833      <![CDATA[Returns true if null is a legal value for this dependency.]]>
7834      </doc>
7835    </method>
7836    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
7837      abstract="false" native="false" synchronized="false"
7838      static="false" final="false" visibility="public"
7839      deprecated="not deprecated">
7840      <doc>
7841      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
7842 attached to a particular injection point.]]>
7843      </doc>
7844    </method>
7845    <method name="getParameterIndex" return="int"
7846      abstract="false" native="false" synchronized="false"
7847      static="false" final="false" visibility="public"
7848      deprecated="not deprecated">
7849      <doc>
7850      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
7851 this dependency does not belong to a parameter list. Only method and constuctor dependencies
7852 are elements in a parameter list.]]>
7853      </doc>
7854    </method>
7855    <method name="hashCode" return="int"
7856      abstract="false" native="false" synchronized="false"
7857      static="false" final="false" visibility="public"
7858      deprecated="not deprecated">
7859    </method>
7860    <method name="equals" return="boolean"
7861      abstract="false" native="false" synchronized="false"
7862      static="false" final="false" visibility="public"
7863      deprecated="not deprecated">
7864      <param name="o" type="java.lang.Object"/>
7865    </method>
7866    <method name="toString" return="java.lang.String"
7867      abstract="false" native="false" synchronized="false"
7868      static="false" final="false" visibility="public"
7869      deprecated="not deprecated">
7870    </method>
7871    <doc>
7872    <![CDATA[A variable that can be resolved by an injector.
7873
7874 <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
7875 that's attached to a constructor, method or field.
7876
7877 @author crazybob@google.com (Bob Lee)
7878 @author jessewilson@google.com (Jesse Wilson)
7879 @since 2.0]]>
7880    </doc>
7881  </class>
7882  <!-- end class com.google.inject.spi.Dependency -->
7883  <!-- start class com.google.inject.spi.DependencyAndSource -->
7884  <class name="DependencyAndSource" extends="java.lang.Object"
7885    abstract="false"
7886    static="false" final="true" visibility="public"
7887    deprecated="not deprecated">
7888    <constructor name="DependencyAndSource" type="com.google.inject.spi.Dependency&lt;?&gt;, java.lang.Object"
7889      static="false" final="false" visibility="public"
7890      deprecated="not deprecated">
7891    </constructor>
7892    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;?&gt;"
7893      abstract="false" native="false" synchronized="false"
7894      static="false" final="false" visibility="public"
7895      deprecated="not deprecated">
7896      <doc>
7897      <![CDATA[Returns the Dependency, if one exists. For anything that can be referenced
7898 by {@link Injector#getBinding}, a dependency exists. A dependency will not
7899 exist (and this will return null) for types initialized with
7900 {@link Binder#requestInjection} or {@link Injector#injectMembers(Object)},
7901 nor will it exist for objects injected into Providers bound with
7902 LinkedBindingBuilder#toProvider(Provider).]]>
7903      </doc>
7904    </method>
7905    <method name="getBindingSource" return="java.lang.String"
7906      abstract="false" native="false" synchronized="false"
7907      static="false" final="false" visibility="public"
7908      deprecated="not deprecated">
7909      <doc>
7910      <![CDATA[Returns a string describing where this dependency was bound. If the binding
7911 was just-in-time, there is no valid binding source, so this describes the
7912 class in question.]]>
7913      </doc>
7914    </method>
7915    <method name="toString" return="java.lang.String"
7916      abstract="false" native="false" synchronized="false"
7917      static="false" final="false" visibility="public"
7918      deprecated="not deprecated">
7919    </method>
7920    <doc>
7921    <![CDATA[A combination of a {@link Dependency} and the {@link Binding#getSource()
7922 source} where the dependency was bound.
7923
7924 @author sameb@google.com (Sam Berlin)]]>
7925    </doc>
7926  </class>
7927  <!-- end class com.google.inject.spi.DependencyAndSource -->
7928  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
7929  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
7930    abstract="false"
7931    static="false" final="true" visibility="public"
7932    deprecated="not deprecated">
7933    <implements name="com.google.inject.spi.Element"/>
7934    <method name="getSource" return="java.lang.Object"
7935      abstract="false" native="false" synchronized="false"
7936      static="false" final="false" visibility="public"
7937      deprecated="not deprecated">
7938    </method>
7939    <method name="applyTo"
7940      abstract="false" native="false" synchronized="false"
7941      static="false" final="false" visibility="public"
7942      deprecated="not deprecated">
7943      <param name="binder" type="com.google.inject.Binder"/>
7944    </method>
7945    <method name="acceptVisitor" return="T"
7946      abstract="false" native="false" synchronized="false"
7947      static="false" final="false" visibility="public"
7948      deprecated="not deprecated">
7949      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7950    </method>
7951    <doc>
7952    <![CDATA[A request to disable circular proxies.
7953
7954 @author sameb@google.com (Sam Berlin)
7955 @since 3.0]]>
7956    </doc>
7957  </class>
7958  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
7959  <!-- start interface com.google.inject.spi.Element -->
7960  <interface name="Element"    abstract="true"
7961    static="false" final="false" visibility="public"
7962    deprecated="not deprecated">
7963    <method name="getSource" return="java.lang.Object"
7964      abstract="true" native="false" synchronized="false"
7965      static="false" final="false" visibility="public"
7966      deprecated="not deprecated">
7967      <doc>
7968      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
7969 configured. Used by Guice in the production of descriptive error messages.
7970
7971 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
7972 example. Tools should simply call {@code toString()} on the source object if the type is
7973 unfamiliar.]]>
7974      </doc>
7975    </method>
7976    <method name="acceptVisitor" return="T"
7977      abstract="true" native="false" synchronized="false"
7978      static="false" final="false" visibility="public"
7979      deprecated="not deprecated">
7980      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7981      <doc>
7982      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
7983
7984 @param visitor to call back on]]>
7985      </doc>
7986    </method>
7987    <method name="applyTo"
7988      abstract="true" native="false" synchronized="false"
7989      static="false" final="false" visibility="public"
7990      deprecated="not deprecated">
7991      <param name="binder" type="com.google.inject.Binder"/>
7992      <doc>
7993      <![CDATA[Writes this module element to the given binder (optional operation).
7994
7995 @param binder to apply configuration element to
7996 @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
7997     element.]]>
7998      </doc>
7999    </method>
8000    <doc>
8001    <![CDATA[A core component of a module or injector.
8002
8003 <p>The elements of a module can be inspected, validated and rewritten. Use {@link
8004 Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
8005 from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
8006 This can be used for static analysis and generation of Guice modules.
8007
8008 <p>The elements of an injector can be inspected and exercised. Use {@link
8009 com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
8010
8011 @author jessewilson@google.com (Jesse Wilson)
8012 @author crazybob@google.com (Bob Lee)
8013 @since 2.0]]>
8014    </doc>
8015  </interface>
8016  <!-- end interface com.google.inject.spi.Element -->
8017  <!-- start class com.google.inject.spi.Elements -->
8018  <class name="Elements" extends="java.lang.Object"
8019    abstract="false"
8020    static="false" final="true" visibility="public"
8021    deprecated="not deprecated">
8022    <constructor name="Elements"
8023      static="false" final="false" visibility="public"
8024      deprecated="not deprecated">
8025    </constructor>
8026    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8027      abstract="false" native="false" synchronized="false"
8028      static="true" final="false" visibility="public"
8029      deprecated="not deprecated">
8030      <param name="modules" type="com.google.inject.Module[]"/>
8031      <doc>
8032      <![CDATA[Records the elements executed by {@code modules}.]]>
8033      </doc>
8034    </method>
8035    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8036      abstract="false" native="false" synchronized="false"
8037      static="true" final="false" visibility="public"
8038      deprecated="not deprecated">
8039      <param name="stage" type="com.google.inject.Stage"/>
8040      <param name="modules" type="com.google.inject.Module[]"/>
8041      <doc>
8042      <![CDATA[Records the elements executed by {@code modules}.]]>
8043      </doc>
8044    </method>
8045    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8046      abstract="false" native="false" synchronized="false"
8047      static="true" final="false" visibility="public"
8048      deprecated="not deprecated">
8049      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8050      <doc>
8051      <![CDATA[Records the elements executed by {@code modules}.]]>
8052      </doc>
8053    </method>
8054    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8055      abstract="false" native="false" synchronized="false"
8056      static="true" final="false" visibility="public"
8057      deprecated="not deprecated">
8058      <param name="stage" type="com.google.inject.Stage"/>
8059      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8060      <doc>
8061      <![CDATA[Records the elements executed by {@code modules}.]]>
8062      </doc>
8063    </method>
8064    <method name="getModule" return="com.google.inject.Module"
8065      abstract="false" native="false" synchronized="false"
8066      static="true" final="false" visibility="public"
8067      deprecated="not deprecated">
8068      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8069      <doc>
8070      <![CDATA[Returns the module composed of {@code elements}.]]>
8071      </doc>
8072    </method>
8073    <doc>
8074    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8075 Element#applyTo(Binder) rewritten}.
8076
8077 @author jessewilson@google.com (Jesse Wilson)
8078 @since 2.0]]>
8079    </doc>
8080  </class>
8081  <!-- end class com.google.inject.spi.Elements -->
8082  <!-- start class com.google.inject.spi.ElementSource -->
8083  <class name="ElementSource" extends="java.lang.Object"
8084    abstract="false"
8085    static="false" final="true" visibility="public"
8086    deprecated="not deprecated">
8087    <method name="getOriginalElementSource" return="com.google.inject.spi.ElementSource"
8088      abstract="false" native="false" synchronized="false"
8089      static="false" final="false" visibility="public"
8090      deprecated="not deprecated">
8091      <doc>
8092      <![CDATA[Returns the {@link ElementSource} of the element this was created or copied from. If this was
8093 not created or copied from another element, returns {@code null}.]]>
8094      </doc>
8095    </method>
8096    <method name="getDeclaringSource" return="java.lang.Object"
8097      abstract="false" native="false" synchronized="false"
8098      static="false" final="false" visibility="public"
8099      deprecated="not deprecated">
8100      <doc>
8101      <![CDATA[Returns a single location in source code that defines the element. It can be any object
8102 such as {@link Constructor}, {@link Method}, {@link Field}, {@link StackTraceElement}, etc. For
8103 example, if the element is created from a method annotated by {@literal @Provides}, the
8104 declaring source of element would be the method itself.]]>
8105      </doc>
8106    </method>
8107    <method name="getModuleClassNames" return="java.util.List&lt;java.lang.String&gt;"
8108      abstract="false" native="false" synchronized="false"
8109      static="false" final="false" visibility="public"
8110      deprecated="not deprecated">
8111      <doc>
8112      <![CDATA[Returns the class names of modules involved in creating this {@link Element}. The first
8113 element (index 0) is the class name of module that defined the element, and the last element
8114 is the class name of root module.]]>
8115      </doc>
8116    </method>
8117    <method name="getModuleConfigurePositionsInStackTrace" return="java.util.List&lt;java.lang.Integer&gt;"
8118      abstract="false" native="false" synchronized="false"
8119      static="false" final="false" visibility="public"
8120      deprecated="not deprecated">
8121      <doc>
8122      <![CDATA[Returns the position of {@link Module#configure(Binder) configure(Binder)} method call in the
8123 {@link #getStackTrace() stack trace} for modules that their classes returned by
8124 {@link #getModuleClassNames()}. For example, if the stack trace looks like the following:
8125 <p>
8126 {@code
8127  0 - Binder.bind(),
8128  1 - ModuleTwo.configure(),
8129  2 - Binder.install(),
8130  3 - ModuleOne.configure(),
8131  4 - theRest().
8132 }
8133 <p>
8134 1 and 3 are returned.
8135 <p>
8136 In the cases where stack trace is not available (i.e., the stack trace was not collected),
8137 it returns -1 for all module positions.]]>
8138      </doc>
8139    </method>
8140    <method name="getStackTrace" return="java.lang.StackTraceElement[]"
8141      abstract="false" native="false" synchronized="false"
8142      static="false" final="false" visibility="public"
8143      deprecated="not deprecated">
8144      <doc>
8145      <![CDATA[Returns the sequence of method calls that ends at one of {@link Binder} {@code bindXXX()}
8146 methods and eventually defines the element. Note that {@link #getStackTrace()} lists {@link
8147 StackTraceElement StackTraceElements} in reverse chronological order. The first element (index
8148 zero) is the last method call and the last element is the first method invocation. In the cases
8149 where stack trace is not available (i.e.,the stack trace was not collected), it returns an
8150 empty array.]]>
8151      </doc>
8152    </method>
8153    <method name="toString" return="java.lang.String"
8154      abstract="false" native="false" synchronized="false"
8155      static="false" final="false" visibility="public"
8156      deprecated="not deprecated">
8157      <doc>
8158      <![CDATA[Returns {@code getDeclaringSource().toString()} value.]]>
8159      </doc>
8160    </method>
8161    <doc>
8162    <![CDATA[Contains information about where and how an {@link Element element} was bound.
8163 <p>
8164 The {@link #getDeclaringSource() declaring source} refers to a location in source code that
8165 defines the Guice {@link Element element}. For example, if the element is created from a method
8166 annotated by {@literal @Provides}, the declaring source of element would be the method itself.
8167 <p>
8168 The {@link #getStackTrace()} refers to the sequence of calls ends at one of {@link Binder}
8169 {@code bindXXX()} methods and eventually defines the element. Note that {@link #getStackTrace()}
8170 lists {@link StackTraceElement StackTraceElements} in reverse chronological order. The first
8171 element (index zero) is the last method call and the last element is the first method invocation.
8172 By default, the stack trace is not collected. The default behavior can be changed by setting the
8173 {@code guice_include_stack_traces} flag value. The value can be either {@code OFF}, {@code
8174 ONLY_FOR_DECLARING_SOURCE} or {@code COMPLETE}. Note that collecting stack traces for every
8175 binding can cause a performance hit when the injector is created.
8176 <p>
8177 The sequence of class names of {@link Module modules} involved in the element creation can be
8178 retrieved by {@link #getModuleClassNames()}. Similar to {@link #getStackTrace()}, the order is
8179 reverse chronological. The first module (index 0) is the module that installs the {@link Element
8180 element}. The last module is the root module.
8181 <p>
8182 In order to support the cases where a Guice {@link Element element} is created from another
8183 Guice {@link Element element} (original) (e.g., by {@link Element#applyTo()}), it also
8184 provides a reference to the original element source ({@link #getOriginalElementSource()}).]]>
8185    </doc>
8186  </class>
8187  <!-- end class com.google.inject.spi.ElementSource -->
8188  <!-- start interface com.google.inject.spi.ElementVisitor -->
8189  <interface name="ElementVisitor"    abstract="true"
8190    static="false" final="false" visibility="public"
8191    deprecated="not deprecated">
8192    <method name="visit" return="V"
8193      abstract="true" native="false" synchronized="false"
8194      static="false" final="false" visibility="public"
8195      deprecated="not deprecated">
8196      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8197      <doc>
8198      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8199 instances of the type.]]>
8200      </doc>
8201    </method>
8202    <method name="visit" return="V"
8203      abstract="true" native="false" synchronized="false"
8204      static="false" final="false" visibility="public"
8205      deprecated="not deprecated">
8206      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8207      <doc>
8208      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8209      </doc>
8210    </method>
8211    <method name="visit" return="V"
8212      abstract="true" native="false" synchronized="false"
8213      static="false" final="false" visibility="public"
8214      deprecated="not deprecated">
8215      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8216      <doc>
8217      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8218      </doc>
8219    </method>
8220    <method name="visit" return="V"
8221      abstract="true" native="false" synchronized="false"
8222      static="false" final="false" visibility="public"
8223      deprecated="not deprecated">
8224      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8225      <doc>
8226      <![CDATA[Visit a registration of type converters for matching target types.]]>
8227      </doc>
8228    </method>
8229    <method name="visit" return="V"
8230      abstract="true" native="false" synchronized="false"
8231      static="false" final="false" visibility="public"
8232      deprecated="not deprecated">
8233      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8234      <doc>
8235      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8236      </doc>
8237    </method>
8238    <method name="visit" return="V"
8239      abstract="true" native="false" synchronized="false"
8240      static="false" final="false" visibility="public"
8241      deprecated="not deprecated">
8242      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8243      <doc>
8244      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8245      </doc>
8246    </method>
8247    <method name="visit" return="V"
8248      abstract="true" native="false" synchronized="false"
8249      static="false" final="false" visibility="public"
8250      deprecated="not deprecated">
8251      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8252      <doc>
8253      <![CDATA[Visit a lookup of the provider for a type.]]>
8254      </doc>
8255    </method>
8256    <method name="visit" return="V"
8257      abstract="true" native="false" synchronized="false"
8258      static="false" final="false" visibility="public"
8259      deprecated="not deprecated">
8260      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8261      <doc>
8262      <![CDATA[Visit a lookup of the members injector.]]>
8263      </doc>
8264    </method>
8265    <method name="visit" return="V"
8266      abstract="true" native="false" synchronized="false"
8267      static="false" final="false" visibility="public"
8268      deprecated="not deprecated">
8269      <param name="message" type="com.google.inject.spi.Message"/>
8270      <doc>
8271      <![CDATA[Visit an error message and the context in which it occured.]]>
8272      </doc>
8273    </method>
8274    <method name="visit" return="V"
8275      abstract="true" native="false" synchronized="false"
8276      static="false" final="false" visibility="public"
8277      deprecated="not deprecated">
8278      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
8279      <doc>
8280      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
8281 private binder}.]]>
8282      </doc>
8283    </method>
8284    <method name="visit" return="V"
8285      abstract="true" native="false" synchronized="false"
8286      static="false" final="false" visibility="public"
8287      deprecated="not deprecated">
8288      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8289      <doc>
8290      <![CDATA[Visit an injectable type listener binding.]]>
8291      </doc>
8292    </method>
8293    <method name="visit" return="V"
8294      abstract="true" native="false" synchronized="false"
8295      static="false" final="false" visibility="public"
8296      deprecated="not deprecated">
8297      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8298      <doc>
8299      <![CDATA[Visit a provision listener binding.]]>
8300      </doc>
8301    </method>
8302    <method name="visit" return="V"
8303      abstract="true" native="false" synchronized="false"
8304      static="false" final="false" visibility="public"
8305      deprecated="not deprecated">
8306      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8307      <doc>
8308      <![CDATA[Visit a require explicit bindings command.
8309
8310 @since 3.0]]>
8311      </doc>
8312    </method>
8313    <method name="visit" return="V"
8314      abstract="true" native="false" synchronized="false"
8315      static="false" final="false" visibility="public"
8316      deprecated="not deprecated">
8317      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8318      <doc>
8319      <![CDATA[Visit a disable circular proxies command.
8320
8321 @since 3.0]]>
8322      </doc>
8323    </method>
8324    <method name="visit" return="V"
8325      abstract="true" native="false" synchronized="false"
8326      static="false" final="false" visibility="public"
8327      deprecated="not deprecated">
8328      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8329      <doc>
8330      <![CDATA[Visit a require explicit {@literal @}{@link Inject} command.
8331
8332 @since 4.0]]>
8333      </doc>
8334    </method>
8335    <method name="visit" return="V"
8336      abstract="true" native="false" synchronized="false"
8337      static="false" final="false" visibility="public"
8338      deprecated="not deprecated">
8339      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8340      <doc>
8341      <![CDATA[Visit a require exact binding annotations command.
8342
8343 @since 4.0]]>
8344      </doc>
8345    </method>
8346    <doc>
8347    <![CDATA[Visit elements.
8348
8349 @param <V> any type to be returned by the visit method. Use {@link Void} with
8350     {@code return null} if no return type is needed.
8351
8352 @since 2.0]]>
8353    </doc>
8354  </interface>
8355  <!-- end interface com.google.inject.spi.ElementVisitor -->
8356  <!-- start interface com.google.inject.spi.ExposedBinding -->
8357  <interface name="ExposedBinding"    abstract="true"
8358    static="false" final="false" visibility="public"
8359    deprecated="not deprecated">
8360    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8361    <implements name="com.google.inject.spi.HasDependencies"/>
8362    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
8363      abstract="true" native="false" synchronized="false"
8364      static="false" final="false" visibility="public"
8365      deprecated="not deprecated">
8366      <doc>
8367      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
8368      </doc>
8369    </method>
8370    <method name="applyTo"
8371      abstract="true" native="false" synchronized="false"
8372      static="false" final="false" visibility="public"
8373      deprecated="not deprecated">
8374      <param name="binder" type="com.google.inject.Binder"/>
8375      <doc>
8376      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
8377      </doc>
8378    </method>
8379    <doc>
8380    <![CDATA[A binding to a key exposed from an enclosed private environment.
8381
8382 @author jessewilson@google.com (Jesse Wilson)
8383 @since 2.0]]>
8384    </doc>
8385  </interface>
8386  <!-- end interface com.google.inject.spi.ExposedBinding -->
8387  <!-- start interface com.google.inject.spi.HasDependencies -->
8388  <interface name="HasDependencies"    abstract="true"
8389    static="false" final="false" visibility="public"
8390    deprecated="not deprecated">
8391    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8392      abstract="true" native="false" synchronized="false"
8393      static="false" final="false" visibility="public"
8394      deprecated="not deprecated">
8395      <doc>
8396      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
8397 known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
8398 included in the returned set.
8399
8400 @return a possibly empty set]]>
8401      </doc>
8402    </method>
8403    <doc>
8404    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
8405 providers} and instances that expose their dependencies explicitly.
8406
8407 @author jessewilson@google.com (Jesse Wilson)
8408 @since 2.0]]>
8409    </doc>
8410  </interface>
8411  <!-- end interface com.google.inject.spi.HasDependencies -->
8412  <!-- start interface com.google.inject.spi.InjectionListener -->
8413  <interface name="InjectionListener"    abstract="true"
8414    static="false" final="false" visibility="public"
8415    deprecated="not deprecated">
8416    <method name="afterInjection"
8417      abstract="true" native="false" synchronized="false"
8418      static="false" final="false" visibility="public"
8419      deprecated="not deprecated">
8420      <param name="injectee" type="I"/>
8421      <doc>
8422      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
8423
8424 @param injectee instance that Guice injected dependencies into]]>
8425      </doc>
8426    </method>
8427    <doc>
8428    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
8429 injections, post-injection initialization, and more.
8430
8431 @author crazybob@google.com (Bob Lee)
8432 @author jessewilson@google.com (Jesse Wilson)
8433 @since 2.0]]>
8434    </doc>
8435  </interface>
8436  <!-- end interface com.google.inject.spi.InjectionListener -->
8437  <!-- start class com.google.inject.spi.InjectionPoint -->
8438  <class name="InjectionPoint" extends="java.lang.Object"
8439    abstract="false"
8440    static="false" final="true" visibility="public"
8441    deprecated="not deprecated">
8442    <method name="getMember" return="java.lang.reflect.Member"
8443      abstract="false" native="false" synchronized="false"
8444      static="false" final="false" visibility="public"
8445      deprecated="not deprecated">
8446      <doc>
8447      <![CDATA[Returns the injected constructor, field, or method.]]>
8448      </doc>
8449    </method>
8450    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8451      abstract="false" native="false" synchronized="false"
8452      static="false" final="false" visibility="public"
8453      deprecated="not deprecated">
8454      <doc>
8455      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
8456 constructor, the dependencies will correspond to that member's parameters. Field injection
8457 points always have a single dependency for the field itself.
8458
8459 @return a possibly-empty list]]>
8460      </doc>
8461    </method>
8462    <method name="isOptional" return="boolean"
8463      abstract="false" native="false" synchronized="false"
8464      static="false" final="false" visibility="public"
8465      deprecated="not deprecated">
8466      <doc>
8467      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
8468 for all required dependencies. Both explicit bindings (as specified in a module), and implicit
8469 bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
8470 constructors etc.) may be used to satisfy optional injection points.]]>
8471      </doc>
8472    </method>
8473    <method name="isToolable" return="boolean"
8474      abstract="false" native="false" synchronized="false"
8475      static="false" final="false" visibility="public"
8476      deprecated="not deprecated">
8477      <doc>
8478      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
8479
8480 @since 3.0]]>
8481      </doc>
8482    </method>
8483    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
8484      abstract="false" native="false" synchronized="false"
8485      static="false" final="false" visibility="public"
8486      deprecated="not deprecated">
8487      <doc>
8488      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
8489 parameterized type, the result will include more type information than the member's {@link
8490 Member#getDeclaringClass() raw declaring class}.
8491
8492 @since 3.0]]>
8493      </doc>
8494    </method>
8495    <method name="equals" return="boolean"
8496      abstract="false" native="false" synchronized="false"
8497      static="false" final="false" visibility="public"
8498      deprecated="not deprecated">
8499      <param name="o" type="java.lang.Object"/>
8500    </method>
8501    <method name="hashCode" return="int"
8502      abstract="false" native="false" synchronized="false"
8503      static="false" final="false" visibility="public"
8504      deprecated="not deprecated">
8505    </method>
8506    <method name="toString" return="java.lang.String"
8507      abstract="false" native="false" synchronized="false"
8508      static="false" final="false" visibility="public"
8509      deprecated="not deprecated">
8510    </method>
8511    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8512      abstract="false" native="false" synchronized="false"
8513      static="true" final="false" visibility="public"
8514      deprecated="not deprecated">
8515      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8516      <doc>
8517      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
8518 constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
8519 type literal.
8520
8521 @param constructor any single constructor present on {@code type}.
8522
8523 @since 3.0]]>
8524      </doc>
8525    </method>
8526    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8527      abstract="false" native="false" synchronized="false"
8528      static="true" final="false" visibility="public"
8529      deprecated="not deprecated">
8530      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8531      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
8532      <doc>
8533      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
8534
8535 @param constructor any single constructor present on {@code type}.
8536 @param type the concrete type that defines {@code constructor}.
8537
8538 @since 3.0]]>
8539      </doc>
8540    </method>
8541    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8542      abstract="false" native="false" synchronized="false"
8543      static="true" final="false" visibility="public"
8544      deprecated="not deprecated">
8545      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8546      <doc>
8547      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8548
8549 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8550     or a no-arguments constructor that is not private.
8551 @throws ConfigurationException if there is no injectable constructor, more than one injectable
8552     constructor, or if parameters of the injectable constructor are malformed, such as a
8553     parameter with multiple binding annotations.]]>
8554      </doc>
8555    </method>
8556    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8557      abstract="false" native="false" synchronized="false"
8558      static="true" final="false" visibility="public"
8559      deprecated="not deprecated">
8560      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8561      <doc>
8562      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8563
8564 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8565     or a no-arguments constructor that is not private.
8566 @throws ConfigurationException if there is no injectable constructor, more than one injectable
8567     constructor, or if parameters of the injectable constructor are malformed, such as a
8568     parameter with multiple binding annotations.]]>
8569      </doc>
8570    </method>
8571    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8572      abstract="false" native="false" synchronized="false"
8573      static="true" final="false" visibility="public"
8574      deprecated="not deprecated">
8575      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8576      <doc>
8577      <![CDATA[Returns all static method and field injection points on {@code type}.
8578
8579 @return a possibly empty set of injection points. The set has a specified iteration order. All
8580      fields are returned and then all methods. Within the fields, supertype fields are returned
8581      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8582 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8583      a field with multiple binding annotations. The exception's {@link
8584      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8585      of the valid injection points.]]>
8586      </doc>
8587    </method>
8588    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8589      abstract="false" native="false" synchronized="false"
8590      static="true" final="false" visibility="public"
8591      deprecated="not deprecated">
8592      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8593      <doc>
8594      <![CDATA[Returns all static method and field injection points on {@code type}.
8595
8596 @return a possibly empty set of injection points. The set has a specified iteration order. All
8597      fields are returned and then all methods. Within the fields, supertype fields are returned
8598      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8599 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8600      a field with multiple binding annotations. The exception's {@link
8601      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8602      of the valid injection points.]]>
8603      </doc>
8604    </method>
8605    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8606      abstract="false" native="false" synchronized="false"
8607      static="true" final="false" visibility="public"
8608      deprecated="not deprecated">
8609      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8610      <doc>
8611      <![CDATA[Returns all instance method and field injection points on {@code type}.
8612
8613 @return a possibly empty set of injection points. The set has a specified iteration order. All
8614      fields are returned and then all methods. Within the fields, supertype fields are returned
8615      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8616 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8617      a field with multiple binding annotations. The exception's {@link
8618      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8619      of the valid injection points.]]>
8620      </doc>
8621    </method>
8622    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8623      abstract="false" native="false" synchronized="false"
8624      static="true" final="false" visibility="public"
8625      deprecated="not deprecated">
8626      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8627      <doc>
8628      <![CDATA[Returns all instance method and field injection points on {@code type}.
8629
8630 @return a possibly empty set of injection points. The set has a specified iteration order. All
8631      fields are returned and then all methods. Within the fields, supertype fields are returned
8632      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8633 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8634      a field with multiple binding annotations. The exception's {@link
8635      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8636      of the valid injection points.]]>
8637      </doc>
8638    </method>
8639    <doc>
8640    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
8641 {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
8642 omit the annotation.
8643
8644 @author crazybob@google.com (Bob Lee)
8645 @since 2.0]]>
8646    </doc>
8647  </class>
8648  <!-- end class com.google.inject.spi.InjectionPoint -->
8649  <!-- start class com.google.inject.spi.InjectionRequest -->
8650  <class name="InjectionRequest" extends="java.lang.Object"
8651    abstract="false"
8652    static="false" final="true" visibility="public"
8653    deprecated="not deprecated">
8654    <implements name="com.google.inject.spi.Element"/>
8655    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
8656      static="false" final="false" visibility="public"
8657      deprecated="not deprecated">
8658    </constructor>
8659    <method name="getSource" return="java.lang.Object"
8660      abstract="false" native="false" synchronized="false"
8661      static="false" final="false" visibility="public"
8662      deprecated="not deprecated">
8663    </method>
8664    <method name="getInstance" return="T"
8665      abstract="false" native="false" synchronized="false"
8666      static="false" final="false" visibility="public"
8667      deprecated="not deprecated">
8668    </method>
8669    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8670      abstract="false" native="false" synchronized="false"
8671      static="false" final="false" visibility="public"
8672      deprecated="not deprecated">
8673    </method>
8674    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8675      abstract="false" native="false" synchronized="false"
8676      static="false" final="false" visibility="public"
8677      deprecated="not deprecated">
8678      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
8679      <doc>
8680      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
8681 this request.
8682
8683 @return a possibly empty set of injection points. The set has a specified iteration order. All
8684      fields are returned and then all methods. Within the fields, supertype fields are returned
8685      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8686 @throws ConfigurationException if there is a malformed injection point on the class of {@code
8687      instance}, such as a field with multiple binding annotations. The exception's {@link
8688      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8689      of the valid injection points.]]>
8690      </doc>
8691    </method>
8692    <method name="acceptVisitor" return="R"
8693      abstract="false" native="false" synchronized="false"
8694      static="false" final="false" visibility="public"
8695      deprecated="not deprecated">
8696      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
8697    </method>
8698    <method name="applyTo"
8699      abstract="false" native="false" synchronized="false"
8700      static="false" final="false" visibility="public"
8701      deprecated="not deprecated">
8702      <param name="binder" type="com.google.inject.Binder"/>
8703    </method>
8704    <doc>
8705    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
8706 explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
8707 requestInjection()} statements:
8708 <pre>
8709     requestInjection(serviceInstance);</pre>
8710
8711 @author mikeward@google.com (Mike Ward)
8712 @since 2.0]]>
8713    </doc>
8714  </class>
8715  <!-- end class com.google.inject.spi.InjectionRequest -->
8716  <!-- start interface com.google.inject.spi.InstanceBinding -->
8717  <interface name="InstanceBinding"    abstract="true"
8718    static="false" final="false" visibility="public"
8719    deprecated="not deprecated">
8720    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8721    <implements name="com.google.inject.spi.HasDependencies"/>
8722    <method name="getInstance" return="T"
8723      abstract="true" native="false" synchronized="false"
8724      static="false" final="false" visibility="public"
8725      deprecated="not deprecated">
8726      <doc>
8727      <![CDATA[Returns the user-supplied instance.]]>
8728      </doc>
8729    </method>
8730    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8731      abstract="true" native="false" synchronized="false"
8732      static="false" final="false" visibility="public"
8733      deprecated="not deprecated">
8734      <doc>
8735      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
8736 time only.
8737
8738 @return a possibly empty set]]>
8739      </doc>
8740    </method>
8741    <doc>
8742    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
8743
8744 @author jessewilson@google.com (Jesse Wilson)
8745 @since 2.0]]>
8746    </doc>
8747  </interface>
8748  <!-- end interface com.google.inject.spi.InstanceBinding -->
8749  <!-- start class com.google.inject.spi.InterceptorBinding -->
8750  <class name="InterceptorBinding" extends="java.lang.Object"
8751    abstract="false"
8752    static="false" final="true" visibility="public"
8753    deprecated="not deprecated">
8754    <implements name="com.google.inject.spi.Element"/>
8755    <method name="getSource" return="java.lang.Object"
8756      abstract="false" native="false" synchronized="false"
8757      static="false" final="false" visibility="public"
8758      deprecated="not deprecated">
8759    </method>
8760    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
8761      abstract="false" native="false" synchronized="false"
8762      static="false" final="false" visibility="public"
8763      deprecated="not deprecated">
8764    </method>
8765    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
8766      abstract="false" native="false" synchronized="false"
8767      static="false" final="false" visibility="public"
8768      deprecated="not deprecated">
8769    </method>
8770    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
8771      abstract="false" native="false" synchronized="false"
8772      static="false" final="false" visibility="public"
8773      deprecated="not deprecated">
8774    </method>
8775    <method name="acceptVisitor" return="T"
8776      abstract="false" native="false" synchronized="false"
8777      static="false" final="false" visibility="public"
8778      deprecated="not deprecated">
8779      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8780    </method>
8781    <method name="applyTo"
8782      abstract="false" native="false" synchronized="false"
8783      static="false" final="false" visibility="public"
8784      deprecated="not deprecated">
8785      <param name="binder" type="com.google.inject.Binder"/>
8786    </method>
8787    <doc>
8788    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
8789 explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
8790 Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
8791 <pre>
8792     bindInterceptor(Matchers.subclassesOf(MyAction.class),
8793         Matchers.annotatedWith(Transactional.class),
8794         new MyTransactionInterceptor());</pre>
8795
8796 or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
8797 org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
8798
8799 @author jessewilson@google.com (Jesse Wilson)
8800 @since 2.0]]>
8801    </doc>
8802  </class>
8803  <!-- end class com.google.inject.spi.InterceptorBinding -->
8804  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
8805  <interface name="LinkedKeyBinding"    abstract="true"
8806    static="false" final="false" visibility="public"
8807    deprecated="not deprecated">
8808    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8809    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
8810      abstract="true" native="false" synchronized="false"
8811      static="false" final="false" visibility="public"
8812      deprecated="not deprecated">
8813      <doc>
8814      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
8815 injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8816      </doc>
8817    </method>
8818    <doc>
8819    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
8820
8821 @author jessewilson@google.com (Jesse Wilson)
8822 @since 2.0]]>
8823    </doc>
8824  </interface>
8825  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
8826  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
8827  <class name="MembersInjectorLookup" extends="java.lang.Object"
8828    abstract="false"
8829    static="false" final="true" visibility="public"
8830    deprecated="not deprecated">
8831    <implements name="com.google.inject.spi.Element"/>
8832    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
8833      static="false" final="false" visibility="public"
8834      deprecated="not deprecated">
8835    </constructor>
8836    <method name="getSource" return="java.lang.Object"
8837      abstract="false" native="false" synchronized="false"
8838      static="false" final="false" visibility="public"
8839      deprecated="not deprecated">
8840    </method>
8841    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8842      abstract="false" native="false" synchronized="false"
8843      static="false" final="false" visibility="public"
8844      deprecated="not deprecated">
8845      <doc>
8846      <![CDATA[Gets the type containing the members to be injected.]]>
8847      </doc>
8848    </method>
8849    <method name="acceptVisitor" return="T"
8850      abstract="false" native="false" synchronized="false"
8851      static="false" final="false" visibility="public"
8852      deprecated="not deprecated">
8853      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8854    </method>
8855    <method name="initializeDelegate"
8856      abstract="false" native="false" synchronized="false"
8857      static="false" final="false" visibility="public"
8858      deprecated="not deprecated">
8859      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
8860      <doc>
8861      <![CDATA[Sets the actual members injector.
8862
8863 @throws IllegalStateException if the delegate is already set]]>
8864      </doc>
8865    </method>
8866    <method name="applyTo"
8867      abstract="false" native="false" synchronized="false"
8868      static="false" final="false" visibility="public"
8869      deprecated="not deprecated">
8870      <param name="binder" type="com.google.inject.Binder"/>
8871    </method>
8872    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
8873      abstract="false" native="false" synchronized="false"
8874      static="false" final="false" visibility="public"
8875      deprecated="not deprecated">
8876      <doc>
8877      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
8878 The delegate will be initialized when this element is processed, or otherwise used to create
8879 an injector.]]>
8880      </doc>
8881    </method>
8882    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
8883      abstract="false" native="false" synchronized="false"
8884      static="false" final="false" visibility="public"
8885      deprecated="not deprecated">
8886      <doc>
8887      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
8888 initialized, which usually happens when the injector is created. The members injector will
8889 throw an {@code IllegalStateException} if you try to use it beforehand.]]>
8890      </doc>
8891    </method>
8892    <doc>
8893    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
8894 {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
8895 <pre>
8896     MembersInjector&lt;PaymentService&gt; membersInjector
8897         = getMembersInjector(PaymentService.class);</pre>
8898
8899 @author crazybob@google.com (Bob Lee)
8900 @since 2.0]]>
8901    </doc>
8902  </class>
8903  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
8904  <!-- start class com.google.inject.spi.Message -->
8905  <class name="Message" extends="java.lang.Object"
8906    abstract="false"
8907    static="false" final="true" visibility="public"
8908    deprecated="not deprecated">
8909    <implements name="java.io.Serializable"/>
8910    <implements name="com.google.inject.spi.Element"/>
8911    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
8912      static="false" final="false" visibility="public"
8913      deprecated="not deprecated">
8914      <doc>
8915      <![CDATA[@since 2.0]]>
8916      </doc>
8917    </constructor>
8918    <constructor name="Message" type="java.lang.String, java.lang.Throwable"
8919      static="false" final="false" visibility="public"
8920      deprecated="not deprecated">
8921      <doc>
8922      <![CDATA[@since 4.0]]>
8923      </doc>
8924    </constructor>
8925    <constructor name="Message" type="java.lang.Object, java.lang.String"
8926      static="false" final="false" visibility="public"
8927      deprecated="not deprecated">
8928    </constructor>
8929    <constructor name="Message" type="java.lang.String"
8930      static="false" final="false" visibility="public"
8931      deprecated="not deprecated">
8932    </constructor>
8933    <method name="getSource" return="java.lang.String"
8934      abstract="false" native="false" synchronized="false"
8935      static="false" final="false" visibility="public"
8936      deprecated="not deprecated">
8937    </method>
8938    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
8939      abstract="false" native="false" synchronized="false"
8940      static="false" final="false" visibility="public"
8941      deprecated="not deprecated">
8942      <doc>
8943      <![CDATA[@since 2.0]]>
8944      </doc>
8945    </method>
8946    <method name="getMessage" return="java.lang.String"
8947      abstract="false" native="false" synchronized="false"
8948      static="false" final="false" visibility="public"
8949      deprecated="not deprecated">
8950      <doc>
8951      <![CDATA[Gets the error message text.]]>
8952      </doc>
8953    </method>
8954    <method name="acceptVisitor" return="T"
8955      abstract="false" native="false" synchronized="false"
8956      static="false" final="false" visibility="public"
8957      deprecated="not deprecated">
8958      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8959      <doc>
8960      <![CDATA[@since 2.0]]>
8961      </doc>
8962    </method>
8963    <method name="getCause" return="java.lang.Throwable"
8964      abstract="false" native="false" synchronized="false"
8965      static="false" final="false" visibility="public"
8966      deprecated="not deprecated">
8967      <doc>
8968      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
8969 message was not caused by a throwable.
8970
8971 @since 2.0]]>
8972      </doc>
8973    </method>
8974    <method name="toString" return="java.lang.String"
8975      abstract="false" native="false" synchronized="false"
8976      static="false" final="false" visibility="public"
8977      deprecated="not deprecated">
8978    </method>
8979    <method name="hashCode" return="int"
8980      abstract="false" native="false" synchronized="false"
8981      static="false" final="false" visibility="public"
8982      deprecated="not deprecated">
8983    </method>
8984    <method name="equals" return="boolean"
8985      abstract="false" native="false" synchronized="false"
8986      static="false" final="false" visibility="public"
8987      deprecated="not deprecated">
8988      <param name="o" type="java.lang.Object"/>
8989    </method>
8990    <method name="applyTo"
8991      abstract="false" native="false" synchronized="false"
8992      static="false" final="false" visibility="public"
8993      deprecated="not deprecated">
8994      <param name="binder" type="com.google.inject.Binder"/>
8995      <doc>
8996      <![CDATA[@since 2.0]]>
8997      </doc>
8998    </method>
8999    <doc>
9000    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
9001 Guice and its extensions. Messages can be created explicitly in a module using {@link
9002 com.google.inject.Binder#addError(Throwable) addError()} statements:
9003 <pre>
9004     try {
9005       bindPropertiesFromFile();
9006     } catch (IOException e) {
9007       addError(e);
9008     }</pre>
9009
9010 @author crazybob@google.com (Bob Lee)]]>
9011    </doc>
9012  </class>
9013  <!-- end class com.google.inject.spi.Message -->
9014  <!-- start interface com.google.inject.spi.PrivateElements -->
9015  <interface name="PrivateElements"    abstract="true"
9016    static="false" final="false" visibility="public"
9017    deprecated="not deprecated">
9018    <implements name="com.google.inject.spi.Element"/>
9019    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
9020      abstract="true" native="false" synchronized="false"
9021      static="false" final="false" visibility="public"
9022      deprecated="not deprecated">
9023      <doc>
9024      <![CDATA[Returns the configuration information in this private environment.]]>
9025      </doc>
9026    </method>
9027    <method name="getInjector" return="com.google.inject.Injector"
9028      abstract="true" native="false" synchronized="false"
9029      static="false" final="false" visibility="public"
9030      deprecated="not deprecated">
9031      <doc>
9032      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
9033 been used to create an injector.]]>
9034      </doc>
9035    </method>
9036    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
9037      abstract="true" native="false" synchronized="false"
9038      static="false" final="false" visibility="public"
9039      deprecated="not deprecated">
9040      <doc>
9041      <![CDATA[Returns the unique exposed keys for these private elements.]]>
9042      </doc>
9043    </method>
9044    <method name="getExposedSource" return="java.lang.Object"
9045      abstract="true" native="false" synchronized="false"
9046      static="false" final="false" visibility="public"
9047      deprecated="not deprecated">
9048      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
9049      <doc>
9050      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
9051 exposed. Used by Guice in the production of descriptive error messages.
9052
9053 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
9054 example. Tools should simply call {@code toString()} on the source object if the type is
9055 unfamiliar.
9056
9057 @param key one of the keys exposed by this module.]]>
9058      </doc>
9059    </method>
9060    <doc>
9061    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
9062 default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
9063
9064 @author jessewilson@google.com (Jesse Wilson)
9065 @since 2.0]]>
9066    </doc>
9067  </interface>
9068  <!-- end interface com.google.inject.spi.PrivateElements -->
9069  <!-- start interface com.google.inject.spi.ProviderBinding -->
9070  <interface name="ProviderBinding"    abstract="true"
9071    static="false" final="false" visibility="public"
9072    deprecated="not deprecated">
9073    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9074    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
9075      abstract="true" native="false" synchronized="false"
9076      static="false" final="false" visibility="public"
9077      deprecated="not deprecated">
9078      <doc>
9079      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
9080 can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
9081 Injector.getBinding(providedKey)}]]>
9082      </doc>
9083    </method>
9084    <doc>
9085    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
9086 is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
9087
9088 @author jessewilson@google.com (Jesse Wilson)
9089 @since 2.0]]>
9090    </doc>
9091  </interface>
9092  <!-- end interface com.google.inject.spi.ProviderBinding -->
9093  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
9094  <interface name="ProviderInstanceBinding"    abstract="true"
9095    static="false" final="false" visibility="public"
9096    deprecated="not deprecated">
9097    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9098    <implements name="com.google.inject.spi.HasDependencies"/>
9099    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
9100      abstract="true" native="false" synchronized="false"
9101      static="false" final="false" visibility="public"
9102      deprecated="Use {@link #getUserSuppliedProvider} instead.">
9103      <doc>
9104      <![CDATA[If the user supplied a JSR330 binding, then this will wrap that one. To always return the
9105 user-supplied provider, use {@link #getUserSuppliedProvider}.
9106
9107 @deprecated Use {@link #getUserSuppliedProvider} instead.]]>
9108      </doc>
9109    </method>
9110    <method name="getUserSuppliedProvider" return="javax.inject.Provider&lt;? extends T&gt;"
9111      abstract="true" native="false" synchronized="false"
9112      static="false" final="false" visibility="public"
9113      deprecated="not deprecated">
9114      <doc>
9115      <![CDATA[Returns the user-supplied, unscoped provider.]]>
9116      </doc>
9117    </method>
9118    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9119      abstract="true" native="false" synchronized="false"
9120      static="false" final="false" visibility="public"
9121      deprecated="not deprecated">
9122      <doc>
9123      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
9124 time only.
9125
9126 @return a possibly empty set]]>
9127      </doc>
9128    </method>
9129    <doc>
9130    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
9131 injections.
9132
9133 @author jessewilson@google.com (Jesse Wilson)
9134 @since 2.0]]>
9135    </doc>
9136  </interface>
9137  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
9138  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
9139  <interface name="ProviderKeyBinding"    abstract="true"
9140    static="false" final="false" visibility="public"
9141    deprecated="not deprecated">
9142    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9143    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
9144      abstract="true" native="false" synchronized="false"
9145      static="false" final="false" visibility="public"
9146      deprecated="not deprecated">
9147      <doc>
9148      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
9149 injector using {@link com.google.inject.Injector#getBinding(Key)
9150 Injector.getBinding(providerKey)}]]>
9151      </doc>
9152    </method>
9153    <doc>
9154    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
9155 provider's {@code get} method is invoked.
9156
9157 @author jessewilson@google.com (Jesse Wilson)
9158 @since 2.0]]>
9159    </doc>
9160  </interface>
9161  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
9162  <!-- start class com.google.inject.spi.ProviderLookup -->
9163  <class name="ProviderLookup" extends="java.lang.Object"
9164    abstract="false"
9165    static="false" final="true" visibility="public"
9166    deprecated="not deprecated">
9167    <implements name="com.google.inject.spi.Element"/>
9168    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
9169      static="false" final="false" visibility="public"
9170      deprecated="not deprecated">
9171    </constructor>
9172    <method name="getSource" return="java.lang.Object"
9173      abstract="false" native="false" synchronized="false"
9174      static="false" final="false" visibility="public"
9175      deprecated="not deprecated">
9176    </method>
9177    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
9178      abstract="false" native="false" synchronized="false"
9179      static="false" final="false" visibility="public"
9180      deprecated="not deprecated">
9181    </method>
9182    <method name="acceptVisitor" return="T"
9183      abstract="false" native="false" synchronized="false"
9184      static="false" final="false" visibility="public"
9185      deprecated="not deprecated">
9186      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9187    </method>
9188    <method name="initializeDelegate"
9189      abstract="false" native="false" synchronized="false"
9190      static="false" final="false" visibility="public"
9191      deprecated="not deprecated">
9192      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
9193      <doc>
9194      <![CDATA[Sets the actual provider.
9195
9196 @throws IllegalStateException if the delegate is already set]]>
9197      </doc>
9198    </method>
9199    <method name="applyTo"
9200      abstract="false" native="false" synchronized="false"
9201      static="false" final="false" visibility="public"
9202      deprecated="not deprecated">
9203      <param name="binder" type="com.google.inject.Binder"/>
9204    </method>
9205    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
9206      abstract="false" native="false" synchronized="false"
9207      static="false" final="false" visibility="public"
9208      deprecated="not deprecated">
9209      <doc>
9210      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
9211 will be initialized when this element is processed, or otherwise used to create an injector.]]>
9212      </doc>
9213    </method>
9214    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9215      abstract="false" native="false" synchronized="false"
9216      static="false" final="false" visibility="public"
9217      deprecated="not deprecated">
9218      <doc>
9219      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
9220 which usually happens when the injector is created. The provider will throw an {@code
9221 IllegalStateException} if you try to use it beforehand.]]>
9222      </doc>
9223    </method>
9224    <doc>
9225    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
9226 {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
9227 <pre>
9228     Provider&lt;PaymentService&gt; paymentServiceProvider
9229         = getProvider(PaymentService.class);</pre>
9230
9231 @author jessewilson@google.com (Jesse Wilson)
9232 @since 2.0]]>
9233    </doc>
9234  </class>
9235  <!-- end class com.google.inject.spi.ProviderLookup -->
9236  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
9237  <interface name="ProviderWithDependencies"    abstract="true"
9238    static="false" final="false" visibility="public"
9239    deprecated="not deprecated">
9240    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9241    <implements name="com.google.inject.spi.HasDependencies"/>
9242    <doc>
9243    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
9244 aren't specified in injections, this interface should be used to expose all dependencies.
9245
9246 @since 2.0]]>
9247    </doc>
9248  </interface>
9249  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
9250  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9251  <interface name="ProviderWithExtensionVisitor"    abstract="true"
9252    static="false" final="false" visibility="public"
9253    deprecated="not deprecated">
9254    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9255    <method name="acceptExtensionVisitor" return="V"
9256      abstract="true" native="false" synchronized="false"
9257      static="false" final="false" visibility="public"
9258      deprecated="not deprecated">
9259      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
9260      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
9261      <doc>
9262      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
9263 extension visitor, and if so, visit it using that method. If the visitor is
9264 not an instance of the custom extension visitor, this method <b>MUST</b>
9265 call visitor.visit(binding).
9266 <p>
9267 Due to issues with generics, the type parameters of this method do not
9268 relate to the type of the provider. In practice, the 'B' type will always
9269 be a supertype of 'T'.]]>
9270      </doc>
9271    </method>
9272    <doc>
9273    <![CDATA[A Provider that is part of an extension which supports a custom
9274 BindingTargetVisitor.
9275 <p>
9276 When an extension binds a provider instance, the provider can implement this
9277 interface to allow users using the
9278 {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
9279 custom visitor designed for that extension. A typical implementation within
9280 the extension would look like
9281 <pre>
9282 &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
9283   if(visitor instanceof MyCustomExtensionVisitor) {
9284     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
9285   } else {
9286     return visitor.visit(binding);
9287   }
9288 }</pre>
9289 'MyCustomExtensionVisitor' in the example above would be an interface the
9290 extension provides that users can implement in order to be notified of custom
9291 extension information. These visitor interfaces must extend from
9292 BindingTargetVisitor.
9293
9294 @since 3.0
9295 @author sameb@google.com (Sam Berlin)]]>
9296    </doc>
9297  </interface>
9298  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9299  <!-- start interface com.google.inject.spi.ProvidesMethodBinding -->
9300  <interface name="ProvidesMethodBinding"    abstract="true"
9301    static="false" final="false" visibility="public"
9302    deprecated="not deprecated">
9303    <implements name="com.google.inject.spi.HasDependencies"/>
9304    <method name="getMethod" return="java.lang.reflect.Method"
9305      abstract="true" native="false" synchronized="false"
9306      static="false" final="false" visibility="public"
9307      deprecated="not deprecated">
9308      <doc>
9309      <![CDATA[Returns the method this binding uses.]]>
9310      </doc>
9311    </method>
9312    <method name="getEnclosingInstance" return="java.lang.Object"
9313      abstract="true" native="false" synchronized="false"
9314      static="false" final="false" visibility="public"
9315      deprecated="not deprecated">
9316      <doc>
9317      <![CDATA[Returns the instance of the object the method is defined in.]]>
9318      </doc>
9319    </method>
9320    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
9321      abstract="true" native="false" synchronized="false"
9322      static="false" final="false" visibility="public"
9323      deprecated="not deprecated">
9324      <doc>
9325      <![CDATA[Returns the key of the binding.]]>
9326      </doc>
9327    </method>
9328    <doc>
9329    <![CDATA[An {@literal @}{@link Provides} binding.
9330
9331 @since 4.0
9332 @author sameb@google.com (Sam Berlin)]]>
9333    </doc>
9334  </interface>
9335  <!-- end interface com.google.inject.spi.ProvidesMethodBinding -->
9336  <!-- start interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
9337  <interface name="ProvidesMethodTargetVisitor"    abstract="true"
9338    static="false" final="false" visibility="public"
9339    deprecated="not deprecated">
9340    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
9341    <method name="visit" return="V"
9342      abstract="true" native="false" synchronized="false"
9343      static="false" final="false" visibility="public"
9344      deprecated="not deprecated">
9345      <param name="providesMethodBinding" type="com.google.inject.spi.ProvidesMethodBinding&lt;? extends T&gt;"/>
9346      <doc>
9347      <![CDATA[Visits an {@link ProvidesMethodBinding} created with an {@literal @}{@link Provides} method.]]>
9348      </doc>
9349    </method>
9350    <doc>
9351    <![CDATA[A visitor for the {@literal @}{@link Provides} bindings.
9352 <p>
9353 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
9354 {@code @Provides} will be visited through this interface.
9355
9356 @since 4.0
9357 @author sameb@google.com (Sam Berlin)]]>
9358    </doc>
9359  </interface>
9360  <!-- end interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
9361  <!-- start interface com.google.inject.spi.ProvisionListener -->
9362  <interface name="ProvisionListener"    abstract="true"
9363    static="false" final="false" visibility="public"
9364    deprecated="not deprecated">
9365    <method name="onProvision"
9366      abstract="true" native="false" synchronized="false"
9367      static="false" final="false" visibility="public"
9368      deprecated="not deprecated">
9369      <param name="provision" type="com.google.inject.spi.ProvisionListener.ProvisionInvocation&lt;T&gt;"/>
9370      <doc>
9371      <![CDATA[Invoked by Guice when an object requires provisioning. Provisioning occurs
9372 when Guice locates and injects the dependencies for a binding. For types
9373 bound to a Provider, provisioning encapsulates the {@link Provider#get}
9374 method. For toInstance or constant bindings, provisioning encapsulates
9375 the injecting of {@literal @}{@code Inject}ed fields or methods.
9376 For other types, provisioning encapsulates the construction of the
9377 object. If a type is bound within a {@link Scope}, provisioning depends on
9378 the scope. Types bound in Singleton scope will only be provisioned once.
9379 Types bound in no scope will be provisioned every time they are injected.
9380 Other scopes define their own behavior for provisioning.
9381 <p>
9382 To perform the provision, call {@link ProvisionInvocation#provision()}.
9383 If you do not explicitly call provision, it will be automatically done after
9384 this method returns.  It is an error to call provision more than once.]]>
9385      </doc>
9386    </method>
9387    <doc>
9388    <![CDATA[Listens for provisioning of objects. Useful for gathering timing information
9389 about provisioning, post-provision initialization, and more.
9390
9391 @author sameb@google.com (Sam Berlin)
9392 @since 4.0]]>
9393    </doc>
9394  </interface>
9395  <!-- end interface com.google.inject.spi.ProvisionListener -->
9396  <!-- start class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
9397  <class name="ProvisionListener.ProvisionInvocation" extends="java.lang.Object"
9398    abstract="true"
9399    static="true" final="false" visibility="public"
9400    deprecated="not deprecated">
9401    <constructor name="ProvisionInvocation"
9402      static="false" final="false" visibility="public"
9403      deprecated="not deprecated">
9404    </constructor>
9405    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
9406      abstract="true" native="false" synchronized="false"
9407      static="false" final="false" visibility="public"
9408      deprecated="not deprecated">
9409      <doc>
9410      <![CDATA[Returns the Binding this is provisioning.
9411 <p>
9412 You must not call {@link Provider#get()} on the provider returned by
9413 {@link Binding#getProvider}, otherwise you will get confusing error messages.]]>
9414      </doc>
9415    </method>
9416    <method name="provision" return="T"
9417      abstract="true" native="false" synchronized="false"
9418      static="false" final="false" visibility="public"
9419      deprecated="not deprecated">
9420      <doc>
9421      <![CDATA[Performs the provision, returning the object provisioned.]]>
9422      </doc>
9423    </method>
9424    <method name="getDependencyChain" return="java.util.List&lt;com.google.inject.spi.DependencyAndSource&gt;"
9425      abstract="true" native="false" synchronized="false"
9426      static="false" final="false" visibility="public"
9427      deprecated="not deprecated">
9428      <doc>
9429      <![CDATA[Returns the dependency chain that led to this object being provisioned.]]>
9430      </doc>
9431    </method>
9432    <doc>
9433    <![CDATA[Encapsulates a single act of provisioning.]]>
9434    </doc>
9435  </class>
9436  <!-- end class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
9437  <!-- start class com.google.inject.spi.ProvisionListenerBinding -->
9438  <class name="ProvisionListenerBinding" extends="java.lang.Object"
9439    abstract="false"
9440    static="false" final="true" visibility="public"
9441    deprecated="not deprecated">
9442    <implements name="com.google.inject.spi.Element"/>
9443    <method name="getListeners" return="java.util.List&lt;com.google.inject.spi.ProvisionListener&gt;"
9444      abstract="false" native="false" synchronized="false"
9445      static="false" final="false" visibility="public"
9446      deprecated="not deprecated">
9447      <doc>
9448      <![CDATA[Returns the registered listeners.]]>
9449      </doc>
9450    </method>
9451    <method name="getBindingMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"
9452      abstract="false" native="false" synchronized="false"
9453      static="false" final="false" visibility="public"
9454      deprecated="not deprecated">
9455      <doc>
9456      <![CDATA[Returns the binding matcher which chooses which bindings the listener should be notified of.]]>
9457      </doc>
9458    </method>
9459    <method name="getSource" return="java.lang.Object"
9460      abstract="false" native="false" synchronized="false"
9461      static="false" final="false" visibility="public"
9462      deprecated="not deprecated">
9463    </method>
9464    <method name="acceptVisitor" return="R"
9465      abstract="false" native="false" synchronized="false"
9466      static="false" final="false" visibility="public"
9467      deprecated="not deprecated">
9468      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
9469    </method>
9470    <method name="applyTo"
9471      abstract="false" native="false" synchronized="false"
9472      static="false" final="false" visibility="public"
9473      deprecated="not deprecated">
9474      <param name="binder" type="com.google.inject.Binder"/>
9475    </method>
9476    <doc>
9477    <![CDATA[Binds keys (picked using a Matcher) to a provision listener. Listeners are created explicitly in
9478 a module using {@link Binder#bindListener(Matcher, ProvisionListener...)} statements:
9479
9480 @author sameb@google.com (Sam Berlin)
9481 @since 4.0]]>
9482    </doc>
9483  </class>
9484  <!-- end class com.google.inject.spi.ProvisionListenerBinding -->
9485  <!-- start class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
9486  <class name="RequireAtInjectOnConstructorsOption" extends="java.lang.Object"
9487    abstract="false"
9488    static="false" final="true" visibility="public"
9489    deprecated="not deprecated">
9490    <implements name="com.google.inject.spi.Element"/>
9491    <method name="getSource" return="java.lang.Object"
9492      abstract="false" native="false" synchronized="false"
9493      static="false" final="false" visibility="public"
9494      deprecated="not deprecated">
9495    </method>
9496    <method name="applyTo"
9497      abstract="false" native="false" synchronized="false"
9498      static="false" final="false" visibility="public"
9499      deprecated="not deprecated">
9500      <param name="binder" type="com.google.inject.Binder"/>
9501    </method>
9502    <method name="acceptVisitor" return="T"
9503      abstract="false" native="false" synchronized="false"
9504      static="false" final="false" visibility="public"
9505      deprecated="not deprecated">
9506      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9507    </method>
9508    <doc>
9509    <![CDATA[A request to require explicit {@literal @}{@link Inject} annotations on constructors.
9510
9511 @author sameb@google.com (Sam Berlin)
9512 @since 4.0]]>
9513    </doc>
9514  </class>
9515  <!-- end class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
9516  <!-- start class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
9517  <class name="RequireExactBindingAnnotationsOption" extends="java.lang.Object"
9518    abstract="false"
9519    static="false" final="true" visibility="public"
9520    deprecated="not deprecated">
9521    <implements name="com.google.inject.spi.Element"/>
9522    <method name="getSource" return="java.lang.Object"
9523      abstract="false" native="false" synchronized="false"
9524      static="false" final="false" visibility="public"
9525      deprecated="not deprecated">
9526    </method>
9527    <method name="applyTo"
9528      abstract="false" native="false" synchronized="false"
9529      static="false" final="false" visibility="public"
9530      deprecated="not deprecated">
9531      <param name="binder" type="com.google.inject.Binder"/>
9532    </method>
9533    <method name="acceptVisitor" return="T"
9534      abstract="false" native="false" synchronized="false"
9535      static="false" final="false" visibility="public"
9536      deprecated="not deprecated">
9537      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9538    </method>
9539    <doc>
9540    <![CDATA[A request to require exact binding annotations.
9541
9542 @author sameb@google.com (Sam Berlin)
9543 @since 4.0]]>
9544    </doc>
9545  </class>
9546  <!-- end class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
9547  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
9548  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
9549    abstract="false"
9550    static="false" final="true" visibility="public"
9551    deprecated="not deprecated">
9552    <implements name="com.google.inject.spi.Element"/>
9553    <method name="getSource" return="java.lang.Object"
9554      abstract="false" native="false" synchronized="false"
9555      static="false" final="false" visibility="public"
9556      deprecated="not deprecated">
9557    </method>
9558    <method name="applyTo"
9559      abstract="false" native="false" synchronized="false"
9560      static="false" final="false" visibility="public"
9561      deprecated="not deprecated">
9562      <param name="binder" type="com.google.inject.Binder"/>
9563    </method>
9564    <method name="acceptVisitor" return="T"
9565      abstract="false" native="false" synchronized="false"
9566      static="false" final="false" visibility="public"
9567      deprecated="not deprecated">
9568      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9569    </method>
9570    <doc>
9571    <![CDATA[A request to require explicit bindings.
9572
9573 @author sameb@google.com (Sam Berlin)
9574 @since 3.0]]>
9575    </doc>
9576  </class>
9577  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
9578  <!-- start class com.google.inject.spi.ScopeBinding -->
9579  <class name="ScopeBinding" extends="java.lang.Object"
9580    abstract="false"
9581    static="false" final="true" visibility="public"
9582    deprecated="not deprecated">
9583    <implements name="com.google.inject.spi.Element"/>
9584    <method name="getSource" return="java.lang.Object"
9585      abstract="false" native="false" synchronized="false"
9586      static="false" final="false" visibility="public"
9587      deprecated="not deprecated">
9588    </method>
9589    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
9590      abstract="false" native="false" synchronized="false"
9591      static="false" final="false" visibility="public"
9592      deprecated="not deprecated">
9593    </method>
9594    <method name="getScope" return="com.google.inject.Scope"
9595      abstract="false" native="false" synchronized="false"
9596      static="false" final="false" visibility="public"
9597      deprecated="not deprecated">
9598    </method>
9599    <method name="acceptVisitor" return="T"
9600      abstract="false" native="false" synchronized="false"
9601      static="false" final="false" visibility="public"
9602      deprecated="not deprecated">
9603      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9604    </method>
9605    <method name="applyTo"
9606      abstract="false" native="false" synchronized="false"
9607      static="false" final="false" visibility="public"
9608      deprecated="not deprecated">
9609      <param name="binder" type="com.google.inject.Binder"/>
9610    </method>
9611    <doc>
9612    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
9613 explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
9614 statements:
9615 <pre>
9616     Scope recordScope = new RecordScope();
9617     bindScope(RecordScoped.class, new RecordScope());</pre>
9618
9619 @author jessewilson@google.com (Jesse Wilson)
9620 @since 2.0]]>
9621    </doc>
9622  </class>
9623  <!-- end class com.google.inject.spi.ScopeBinding -->
9624  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
9625  <class name="StaticInjectionRequest" extends="java.lang.Object"
9626    abstract="false"
9627    static="false" final="true" visibility="public"
9628    deprecated="not deprecated">
9629    <implements name="com.google.inject.spi.Element"/>
9630    <method name="getSource" return="java.lang.Object"
9631      abstract="false" native="false" synchronized="false"
9632      static="false" final="false" visibility="public"
9633      deprecated="not deprecated">
9634    </method>
9635    <method name="getType" return="java.lang.Class&lt;?&gt;"
9636      abstract="false" native="false" synchronized="false"
9637      static="false" final="false" visibility="public"
9638      deprecated="not deprecated">
9639    </method>
9640    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9641      abstract="false" native="false" synchronized="false"
9642      static="false" final="false" visibility="public"
9643      deprecated="not deprecated">
9644      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9645      <doc>
9646      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
9647 request.
9648
9649 @return a possibly empty set of injection points. The set has a specified iteration order. All
9650      fields are returned and then all methods. Within the fields, supertype fields are returned
9651      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9652 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9653      a field with multiple binding annotations. The exception's {@link
9654      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9655      of the valid injection points.]]>
9656      </doc>
9657    </method>
9658    <method name="applyTo"
9659      abstract="false" native="false" synchronized="false"
9660      static="false" final="false" visibility="public"
9661      deprecated="not deprecated">
9662      <param name="binder" type="com.google.inject.Binder"/>
9663    </method>
9664    <method name="acceptVisitor" return="T"
9665      abstract="false" native="false" synchronized="false"
9666      static="false" final="false" visibility="public"
9667      deprecated="not deprecated">
9668      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9669    </method>
9670    <doc>
9671    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
9672 explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
9673 requestStaticInjection()} statements:
9674 <pre>
9675     requestStaticInjection(MyLegacyService.class);</pre>
9676
9677 @author jessewilson@google.com (Jesse Wilson)
9678 @since 2.0]]>
9679    </doc>
9680  </class>
9681  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
9682  <!-- start class com.google.inject.spi.Toolable -->
9683  <class name="Toolable"    abstract="true"
9684    static="false" final="false" visibility="public"
9685    deprecated="not deprecated">
9686    <implements name="java.lang.annotation.Annotation"/>
9687    <doc>
9688    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
9689 This is typically useful for for extensions to Guice that perform additional validation in an
9690 injected method or field.  This only applies to objects that are already constructed when
9691 bindings are created (ie., something bound using {@link
9692 com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
9693 com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
9694 com.google.inject.Binder#requestInjection requestInjection}.
9695
9696 @author sberlin@gmail.com (Sam Berlin)
9697 @since 3.0]]>
9698    </doc>
9699  </class>
9700  <!-- end class com.google.inject.spi.Toolable -->
9701  <!-- start interface com.google.inject.spi.TypeConverter -->
9702  <interface name="TypeConverter"    abstract="true"
9703    static="false" final="false" visibility="public"
9704    deprecated="not deprecated">
9705    <method name="convert" return="java.lang.Object"
9706      abstract="true" native="false" synchronized="false"
9707      static="false" final="false" visibility="public"
9708      deprecated="not deprecated">
9709      <param name="value" type="java.lang.String"/>
9710      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9711      <doc>
9712      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
9713      </doc>
9714    </method>
9715    <doc>
9716    <![CDATA[Converts constant string values to a different type.
9717
9718 @author crazybob@google.com (Bob Lee)
9719 @since 2.0]]>
9720    </doc>
9721  </interface>
9722  <!-- end interface com.google.inject.spi.TypeConverter -->
9723  <!-- start class com.google.inject.spi.TypeConverterBinding -->
9724  <class name="TypeConverterBinding" extends="java.lang.Object"
9725    abstract="false"
9726    static="false" final="true" visibility="public"
9727    deprecated="not deprecated">
9728    <implements name="com.google.inject.spi.Element"/>
9729    <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"
9730      static="false" final="false" visibility="public"
9731      deprecated="not deprecated">
9732      <doc>
9733      <![CDATA[@since 3.0]]>
9734      </doc>
9735    </constructor>
9736    <method name="getSource" return="java.lang.Object"
9737      abstract="false" native="false" synchronized="false"
9738      static="false" final="false" visibility="public"
9739      deprecated="not deprecated">
9740    </method>
9741    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9742      abstract="false" native="false" synchronized="false"
9743      static="false" final="false" visibility="public"
9744      deprecated="not deprecated">
9745    </method>
9746    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
9747      abstract="false" native="false" synchronized="false"
9748      static="false" final="false" visibility="public"
9749      deprecated="not deprecated">
9750    </method>
9751    <method name="acceptVisitor" return="T"
9752      abstract="false" native="false" synchronized="false"
9753      static="false" final="false" visibility="public"
9754      deprecated="not deprecated">
9755      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9756    </method>
9757    <method name="applyTo"
9758      abstract="false" native="false" synchronized="false"
9759      static="false" final="false" visibility="public"
9760      deprecated="not deprecated">
9761      <param name="binder" type="com.google.inject.Binder"/>
9762    </method>
9763    <method name="toString" return="java.lang.String"
9764      abstract="false" native="false" synchronized="false"
9765      static="false" final="false" visibility="public"
9766      deprecated="not deprecated">
9767    </method>
9768    <doc>
9769    <![CDATA[Registration of type converters for matching target types. Instances are created
9770 explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
9771 TypeConverter) convertToTypes()} statements:
9772 <pre>
9773     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
9774
9775 @author jessewilson@google.com (Jesse Wilson)
9776 @since 2.0]]>
9777    </doc>
9778  </class>
9779  <!-- end class com.google.inject.spi.TypeConverterBinding -->
9780  <!-- start interface com.google.inject.spi.TypeEncounter -->
9781  <interface name="TypeEncounter"    abstract="true"
9782    static="false" final="false" visibility="public"
9783    deprecated="not deprecated">
9784    <method name="addError"
9785      abstract="true" native="false" synchronized="false"
9786      static="false" final="false" visibility="public"
9787      deprecated="not deprecated">
9788      <param name="message" type="java.lang.String"/>
9789      <param name="arguments" type="java.lang.Object[]"/>
9790      <doc>
9791      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
9792 time. Unlike throwing an exception, this enable us to continue configuring the Injector and
9793 discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
9794 into the message.]]>
9795      </doc>
9796    </method>
9797    <method name="addError"
9798      abstract="true" native="false" synchronized="false"
9799      static="false" final="false" visibility="public"
9800      deprecated="not deprecated">
9801      <param name="t" type="java.lang.Throwable"/>
9802      <doc>
9803      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
9804 message of which will be presented to the user at a later time. If your type listener calls
9805 something that you worry may fail, you should catch the exception and pass it to this method.]]>
9806      </doc>
9807    </method>
9808    <method name="addError"
9809      abstract="true" native="false" synchronized="false"
9810      static="false" final="false" visibility="public"
9811      deprecated="not deprecated">
9812      <param name="message" type="com.google.inject.spi.Message"/>
9813      <doc>
9814      <![CDATA[Records an error message to be presented to the user at a later time.]]>
9815      </doc>
9816    </method>
9817    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9818      abstract="true" native="false" synchronized="false"
9819      static="false" final="false" visibility="public"
9820      deprecated="not deprecated">
9821      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9822      <doc>
9823      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
9824 provider will not be valid until the injector has been created. The provider will throw an
9825 {@code IllegalStateException} if you try to use it beforehand.]]>
9826      </doc>
9827    </method>
9828    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9829      abstract="true" native="false" synchronized="false"
9830      static="false" final="false" visibility="public"
9831      deprecated="not deprecated">
9832      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9833      <doc>
9834      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
9835 provider will not be valid until the injetor has been created. The provider will throw an
9836 {@code IllegalStateException} if you try to use it beforehand.]]>
9837      </doc>
9838    </method>
9839    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9840      abstract="true" native="false" synchronized="false"
9841      static="false" final="false" visibility="public"
9842      deprecated="not deprecated">
9843      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9844      <doc>
9845      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9846 of the given type {@code T}. The returned members injector will not be valid until the main
9847 injector has been created. The members injector will throw an {@code IllegalStateException}
9848 if you try to use it beforehand.
9849
9850 @param typeLiteral type to get members injector for]]>
9851      </doc>
9852    </method>
9853    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9854      abstract="true" native="false" synchronized="false"
9855      static="false" final="false" visibility="public"
9856      deprecated="not deprecated">
9857      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9858      <doc>
9859      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9860 of the given type {@code T}. The returned members injector will not be valid until the main
9861 injector has been created. The members injector will throw an {@code IllegalStateException}
9862 if you try to use it beforehand.
9863
9864 @param type type to get members injector for]]>
9865      </doc>
9866    </method>
9867    <method name="register"
9868      abstract="true" native="false" synchronized="false"
9869      static="false" final="false" visibility="public"
9870      deprecated="not deprecated">
9871      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
9872      <doc>
9873      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
9874 performed its own injections on an instance of {@code I}.]]>
9875      </doc>
9876    </method>
9877    <method name="register"
9878      abstract="true" native="false" synchronized="false"
9879      static="false" final="false" visibility="public"
9880      deprecated="not deprecated">
9881      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
9882      <doc>
9883      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
9884 injections have been performed on an instance of {@code I}.]]>
9885      </doc>
9886    </method>
9887    <method name="bindInterceptor"
9888      abstract="true" native="false" synchronized="false"
9889      static="false" final="false" visibility="public"
9890      deprecated="not deprecated">
9891      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
9892      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
9893      <doc>
9894      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
9895 method is eligible for interception if:
9896
9897 <ul>
9898  <li>Guice created the instance the method is on</li>
9899  <li>Neither the enclosing type nor the method is final</li>
9900  <li>And the method is package-private or more accessible</li>
9901 </ul>
9902
9903 @param methodMatcher matches methods the interceptor should apply to. For
9904     example: {@code annotatedWith(Transactional.class)}.
9905 @param interceptors to bind]]>
9906      </doc>
9907    </method>
9908    <doc>
9909    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
9910 listeners and binding method interceptors for injectable type {@code I}. It is an error to use
9911 an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
9912 returned.
9913
9914 @param <I> the injectable type encountered
9915 @since 2.0]]>
9916    </doc>
9917  </interface>
9918  <!-- end interface com.google.inject.spi.TypeEncounter -->
9919  <!-- start interface com.google.inject.spi.TypeListener -->
9920  <interface name="TypeListener"    abstract="true"
9921    static="false" final="false" visibility="public"
9922    deprecated="not deprecated">
9923    <method name="hear"
9924      abstract="true" native="false" synchronized="false"
9925      static="false" final="false" visibility="public"
9926      deprecated="not deprecated">
9927      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
9928      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
9929      <doc>
9930      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
9931 Called during injector creation (or afterwords if Guice encounters a type at run time and
9932 creates a JIT binding).
9933
9934 @param type encountered by Guice
9935 @param encounter context of this encounter, enables reporting errors, registering injection
9936     listeners and binding method interceptors for {@code type}.
9937
9938 @param <I> the injectable type]]>
9939      </doc>
9940    </method>
9941    <doc>
9942    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
9943 one situation but only its methods and fields injected in another, Guice will notify this
9944 listener once.
9945
9946 <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
9947 registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
9948 com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
9949 binding method interceptors}.
9950
9951 @since 2.0]]>
9952    </doc>
9953  </interface>
9954  <!-- end interface com.google.inject.spi.TypeListener -->
9955  <!-- start class com.google.inject.spi.TypeListenerBinding -->
9956  <class name="TypeListenerBinding" extends="java.lang.Object"
9957    abstract="false"
9958    static="false" final="true" visibility="public"
9959    deprecated="not deprecated">
9960    <implements name="com.google.inject.spi.Element"/>
9961    <method name="getListener" return="com.google.inject.spi.TypeListener"
9962      abstract="false" native="false" synchronized="false"
9963      static="false" final="false" visibility="public"
9964      deprecated="not deprecated">
9965      <doc>
9966      <![CDATA[Returns the registered listener.]]>
9967      </doc>
9968    </method>
9969    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9970      abstract="false" native="false" synchronized="false"
9971      static="false" final="false" visibility="public"
9972      deprecated="not deprecated">
9973      <doc>
9974      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
9975      </doc>
9976    </method>
9977    <method name="getSource" return="java.lang.Object"
9978      abstract="false" native="false" synchronized="false"
9979      static="false" final="false" visibility="public"
9980      deprecated="not deprecated">
9981    </method>
9982    <method name="acceptVisitor" return="T"
9983      abstract="false" native="false" synchronized="false"
9984      static="false" final="false" visibility="public"
9985      deprecated="not deprecated">
9986      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9987    </method>
9988    <method name="applyTo"
9989      abstract="false" native="false" synchronized="false"
9990      static="false" final="false" visibility="public"
9991      deprecated="not deprecated">
9992      <param name="binder" type="com.google.inject.Binder"/>
9993    </method>
9994    <doc>
9995    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
9996 a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
9997
9998 <pre>
9999     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
10000
10001 @author jessewilson@google.com (Jesse Wilson)
10002 @since 2.0]]>
10003    </doc>
10004  </class>
10005  <!-- end class com.google.inject.spi.TypeListenerBinding -->
10006  <!-- start interface com.google.inject.spi.UntargettedBinding -->
10007  <interface name="UntargettedBinding"    abstract="true"
10008    static="false" final="false" visibility="public"
10009    deprecated="not deprecated">
10010    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10011    <doc>
10012    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
10013 strategies to resolve injections.
10014
10015 @author jessewilson@google.com (Jesse Wilson)
10016 @since 2.0]]>
10017    </doc>
10018  </interface>
10019  <!-- end interface com.google.inject.spi.UntargettedBinding -->
10020</package>
10021<package name="com.google.inject.spring">
10022  <!-- start class com.google.inject.spring.SpringIntegration -->
10023  <class name="SpringIntegration" extends="java.lang.Object"
10024    abstract="false"
10025    static="false" final="false" visibility="public"
10026    deprecated="not deprecated">
10027    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
10028      abstract="false" native="false" synchronized="false"
10029      static="true" final="false" visibility="public"
10030      deprecated="not deprecated">
10031      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10032      <param name="name" type="java.lang.String"/>
10033      <doc>
10034      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
10035 Expects a binding to {@link
10036 org.springframework.beans.factory.BeanFactory}. Example usage:
10037
10038 <pre>
10039 bind(DataSource.class)
10040   .toProvider(fromSpring(DataSource.class, "dataSource"));
10041 </pre>]]>
10042      </doc>
10043    </method>
10044    <method name="bindAll"
10045      abstract="false" native="false" synchronized="false"
10046      static="true" final="false" visibility="public"
10047      deprecated="not deprecated">
10048      <param name="binder" type="com.google.inject.Binder"/>
10049      <param name="beanFactory" type="ListableBeanFactory"/>
10050      <doc>
10051      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
10052 named "foo", this method creates a binding to the bean's type and
10053 {@code @Named("foo")}.
10054
10055 @see com.google.inject.name.Named
10056 @see com.google.inject.name.Names#named(String)]]>
10057      </doc>
10058    </method>
10059    <doc>
10060    <![CDATA[Integrates Guice with Spring.
10061
10062 @author crazybob@google.com (Bob Lee)]]>
10063    </doc>
10064  </class>
10065  <!-- end class com.google.inject.spring.SpringIntegration -->
10066</package>
10067<package name="com.google.inject.struts2">
10068  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
10069  <class name="GuiceObjectFactory" extends="ObjectFactory"
10070    abstract="false"
10071    static="false" final="false" visibility="public"
10072    deprecated="Use {@link com.google.inject.servlet.Struts2Factory} instead.">
10073    <constructor name="GuiceObjectFactory"
10074      static="false" final="false" visibility="public"
10075      deprecated="not deprecated">
10076    </constructor>
10077    <method name="isNoArgConstructorRequired" return="boolean"
10078      abstract="false" native="false" synchronized="false"
10079      static="false" final="false" visibility="public"
10080      deprecated="not deprecated">
10081    </method>
10082    <method name="getClassInstance" return="java.lang.Class"
10083      abstract="false" native="false" synchronized="false"
10084      static="false" final="false" visibility="public"
10085      deprecated="not deprecated">
10086      <param name="name" type="java.lang.String"/>
10087      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10088    </method>
10089    <method name="buildBean" return="java.lang.Object"
10090      abstract="false" native="false" synchronized="false"
10091      static="false" final="false" visibility="public"
10092      deprecated="not deprecated">
10093      <param name="clazz" type="java.lang.Class"/>
10094      <param name="extraContext" type="java.util.Map"/>
10095    </method>
10096    <method name="buildInterceptor" return="Interceptor"
10097      abstract="false" native="false" synchronized="false"
10098      static="false" final="false" visibility="public"
10099      deprecated="not deprecated">
10100      <param name="interceptorConfig" type="InterceptorConfig"/>
10101      <param name="interceptorRefParams" type="java.util.Map"/>
10102      <exception name="ConfigurationException" type="ConfigurationException"/>
10103    </method>
10104    <doc>
10105    <![CDATA[@deprecated Use {@link com.google.inject.servlet.Struts2Factory} instead.]]>
10106    </doc>
10107  </class>
10108  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
10109  <!-- start class com.google.inject.struts2.Struts2Factory -->
10110  <class name="Struts2Factory" extends="ObjectFactory"
10111    abstract="false"
10112    static="false" final="false" visibility="public"
10113    deprecated="not deprecated">
10114    <constructor name="Struts2Factory"
10115      static="false" final="false" visibility="public"
10116      deprecated="not deprecated">
10117    </constructor>
10118    <method name="isNoArgConstructorRequired" return="boolean"
10119      abstract="false" native="false" synchronized="false"
10120      static="false" final="false" visibility="public"
10121      deprecated="not deprecated">
10122    </method>
10123    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
10124      abstract="false" native="false" synchronized="false"
10125      static="false" final="false" visibility="public"
10126      deprecated="not deprecated">
10127      <param name="name" type="java.lang.String"/>
10128      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10129    </method>
10130    <method name="buildBean" return="java.lang.Object"
10131      abstract="false" native="false" synchronized="false"
10132      static="false" final="false" visibility="public"
10133      deprecated="not deprecated">
10134      <param name="clazz" type="java.lang.Class"/>
10135      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
10136    </method>
10137    <method name="buildInterceptor" return="Interceptor"
10138      abstract="false" native="false" synchronized="false"
10139      static="false" final="false" visibility="public"
10140      deprecated="not deprecated">
10141      <param name="interceptorConfig" type="InterceptorConfig"/>
10142      <param name="interceptorRefParams" type="java.util.Map"/>
10143      <exception name="ConfigurationException" type="ConfigurationException"/>
10144    </method>
10145    <doc>
10146    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
10147 GS2 and fixes several bugs.
10148
10149 @author dhanji@gmail.com
10150 @author benmccann.com]]>
10151    </doc>
10152  </class>
10153  <!-- end class com.google.inject.struts2.Struts2Factory -->
10154  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
10155  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
10156    abstract="false"
10157    static="false" final="false" visibility="public"
10158    deprecated="not deprecated">
10159    <constructor name="Struts2GuicePluginModule"
10160      static="false" final="false" visibility="public"
10161      deprecated="not deprecated">
10162    </constructor>
10163    <method name="configure"
10164      abstract="false" native="false" synchronized="false"
10165      static="false" final="false" visibility="protected"
10166      deprecated="not deprecated">
10167    </method>
10168    <doc>
10169    <![CDATA[Initializes the Struts 2 Guice Plugin.
10170 Must be added to the injector returned by
10171     {@link GuiceServletContextListener.getInjector()}.
10172
10173 @author benmccann.com]]>
10174    </doc>
10175  </class>
10176  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
10177</package>
10178<package name="com.google.inject.throwingproviders">
10179  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
10180  <interface name="CheckedProvider"    abstract="true"
10181    static="false" final="false" visibility="public"
10182    deprecated="not deprecated">
10183    <method name="get" return="T"
10184      abstract="true" native="false" synchronized="false"
10185      static="false" final="false" visibility="public"
10186      deprecated="not deprecated">
10187      <exception name="Exception" type="java.lang.Exception"/>
10188    </method>
10189    <doc>
10190    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
10191 a checked Exception. Users may not inject {@code T} directly.
10192
10193 <p>This interface must be extended to use application-specific exception types.
10194 Such subinterfaces may not define new methods, but may narrow the exception type.
10195 <pre>
10196 public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
10197   T get() throws CustomExceptionOne, CustomExceptionTwo;
10198 }
10199 </pre>
10200
10201 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
10202 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
10203 will invoked at most once within each scope.
10204
10205 @since 3.0]]>
10206    </doc>
10207  </interface>
10208  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
10209  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
10210  <class name="CheckedProvides"    abstract="true"
10211    static="false" final="false" visibility="public"
10212    deprecated="not deprecated">
10213    <implements name="java.lang.annotation.Annotation"/>
10214    <doc>
10215    <![CDATA[Annotates methods of a {@link Module} to create a {@link CheckedProvider}
10216 method binding that can throw exceptions. The method's return type is bound
10217 to a {@link CheckedProvider} that can be injected. Guice will pass
10218 dependencies to the method as parameters. Install {@literal @}CheckedProvides
10219 methods by using
10220 {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
10221 module where the methods are declared.
10222
10223 @author sameb@google.com (Sam Berlin)
10224 @since 3.0]]>
10225    </doc>
10226  </class>
10227  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
10228  <!-- start class com.google.inject.throwingproviders.ThrowingInject -->
10229  <class name="ThrowingInject"    abstract="true"
10230    static="false" final="false" visibility="public"
10231    deprecated="not deprecated">
10232    <implements name="java.lang.annotation.Annotation"/>
10233    <doc>
10234    <![CDATA[A version of {@literal @}{@link Inject} designed for ThrowingProviders.  Use by:
10235 <pre><code>ThrowingProviderBinder.create(binder())
10236    .bind(RemoteProvider.class, Customer.class)
10237    .providing(CustomerImpl.class);
10238 </code></pre>
10239 where CustomerImpl has a constructor annotated with ThrowingInject.
10240
10241 @author sameb@google.com (Sam Berlin)]]>
10242    </doc>
10243  </class>
10244  <!-- end class com.google.inject.throwingproviders.ThrowingInject -->
10245  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
10246  <interface name="ThrowingProvider"    abstract="true"
10247    static="false" final="false" visibility="public"
10248    deprecated="use {@link CheckedProvider} instead.">
10249    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
10250    <method name="get" return="T"
10251      abstract="true" native="false" synchronized="false"
10252      static="false" final="false" visibility="public"
10253      deprecated="not deprecated">
10254      <exception name="Exception" type="java.lang.Exception"/>
10255    </method>
10256    <doc>
10257    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
10258 a checked Exception. Users may not inject {@code T} directly.
10259
10260 <p>This interface must be extended to use application-specific exception types.
10261 Such subinterfaces may not define new methods:
10262 <pre>
10263 public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
10264 </pre>
10265
10266 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
10267 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
10268 will invoked at most once within each scope.
10269
10270 @author jmourits@google.com (Jerome Mourits)
10271 @author jessewilson@google.com (Jesse Wilson)
10272 @deprecated use {@link CheckedProvider} instead.]]>
10273    </doc>
10274  </interface>
10275  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
10276  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
10277  <class name="ThrowingProviderBinder" extends="java.lang.Object"
10278    abstract="false"
10279    static="false" final="false" visibility="public"
10280    deprecated="not deprecated">
10281    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
10282      abstract="false" native="false" synchronized="false"
10283      static="true" final="false" visibility="public"
10284      deprecated="not deprecated">
10285      <param name="binder" type="com.google.inject.Binder"/>
10286    </method>
10287    <method name="forModule" return="com.google.inject.Module"
10288      abstract="false" native="false" synchronized="false"
10289      static="true" final="false" visibility="public"
10290      deprecated="not deprecated">
10291      <param name="module" type="com.google.inject.Module"/>
10292      <doc>
10293      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
10294
10295 @since 3.0]]>
10296      </doc>
10297    </method>
10298    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, ?&gt;"
10299      abstract="false" native="false" synchronized="false"
10300      static="false" final="false" visibility="public"
10301      deprecated="Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.">
10302      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
10303      <param name="clazz" type="java.lang.reflect.Type"/>
10304      <doc>
10305      <![CDATA[@deprecated Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.]]>
10306      </doc>
10307    </method>
10308    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
10309      abstract="false" native="false" synchronized="false"
10310      static="false" final="false" visibility="public"
10311      deprecated="not deprecated">
10312      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
10313      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
10314    </method>
10315    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
10316      abstract="false" native="false" synchronized="false"
10317      static="false" final="false" visibility="public"
10318      deprecated="not deprecated">
10319      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
10320      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
10321    </method>
10322    <doc>
10323    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
10324
10325 <p>You can use a fluent API and custom providers:
10326 <pre><code>ThrowingProviderBinder.create(binder())
10327    .bind(RemoteProvider.class, Customer.class)
10328    .to(RemoteCustomerProvider.class)
10329    .in(RequestScope.class);
10330 </code></pre>
10331 or, you can use throwing provider methods:
10332 <pre><code>class MyModule extends AbstractModule {
10333   configure() {
10334     ThrowingProviderBinder.install(this, binder());
10335   }
10336
10337   {@literal @}CheckedProvides(RemoteProvider.class)
10338   {@literal @}RequestScope
10339   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
10340     return creator.getCustomerOrThrow();
10341   }
10342 }
10343 </code></pre>
10344 You also can declare that a CheckedProvider construct
10345 a particular class whose constructor throws an exception:
10346 <pre><code>ThrowingProviderBinder.create(binder())
10347    .bind(RemoteProvider.class, Customer.class)
10348    .providing(CustomerImpl.class)
10349    .in(RequestScope.class);
10350 </code></pre>
10351
10352 @author jmourits@google.com (Jerome Mourits)
10353 @author jessewilson@google.com (Jesse Wilson)
10354 @author sameb@google.com (Sam Berlin)]]>
10355    </doc>
10356  </class>
10357  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
10358  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
10359  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
10360    abstract="false"
10361    static="false" final="false" visibility="public"
10362    deprecated="not deprecated">
10363    <constructor name="SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
10364      static="false" final="false" visibility="public"
10365      deprecated="not deprecated">
10366    </constructor>
10367    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
10368      abstract="false" native="false" synchronized="false"
10369      static="false" final="false" visibility="public"
10370      deprecated="not deprecated">
10371      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
10372    </method>
10373    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
10374      abstract="false" native="false" synchronized="false"
10375      static="false" final="false" visibility="public"
10376      deprecated="not deprecated">
10377      <param name="annotation" type="java.lang.annotation.Annotation"/>
10378    </method>
10379    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
10380      abstract="false" native="false" synchronized="false"
10381      static="false" final="false" visibility="public"
10382      deprecated="not deprecated">
10383      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
10384    </method>
10385    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
10386      abstract="false" native="false" synchronized="false"
10387      static="false" final="false" visibility="public"
10388      deprecated="not deprecated">
10389      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
10390    </method>
10391    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
10392      abstract="false" native="false" synchronized="false"
10393      static="false" final="false" visibility="public"
10394      deprecated="not deprecated">
10395      <param name="cxtorClass" type="java.lang.Class&lt;? extends T&gt;"/>
10396    </method>
10397    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
10398      abstract="false" native="false" synchronized="false"
10399      static="false" final="false" visibility="public"
10400      deprecated="not deprecated">
10401      <param name="cxtorLiteral" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
10402    </method>
10403    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
10404      abstract="false" native="false" synchronized="false"
10405      static="false" final="false" visibility="public"
10406      deprecated="not deprecated">
10407      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
10408    </method>
10409  </class>
10410  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
10411</package>
10412<package name="com.google.inject.tools.jmx">
10413  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
10414  <interface name="ManagedBindingMBean"    abstract="true"
10415    static="false" final="false" visibility="public"
10416    deprecated="not deprecated">
10417    <method name="getSource" return="java.lang.String"
10418      abstract="true" native="false" synchronized="false"
10419      static="false" final="false" visibility="public"
10420      deprecated="not deprecated">
10421      <doc>
10422      <![CDATA[Gets the source of this binding.]]>
10423      </doc>
10424    </method>
10425    <method name="getProvider" return="java.lang.String"
10426      abstract="true" native="false" synchronized="false"
10427      static="false" final="false" visibility="public"
10428      deprecated="not deprecated">
10429      <doc>
10430      <![CDATA[Gets the provider to which this binding is bound.]]>
10431      </doc>
10432    </method>
10433    <method name="getKey" return="java.lang.String"
10434      abstract="true" native="false" synchronized="false"
10435      static="false" final="false" visibility="public"
10436      deprecated="not deprecated">
10437      <doc>
10438      <![CDATA[Gets the binding key.]]>
10439      </doc>
10440    </method>
10441    <doc>
10442    <![CDATA[JMX interface to bindings.
10443
10444 @author crazybob@google.com (Bob Lee)]]>
10445    </doc>
10446  </interface>
10447  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
10448  <!-- start class com.google.inject.tools.jmx.Manager -->
10449  <class name="Manager" extends="java.lang.Object"
10450    abstract="false"
10451    static="false" final="false" visibility="public"
10452    deprecated="not deprecated">
10453    <constructor name="Manager"
10454      static="false" final="false" visibility="public"
10455      deprecated="not deprecated">
10456    </constructor>
10457    <method name="manage"
10458      abstract="false" native="false" synchronized="false"
10459      static="true" final="false" visibility="public"
10460      deprecated="not deprecated">
10461      <param name="domain" type="java.lang.String"/>
10462      <param name="injector" type="com.google.inject.Injector"/>
10463      <doc>
10464      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
10465 Consider using the name of your root {@link Module} class as the domain.]]>
10466      </doc>
10467    </method>
10468    <method name="manage"
10469      abstract="false" native="false" synchronized="false"
10470      static="true" final="false" visibility="public"
10471      deprecated="not deprecated">
10472      <param name="server" type="javax.management.MBeanServer"/>
10473      <param name="domain" type="java.lang.String"/>
10474      <param name="injector" type="com.google.inject.Injector"/>
10475      <doc>
10476      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
10477 Consider using the name of your root {@link Module} class as the domain.]]>
10478      </doc>
10479    </method>
10480    <method name="main"
10481      abstract="false" native="false" synchronized="false"
10482      static="true" final="false" visibility="public"
10483      deprecated="not deprecated">
10484      <param name="args" type="java.lang.String[]"/>
10485      <exception name="Exception" type="java.lang.Exception"/>
10486      <doc>
10487      <![CDATA[Run with no arguments for usage instructions.]]>
10488      </doc>
10489    </method>
10490    <doc>
10491    <![CDATA[Provides a JMX interface to Guice.
10492
10493 @author crazybob@google.com (Bob Lee)]]>
10494    </doc>
10495  </class>
10496  <!-- end class com.google.inject.tools.jmx.Manager -->
10497</package>
10498<package name="com.google.inject.util">
10499  <!-- start class com.google.inject.util.Modules -->
10500  <class name="Modules" extends="java.lang.Object"
10501    abstract="false"
10502    static="false" final="true" visibility="public"
10503    deprecated="not deprecated">
10504    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10505      abstract="false" native="false" synchronized="false"
10506      static="true" final="false" visibility="public"
10507      deprecated="not deprecated">
10508      <param name="modules" type="com.google.inject.Module[]"/>
10509      <doc>
10510      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10511 modules. If a key is bound in both sets of modules, only the binding from the override modules
10512 is kept. If a single {@link PrivateModule} is supplied or all elements are from
10513 a single {@link PrivateBinder}, then this will overwrite the private bindings.
10514 Otherwise, private bindings will not be overwritten unless they are exposed.
10515 This can be used to replace the bindings of a production module with test bindings:
10516 <pre>
10517 Module functionalTestModule
10518     = Modules.override(new ProductionModule()).with(new TestModule());
10519 </pre>
10520
10521 <p>Prefer to write smaller modules that can be reused and tested without overrides.
10522
10523 @param modules the modules whose bindings are open to be overridden]]>
10524      </doc>
10525    </method>
10526    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10527      abstract="false" native="false" synchronized="false"
10528      static="true" final="false" visibility="public"
10529      deprecated="not deprecated">
10530      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10531      <doc>
10532      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10533 modules. If a key is bound in both sets of modules, only the binding from the override modules
10534 is kept. If a single {@link PrivateModule} is supplied or all elements are from
10535 a single {@link PrivateBinder}, then this will overwrite the private bindings.
10536 Otherwise, private bindings will not be overwritten unless they are exposed.
10537 This can be used to replace the bindings of a production module with test bindings:
10538 <pre>
10539 Module functionalTestModule
10540     = Modules.override(getProductionModules()).with(getTestModules());
10541 </pre>
10542
10543 <p>Prefer to write smaller modules that can be reused and tested without overrides.
10544
10545 @param modules the modules whose bindings are open to be overridden]]>
10546      </doc>
10547    </method>
10548    <method name="combine" return="com.google.inject.Module"
10549      abstract="false" native="false" synchronized="false"
10550      static="true" final="false" visibility="public"
10551      deprecated="not deprecated">
10552      <param name="modules" type="com.google.inject.Module[]"/>
10553      <doc>
10554      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10555      </doc>
10556    </method>
10557    <method name="combine" return="com.google.inject.Module"
10558      abstract="false" native="false" synchronized="false"
10559      static="true" final="false" visibility="public"
10560      deprecated="not deprecated">
10561      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10562      <doc>
10563      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10564      </doc>
10565    </method>
10566    <field name="EMPTY_MODULE" type="com.google.inject.Module"
10567      transient="false" volatile="false"
10568      static="true" final="true" visibility="public"
10569      deprecated="not deprecated">
10570    </field>
10571    <doc>
10572    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
10573
10574 @author jessewilson@google.com (Jesse Wilson)
10575 @since 2.0]]>
10576    </doc>
10577  </class>
10578  <!-- end class com.google.inject.util.Modules -->
10579  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10580  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
10581    static="true" final="false" visibility="public"
10582    deprecated="not deprecated">
10583    <method name="with" return="com.google.inject.Module"
10584      abstract="true" native="false" synchronized="false"
10585      static="false" final="false" visibility="public"
10586      deprecated="not deprecated">
10587      <param name="overrides" type="com.google.inject.Module[]"/>
10588      <doc>
10589      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10590      </doc>
10591    </method>
10592    <method name="with" return="com.google.inject.Module"
10593      abstract="true" native="false" synchronized="false"
10594      static="false" final="false" visibility="public"
10595      deprecated="not deprecated">
10596      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10597      <doc>
10598      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10599      </doc>
10600    </method>
10601    <doc>
10602    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10603    </doc>
10604  </interface>
10605  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10606  <!-- start class com.google.inject.util.Providers -->
10607  <class name="Providers" extends="java.lang.Object"
10608    abstract="false"
10609    static="false" final="true" visibility="public"
10610    deprecated="not deprecated">
10611    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
10612      abstract="false" native="false" synchronized="false"
10613      static="true" final="false" visibility="public"
10614      deprecated="not deprecated">
10615      <param name="instance" type="T"/>
10616      <doc>
10617      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
10618 be necessary to use in your application, but is helpful for several types
10619 of unit tests.
10620
10621 @param instance the instance that should always be provided.  This is also
10622     permitted to be null, to enable aggressive testing, although in real
10623     life a Guice-supplied Provider will never return null.]]>
10624      </doc>
10625    </method>
10626    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
10627      abstract="false" native="false" synchronized="false"
10628      static="true" final="false" visibility="public"
10629      deprecated="not deprecated">
10630      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
10631      <doc>
10632      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
10633 JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
10634 since Guice providers directly implement the JSR-330 interface.
10635
10636 @since 3.0]]>
10637      </doc>
10638    </method>
10639    <doc>
10640    <![CDATA[Static utility methods for creating and working with instances of
10641 {@link Provider}.
10642
10643 @author Kevin Bourrillion (kevinb9n@gmail.com)
10644 @since 2.0]]>
10645    </doc>
10646  </class>
10647  <!-- end class com.google.inject.util.Providers -->
10648  <!-- start class com.google.inject.util.Types -->
10649  <class name="Types" extends="java.lang.Object"
10650    abstract="false"
10651    static="false" final="true" visibility="public"
10652    deprecated="not deprecated">
10653    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
10654      abstract="false" native="false" synchronized="false"
10655      static="true" final="false" visibility="public"
10656      deprecated="not deprecated">
10657      <param name="rawType" type="java.lang.reflect.Type"/>
10658      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10659      <doc>
10660      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10661 {@code rawType}. The returned type does not have an owner type.
10662
10663 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10664      </doc>
10665    </method>
10666    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
10667      abstract="false" native="false" synchronized="false"
10668      static="true" final="false" visibility="public"
10669      deprecated="not deprecated">
10670      <param name="ownerType" type="java.lang.reflect.Type"/>
10671      <param name="rawType" type="java.lang.reflect.Type"/>
10672      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10673      <doc>
10674      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10675 {@code rawType} and enclosed by {@code ownerType}.
10676
10677 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10678      </doc>
10679    </method>
10680    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
10681      abstract="false" native="false" synchronized="false"
10682      static="true" final="false" visibility="public"
10683      deprecated="not deprecated">
10684      <param name="componentType" type="java.lang.reflect.Type"/>
10685      <doc>
10686      <![CDATA[Returns an array type whose elements are all instances of
10687 {@code componentType}.
10688
10689 @return a {@link java.io.Serializable serializable} generic array type.]]>
10690      </doc>
10691    </method>
10692    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
10693      abstract="false" native="false" synchronized="false"
10694      static="true" final="false" visibility="public"
10695      deprecated="not deprecated">
10696      <param name="bound" type="java.lang.reflect.Type"/>
10697      <doc>
10698      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
10699 For example, if {@code bound} is {@code CharSequence.class}, this returns
10700 {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
10701 this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
10702      </doc>
10703    </method>
10704    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
10705      abstract="false" native="false" synchronized="false"
10706      static="true" final="false" visibility="public"
10707      deprecated="not deprecated">
10708      <param name="bound" type="java.lang.reflect.Type"/>
10709      <doc>
10710      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
10711 example, if {@code bound} is {@code String.class}, this returns {@code ?
10712 super String}.]]>
10713      </doc>
10714    </method>
10715    <method name="listOf" return="java.lang.reflect.ParameterizedType"
10716      abstract="false" native="false" synchronized="false"
10717      static="true" final="false" visibility="public"
10718      deprecated="not deprecated">
10719      <param name="elementType" type="java.lang.reflect.Type"/>
10720      <doc>
10721      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
10722 {@code elementType}.
10723
10724 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10725      </doc>
10726    </method>
10727    <method name="setOf" return="java.lang.reflect.ParameterizedType"
10728      abstract="false" native="false" synchronized="false"
10729      static="true" final="false" visibility="public"
10730      deprecated="not deprecated">
10731      <param name="elementType" type="java.lang.reflect.Type"/>
10732      <doc>
10733      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
10734 {@code elementType}.
10735
10736 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10737      </doc>
10738    </method>
10739    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
10740      abstract="false" native="false" synchronized="false"
10741      static="true" final="false" visibility="public"
10742      deprecated="not deprecated">
10743      <param name="keyType" type="java.lang.reflect.Type"/>
10744      <param name="valueType" type="java.lang.reflect.Type"/>
10745      <doc>
10746      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
10747 {@code keyType} and whose values are of type {@code valueType}.
10748
10749 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10750      </doc>
10751    </method>
10752    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
10753      abstract="false" native="false" synchronized="false"
10754      static="true" final="false" visibility="public"
10755      deprecated="not deprecated">
10756      <param name="providedType" type="java.lang.reflect.Type"/>
10757      <doc>
10758      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
10759 {@code elementType}.
10760
10761 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10762      </doc>
10763    </method>
10764    <doc>
10765    <![CDATA[Static methods for working with types.
10766
10767 @author crazybob@google.com (Bob Lee)
10768 @since 2.0]]>
10769    </doc>
10770  </class>
10771  <!-- end class com.google.inject.util.Types -->
10772</package>
10773
10774</api>
10775