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 24 21:41:19 EDT 2011 -->
5
6<api
7  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
8  xsi:noNamespaceSchemaLocation='api.xsd'
9  name="3.0"
10  jdversion="1.1.1">
11
12<!--  Command line arguments =  -doclet jdiff.JDiff -docletpath C:\Documents and Settings\Sam Berlin\workspace\guice\lib\build\jdiff\jdiff.jar;C:\Documents and Settings\Sam Berlin\workspace\guice\lib\build\jdiff\xerces.jar -classpath C:\Documents and Settings\Sam Berlin\workspace\guice\lib\javax.inject.jar;C:\Documents and Settings\Sam Berlin\workspace\guice\lib\aopalliance.jar -apidir build/docs/latest-api-diffs -apiname 3.0 -->
13<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    <doc>
262    <![CDATA[A support class for {@link Module}s which reduces repetition and results in
263 a more readable configuration. Simply extend this class, implement {@link
264 #configure()}, and call the inherited methods which mirror those found in
265 {@link Binder}. For example:
266
267 <pre>
268 public class MyModule extends AbstractModule {
269   protected void configure() {
270     bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
271     bind(CreditCardPaymentService.class);
272     bind(PaymentService.class).to(CreditCardPaymentService.class);
273     bindConstant().annotatedWith(Names.named("port")).to(8080);
274   }
275 }
276 </pre>
277
278 @author crazybob@google.com (Bob Lee)]]>
279    </doc>
280  </class>
281  <!-- end class com.google.inject.AbstractModule -->
282  <!-- start interface com.google.inject.Binder -->
283  <interface name="Binder"    abstract="true"
284    static="false" final="false" visibility="public"
285    deprecated="not deprecated">
286    <method name="bindInterceptor"
287      abstract="false" native="false" synchronized="false"
288      static="false" final="false" visibility="public"
289      deprecated="not deprecated">
290      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
291      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
292      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
293      <doc>
294      <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
295 eligible for interception if:
296
297 <ul>
298  <li>Guice created the instance the method is on</li>
299  <li>Neither the enclosing type nor the method is final</li>
300  <li>And the method is package-private, protected, or public</li>
301 </ul>
302
303 @param classMatcher matches classes the interceptor should apply to. For
304     example: {@code only(Runnable.class)}.
305 @param methodMatcher matches methods the interceptor should apply to. For
306     example: {@code annotatedWith(Transactional.class)}.
307 @param interceptors to bind]]>
308      </doc>
309    </method>
310    <method name="bindScope"
311      abstract="false" native="false" synchronized="false"
312      static="false" final="false" visibility="public"
313      deprecated="not deprecated">
314      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
315      <param name="scope" type="com.google.inject.Scope"/>
316      <doc>
317      <![CDATA[Binds a scope to an annotation.]]>
318      </doc>
319    </method>
320    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
321      abstract="false" native="false" synchronized="false"
322      static="false" final="false" visibility="public"
323      deprecated="not deprecated">
324      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
325      <doc>
326      <![CDATA[See the EDSL examples at {@link Binder}.]]>
327      </doc>
328    </method>
329    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
330      abstract="false" native="false" synchronized="false"
331      static="false" final="false" visibility="public"
332      deprecated="not deprecated">
333      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
334      <doc>
335      <![CDATA[See the EDSL examples at {@link Binder}.]]>
336      </doc>
337    </method>
338    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
339      abstract="false" native="false" synchronized="false"
340      static="false" final="false" visibility="public"
341      deprecated="not deprecated">
342      <param name="type" type="java.lang.Class&lt;T&gt;"/>
343      <doc>
344      <![CDATA[See the EDSL examples at {@link Binder}.]]>
345      </doc>
346    </method>
347    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
348      abstract="false" native="false" synchronized="false"
349      static="false" final="false" visibility="public"
350      deprecated="not deprecated">
351      <doc>
352      <![CDATA[See the EDSL examples at {@link Binder}.]]>
353      </doc>
354    </method>
355    <method name="requestInjection"
356      abstract="false" native="false" synchronized="false"
357      static="false" final="false" visibility="public"
358      deprecated="not deprecated">
359      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
360      <param name="instance" type="T"/>
361      <doc>
362      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
363 and methods of the given object.
364
365 @param type of instance
366 @param instance for which members will be injected
367 @since 2.0]]>
368      </doc>
369    </method>
370    <method name="requestInjection"
371      abstract="false" native="false" synchronized="false"
372      static="false" final="false" visibility="public"
373      deprecated="not deprecated">
374      <param name="instance" type="java.lang.Object"/>
375      <doc>
376      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
377 and methods of the given object.
378
379 @param instance for which members will be injected
380 @since 2.0]]>
381      </doc>
382    </method>
383    <method name="requestStaticInjection"
384      abstract="false" native="false" synchronized="false"
385      static="false" final="false" visibility="public"
386      deprecated="not deprecated">
387      <param name="types" type="java.lang.Class[]"/>
388      <doc>
389      <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
390 and methods in the given classes.
391
392 @param types for which static members will be injected]]>
393      </doc>
394    </method>
395    <method name="install"
396      abstract="false" native="false" synchronized="false"
397      static="false" final="false" visibility="public"
398      deprecated="not deprecated">
399      <param name="module" type="com.google.inject.Module"/>
400      <doc>
401      <![CDATA[Uses the given module to configure more bindings.]]>
402      </doc>
403    </method>
404    <method name="currentStage" return="com.google.inject.Stage"
405      abstract="false" native="false" synchronized="false"
406      static="false" final="false" visibility="public"
407      deprecated="not deprecated">
408      <doc>
409      <![CDATA[Gets the current stage.]]>
410      </doc>
411    </method>
412    <method name="addError"
413      abstract="false" native="false" synchronized="false"
414      static="false" final="false" visibility="public"
415      deprecated="not deprecated">
416      <param name="message" type="java.lang.String"/>
417      <param name="arguments" type="java.lang.Object[]"/>
418      <doc>
419      <![CDATA[Records an error message which will be presented to the user at a later
420 time. Unlike throwing an exception, this enable us to continue
421 configuring the Injector and discover more errors. Uses {@link
422 String#format(String, Object[])} to insert the arguments into the
423 message.]]>
424      </doc>
425    </method>
426    <method name="addError"
427      abstract="false" native="false" synchronized="false"
428      static="false" final="false" visibility="public"
429      deprecated="not deprecated">
430      <param name="t" type="java.lang.Throwable"/>
431      <doc>
432      <![CDATA[Records an exception, the full details of which will be logged, and the
433 message of which will be presented to the user at a later
434 time. If your Module calls something that you worry may fail, you should
435 catch the exception and pass it into this.]]>
436      </doc>
437    </method>
438    <method name="addError"
439      abstract="false" native="false" synchronized="false"
440      static="false" final="false" visibility="public"
441      deprecated="not deprecated">
442      <param name="message" type="com.google.inject.spi.Message"/>
443      <doc>
444      <![CDATA[Records an error message to be presented to the user at a later time.
445
446 @since 2.0]]>
447      </doc>
448    </method>
449    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
450      abstract="false" native="false" synchronized="false"
451      static="false" final="false" visibility="public"
452      deprecated="not deprecated">
453      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
454      <doc>
455      <![CDATA[Returns the provider used to obtain instances for the given injection key.
456 The returned provider will not be valid until the {@link Injector} has been
457 created. The provider will throw an {@code IllegalStateException} if you
458 try to use it beforehand.
459
460 @since 2.0]]>
461      </doc>
462    </method>
463    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
464      abstract="false" native="false" synchronized="false"
465      static="false" final="false" visibility="public"
466      deprecated="not deprecated">
467      <param name="type" type="java.lang.Class&lt;T&gt;"/>
468      <doc>
469      <![CDATA[Returns the provider used to obtain instances for the given injection type.
470 The returned provider will not be valid until the {@link Injector} has been
471 created. The provider will throw an {@code IllegalStateException} if you
472 try to use it beforehand.
473
474 @since 2.0]]>
475      </doc>
476    </method>
477    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
478      abstract="false" native="false" synchronized="false"
479      static="false" final="false" visibility="public"
480      deprecated="not deprecated">
481      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
482      <doc>
483      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
484 of the given type {@code T}. The returned members injector will not be valid until the main
485 {@link Injector} has been created. The members injector will throw an {@code
486 IllegalStateException} if you try to use it beforehand.
487
488 @param typeLiteral type to get members injector for
489 @since 2.0]]>
490      </doc>
491    </method>
492    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
493      abstract="false" native="false" synchronized="false"
494      static="false" final="false" visibility="public"
495      deprecated="not deprecated">
496      <param name="type" type="java.lang.Class&lt;T&gt;"/>
497      <doc>
498      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
499 of the given type {@code T}. The returned members injector will not be valid until the main
500 {@link Injector} has been created. The members injector will throw an {@code
501 IllegalStateException} if you try to use it beforehand.
502
503 @param type type to get members injector for
504 @since 2.0]]>
505      </doc>
506    </method>
507    <method name="convertToTypes"
508      abstract="false" native="false" synchronized="false"
509      static="false" final="false" visibility="public"
510      deprecated="not deprecated">
511      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
512      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
513      <doc>
514      <![CDATA[Binds a type converter. The injector will use the given converter to
515 convert string constants to matching types as needed.
516
517 @param typeMatcher matches types the converter can handle
518 @param converter converts values
519 @since 2.0]]>
520      </doc>
521    </method>
522    <method name="bindListener"
523      abstract="false" native="false" synchronized="false"
524      static="false" final="false" visibility="public"
525      deprecated="not deprecated">
526      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
527      <param name="listener" type="com.google.inject.spi.TypeListener"/>
528      <doc>
529      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
530 injectable types matched by the given type matcher.
531
532 @param typeMatcher that matches injectable types the listener should be notified of
533 @param listener for injectable types matched by typeMatcher
534 @since 2.0]]>
535      </doc>
536    </method>
537    <method name="withSource" return="com.google.inject.Binder"
538      abstract="false" native="false" synchronized="false"
539      static="false" final="false" visibility="public"
540      deprecated="not deprecated">
541      <param name="source" type="java.lang.Object"/>
542      <doc>
543      <![CDATA[Returns a binder that uses {@code source} as the reference location for
544 configuration errors. This is typically a {@link StackTraceElement}
545 for {@code .java} source but it could any binding source, such as the
546 path to a {@code .properties} file.
547
548 @param source any object representing the source location and has a
549     concise {@link Object#toString() toString()} value
550 @return a binder that shares its configuration with this binder
551 @since 2.0]]>
552      </doc>
553    </method>
554    <method name="skipSources" return="com.google.inject.Binder"
555      abstract="false" native="false" synchronized="false"
556      static="false" final="false" visibility="public"
557      deprecated="not deprecated">
558      <param name="classesToSkip" type="java.lang.Class[]"/>
559      <doc>
560      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
561 calling code. The caller's {@link StackTraceElement} is used to locate
562 the source of configuration errors.
563
564 @param classesToSkip library classes that create bindings on behalf of
565      their clients.
566 @return a binder that shares its configuration with this binder.
567 @since 2.0]]>
568      </doc>
569    </method>
570    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
571      abstract="false" native="false" synchronized="false"
572      static="false" final="false" visibility="public"
573      deprecated="not deprecated">
574      <doc>
575      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
576 binder can be used to add and configuration information in this environment. See {@link
577 PrivateModule} for details.
578
579 @return a binder that inherits configuration from this binder. Only exposed configuration on
580      the returned binder will be visible to this binder.
581 @since 2.0]]>
582      </doc>
583    </method>
584    <method name="requireExplicitBindings"
585      abstract="false" native="false" synchronized="false"
586      static="false" final="false" visibility="public"
587      deprecated="not deprecated">
588      <doc>
589      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
590 be injected. Classes that are not explicitly bound in a module cannot be
591 injected. Bindings created through a linked binding (
592 <code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
593 implicit binding (<code>FooImpl</code>) cannot be directly injected unless
594 it is also explicitly bound (<code>bind(FooImpl.class)</code>).
595 <p>
596 Tools can still retrieve bindings for implicit bindings (bindings created
597 through a linked binding) if explicit bindings are required, however
598 {@link Binding#getProvider} will fail.
599 <p>
600 By default, explicit bindings are not required.
601 <p>
602 If a parent injector requires explicit bindings, then all child injectors
603 (and private modules within that injector) also require explicit bindings.
604 If a parent does not require explicit bindings, a child injector or private
605 module may optionally declare itself as requiring explicit bindings. If it
606 does, the behavior is limited only to that child or any grandchildren. No
607 siblings of the child will require explicit bindings.
608 <p>
609 If the parent did not require explicit bindings but the child does, it is
610 possible that a linked binding in the child may add a JIT binding to the
611 parent. The child will not be allowed to reference the target binding
612 directly, but the parent and other children of the parent may be able to.
613 
614 @since 3.0]]>
615      </doc>
616    </method>
617    <method name="disableCircularProxies"
618      abstract="false" native="false" synchronized="false"
619      static="false" final="false" visibility="public"
620      deprecated="not deprecated">
621      <doc>
622      <![CDATA[Prevents Guice from constructing a {@link Proxy} when a circular dependency
623 is found.  By default, circular proxies are not disabled.
624 <p>
625 If a parent injector disables circular proxies, then all child injectors
626 (and private modules within that injector) also disable circular proxies.
627 If a parent does not disable circular proxies, a child injector or private
628 module may optionally declare itself as disabling circular proxies. If it
629 does, the behavior is limited only to that child or any grandchildren. No
630 siblings of the child will disable circular proxies.
631 
632 @since 3.0]]>
633      </doc>
634    </method>
635    <doc>
636    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
637 used to create an {@link Injector}. Guice provides this object to your
638 application's {@link Module} implementors so they may each contribute
639 their own bindings and other registrations.
640
641 <h3>The Guice Binding EDSL</h3>
642
643 Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
644 create bindings simply and readably.  This approach is great for overall
645 usability, but it does come with a small cost: <b>it is difficult to
646 learn how to use the Binding EDSL by reading
647 method-level javadocs</b>.  Instead, you should consult the series of
648 examples below.  To save space, these examples omit the opening
649 {@code binder}, just as you will if your module extends
650 {@link AbstractModule}.
651
652 <pre>
653     bind(ServiceImpl.class);</pre>
654
655 This statement does essentially nothing; it "binds the {@code ServiceImpl}
656 class to itself" and does not change Guice's default behavior.  You may still
657 want to use this if you prefer your {@link Module} class to serve as an
658 explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
659 Guice may be unable to validate a binding at injector creation time unless it
660 is given explicitly.
661
662 <pre>
663     bind(Service.class).to(ServiceImpl.class);</pre>
664
665 Specifies that a request for a {@code Service} instance with no binding
666 annotations should be treated as if it were a request for a
667 {@code ServiceImpl} instance. This <i>overrides</i> the function of any
668 {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
669 annotations found on {@code Service}, since Guice will have already
670 "moved on" to {@code ServiceImpl} before it reaches the point when it starts
671 looking for these annotations.
672
673 <pre>
674     bind(Service.class).toProvider(ServiceProvider.class);</pre>
675
676 In this example, {@code ServiceProvider} must extend or implement
677 {@code Provider<Service>}. This binding specifies that Guice should resolve
678 an unannotated injection request for {@code Service} by first resolving an
679 instance of {@code ServiceProvider} in the regular way, then calling
680 {@link Provider#get get()} on the resulting Provider instance to obtain the
681 {@code Service} instance.
682
683 <p>The {@link Provider} you use here does not have to be a "factory"; that
684 is, a provider which always <i>creates</i> each instance it provides.
685 However, this is generally a good practice to follow.  You can then use
686 Guice's concept of {@link Scope scopes} to guide when creation should happen
687 -- "letting Guice work for you".
688
689 <pre>
690     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
691
692 Like the previous example, but only applies to injection requests that use
693 the binding annotation {@code @Red}.  If your module also includes bindings
694 for particular <i>values</i> of the {@code @Red} annotation (see below),
695 then this binding will serve as a "catch-all" for any values of {@code @Red}
696 that have no exact match in the bindings.
697 
698 <pre>
699     bind(ServiceImpl.class).in(Singleton.class);
700     // or, alternatively
701     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
702
703 Either of these statements places the {@code ServiceImpl} class into
704 singleton scope.  Guice will create only one instance of {@code ServiceImpl}
705 and will reuse it for all injection requests of this type.  Note that it is
706 still possible to bind another instance of {@code ServiceImpl} if the second
707 binding is qualified by an annotation as in the previous example.  Guice is
708 not overly concerned with <i>preventing</i> you from creating multiple
709 instances of your "singletons", only with <i>enabling</i> your application to
710 share only one instance if that's all you tell Guice you need.
711
712 <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
713 was specified with an annotation on the {@code ServiceImpl} class.
714 
715 <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
716 servlet-specific scopes available in
717 {@code com.google.inject.servlet.ServletScopes}, and your Modules can
718 contribute their own custom scopes for use here as well.
719
720 <pre>
721     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
722         .to(CreditCardPaymentService.class);</pre>
723
724 This admittedly odd construct is the way to bind a parameterized type. It
725 tells Guice how to honor an injection request for an element of type
726 {@code PaymentService<CreditCard>}. The class
727 {@code CreditCardPaymentService} must implement the
728 {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
729 inject a generic type, such as {@code Set<E>}; all type parameters must be
730 fully specified.
731
732 <pre>
733     bind(Service.class).toInstance(new ServiceImpl());
734     // or, alternatively
735     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
736
737 In this example, your module itself, <i>not Guice</i>, takes responsibility
738 for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
739 this single instance to fulfill all {@code Service} injection requests.  When
740 the {@link Injector} is created, it will automatically perform field
741 and method injection for this instance, but any injectable constructor on
742 {@code ServiceImpl} is simply ignored.  Note that using this approach results
743 in "eager loading" behavior that you can't control.
744
745 <pre>
746     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
747
748 Sets up a constant binding. Constant injections must always be annotated.
749 When a constant binding's value is a string, it is eligile for conversion to
750 all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
751 {@link Class#forName class literals}. Conversions for other types can be
752 configured using {@link #convertToTypes(Matcher, TypeConverter)
753 convertToTypes()}.
754
755 <pre>
756   {@literal @}Color("red") Color red; // A member variable (field)
757    . . .
758     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
759     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
760
761 If your binding annotation has parameters you can apply different bindings to
762 different specific values of your annotation.  Getting your hands on the
763 right instance of the annotation is a bit of a pain -- one approach, shown
764 above, is to apply a prototype annotation to a field in your module class, so
765 that you can read this annotation instance and give it to Guice.
766
767 <pre>
768     bind(Service.class)
769         .annotatedWith(Names.named("blue"))
770         .to(BlueService.class);</pre>
771
772 Differentiating by names is a common enough use case that we provided a
773 standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
774 Guice's library support, binding by name is quite easier than in the
775 arbitrary binding annotation case we just saw.  However, remember that these
776 names will live in a single flat namespace with all the other names used in
777 your application.
778
779 <pre>
780     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
781     bind(ServiceImpl.class)
782         .toConstructor(loneCtor);</pre>
783
784 In this example, we directly tell Guice which constructor to use in a concrete
785 class implementation. It means that we do not need to place {@literal @}Inject
786 on any of the constructors and that Guice treats the provided constructor as though
787 it were annotated so. It is useful for cases where you cannot modify existing
788 classes and is a bit simpler than using a {@link Provider}.
789
790 <p>The above list of examples is far from exhaustive.  If you can think of
791 how the concepts of one example might coexist with the concepts from another,
792 you can most likely weave the two together.  If the two concepts make no
793 sense with each other, you most likely won't be able to do it.  In a few
794 cases Guice will let something bogus slip by, and will then inform you of
795 the problems at runtime, as soon as you try to create your Injector.
796
797 <p>The other methods of Binder such as {@link #bindScope},
798 {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
799 {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
800 you can learn how to use these in the usual way, from the method
801 documentation.
802
803 @author crazybob@google.com (Bob Lee)
804 @author jessewilson@google.com (Jesse Wilson)
805 @author kevinb@google.com (Kevin Bourrillion)]]>
806    </doc>
807  </interface>
808  <!-- end interface com.google.inject.Binder -->
809  <!-- start interface com.google.inject.Binding -->
810  <interface name="Binding"    abstract="true"
811    static="false" final="false" visibility="public"
812    deprecated="not deprecated">
813    <implements name="com.google.inject.spi.Element"/>
814    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
815      abstract="false" native="false" synchronized="false"
816      static="false" final="false" visibility="public"
817      deprecated="not deprecated">
818      <doc>
819      <![CDATA[Returns the key for this binding.]]>
820      </doc>
821    </method>
822    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
823      abstract="false" native="false" synchronized="false"
824      static="false" final="false" visibility="public"
825      deprecated="not deprecated">
826      <doc>
827      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
828 binding.
829
830 @throws UnsupportedOperationException when invoked on a {@link Binding}
831      created via {@link com.google.inject.spi.Elements#getElements}. This
832      method is only supported on {@link Binding}s returned from an injector.]]>
833      </doc>
834    </method>
835    <method name="acceptTargetVisitor" return="V"
836      abstract="false" native="false" synchronized="false"
837      static="false" final="false" visibility="public"
838      deprecated="not deprecated">
839      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
840      <doc>
841      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
842
843 @param visitor to call back on
844 @since 2.0]]>
845      </doc>
846    </method>
847    <method name="acceptScopingVisitor" return="V"
848      abstract="false" native="false" synchronized="false"
849      static="false" final="false" visibility="public"
850      deprecated="not deprecated">
851      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
852      <doc>
853      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
854
855 @param visitor to call back on
856 @since 2.0]]>
857      </doc>
858    </method>
859    <doc>
860    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
861 type. This interface is part of the introspection API and is intended primarily for use by 
862 tools.
863
864 <p>Bindings are created in several ways:
865 <ul>
866     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
867         statements:
868 <pre>
869     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
870     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
871     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
872         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
873         default constructor.</li>
874     <li>By converting a bound instance to a different type.</li>
875     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
876 </ul>
877
878
879 <p>They exist on both modules and on injectors, and their behaviour is different for each:
880 <ul>
881     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
882         This is because the applicable scopes and interceptors may not be known until an injector
883         is created. From a tool's perspective, module bindings are like the injector's source
884         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
885     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
886         instances. From a tools' perspective, injector bindings are like reflection for an
887         injector. They have full runtime information, including the complete graph of injections
888         necessary to satisfy a binding.</li>
889 </ul>
890
891 @param <T> the bound type. The injected is always assignable to this type.
892
893 @author crazybob@google.com (Bob Lee)
894 @author jessewilson@google.com (Jesse Wilson)]]>
895    </doc>
896  </interface>
897  <!-- end interface com.google.inject.Binding -->
898  <!-- start class com.google.inject.BindingAnnotation -->
899  <class name="BindingAnnotation"    abstract="true"
900    static="false" final="false" visibility="public"
901    deprecated="not deprecated">
902    <implements name="java.lang.annotation.Annotation"/>
903    <doc>
904    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
905 may apply to a single injection point. You must also annotate binder
906 annotations with {@code @Retention(RUNTIME)}. For example:
907
908 <pre>
909   {@code @}Retention(RUNTIME)
910   {@code @}Target({ FIELD, PARAMETER, METHOD })
911   {@code @}BindingAnnotation
912   public {@code @}interface Transactional {}
913 </pre>
914
915 @author crazybob@google.com (Bob Lee)]]>
916    </doc>
917  </class>
918  <!-- end class com.google.inject.BindingAnnotation -->
919  <!-- start class com.google.inject.ConfigurationException -->
920  <class name="ConfigurationException" extends="java.lang.RuntimeException"
921    abstract="false"
922    static="false" final="true" visibility="public"
923    deprecated="not deprecated">
924    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
925      static="false" final="false" visibility="public"
926      deprecated="not deprecated">
927      <doc>
928      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
929      </doc>
930    </constructor>
931    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
932      abstract="false" native="false" synchronized="false"
933      static="false" final="false" visibility="public"
934      deprecated="not deprecated">
935      <param name="partialValue" type="java.lang.Object"/>
936      <doc>
937      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
938      </doc>
939    </method>
940    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
941      abstract="false" native="false" synchronized="false"
942      static="false" final="false" visibility="public"
943      deprecated="not deprecated">
944      <doc>
945      <![CDATA[Returns messages for the errors that caused this exception.]]>
946      </doc>
947    </method>
948    <method name="getPartialValue" return="E"
949      abstract="false" native="false" synchronized="false"
950      static="false" final="false" visibility="public"
951      deprecated="not deprecated">
952      <doc>
953      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
954 this while collecting additional configuration problems.
955
956 @return the partial value, or {@code null} if none was set. The type of the partial value is
957      specified by the throwing method.]]>
958      </doc>
959    </method>
960    <method name="getMessage" return="java.lang.String"
961      abstract="false" native="false" synchronized="false"
962      static="false" final="false" visibility="public"
963      deprecated="not deprecated">
964    </method>
965    <doc>
966    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
967 scope is found. Clients should catch this exception, log it, and stop execution.
968
969 @author jessewilson@google.com (Jesse Wilson)
970 @since 2.0]]>
971    </doc>
972  </class>
973  <!-- end class com.google.inject.ConfigurationException -->
974  <!-- start class com.google.inject.CreationException -->
975  <class name="CreationException" extends="java.lang.RuntimeException"
976    abstract="false"
977    static="false" final="false" visibility="public"
978    deprecated="not deprecated">
979    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
980      static="false" final="false" visibility="public"
981      deprecated="not deprecated">
982      <doc>
983      <![CDATA[Creates a CreationException containing {@code messages}.]]>
984      </doc>
985    </constructor>
986    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
987      abstract="false" native="false" synchronized="false"
988      static="false" final="false" visibility="public"
989      deprecated="not deprecated">
990      <doc>
991      <![CDATA[Returns messages for the errors that caused this exception.]]>
992      </doc>
993    </method>
994    <method name="getMessage" return="java.lang.String"
995      abstract="false" native="false" synchronized="false"
996      static="false" final="false" visibility="public"
997      deprecated="not deprecated">
998    </method>
999    <doc>
1000    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1001 errors. Clients should catch this exception, log it, and stop execution.
1002
1003 @author crazybob@google.com (Bob Lee)]]>
1004    </doc>
1005  </class>
1006  <!-- end class com.google.inject.CreationException -->
1007  <!-- start class com.google.inject.Exposed -->
1008  <class name="Exposed"    abstract="true"
1009    static="false" final="false" visibility="public"
1010    deprecated="not deprecated">
1011    <implements name="java.lang.annotation.Annotation"/>
1012    <doc>
1013    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1014 private module to indicate that the provided binding is exposed.
1015
1016 @author jessewilson@google.com (Jesse Wilson)
1017 @since 2.0]]>
1018    </doc>
1019  </class>
1020  <!-- end class com.google.inject.Exposed -->
1021  <!-- start class com.google.inject.Guice -->
1022  <class name="Guice" extends="java.lang.Object"
1023    abstract="false"
1024    static="false" final="true" visibility="public"
1025    deprecated="not deprecated">
1026    <method name="createInjector" return="com.google.inject.Injector"
1027      abstract="false" native="false" synchronized="false"
1028      static="true" final="false" visibility="public"
1029      deprecated="not deprecated">
1030      <param name="modules" type="com.google.inject.Module[]"/>
1031      <doc>
1032      <![CDATA[Creates an injector for the given set of modules.
1033
1034 @throws CreationException if one or more errors occur during injector
1035     construction]]>
1036      </doc>
1037    </method>
1038    <method name="createInjector" return="com.google.inject.Injector"
1039      abstract="false" native="false" synchronized="false"
1040      static="true" final="false" visibility="public"
1041      deprecated="not deprecated">
1042      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1043      <doc>
1044      <![CDATA[Creates an injector for the given set of modules.
1045
1046 @throws CreationException if one or more errors occur during injector
1047     creation]]>
1048      </doc>
1049    </method>
1050    <method name="createInjector" return="com.google.inject.Injector"
1051      abstract="false" native="false" synchronized="false"
1052      static="true" final="false" visibility="public"
1053      deprecated="not deprecated">
1054      <param name="stage" type="com.google.inject.Stage"/>
1055      <param name="modules" type="com.google.inject.Module[]"/>
1056      <doc>
1057      <![CDATA[Creates an injector for the given set of modules, in a given development
1058 stage.
1059
1060 @throws CreationException if one or more errors occur during injector
1061     creation.]]>
1062      </doc>
1063    </method>
1064    <method name="createInjector" return="com.google.inject.Injector"
1065      abstract="false" native="false" synchronized="false"
1066      static="true" final="false" visibility="public"
1067      deprecated="not deprecated">
1068      <param name="stage" type="com.google.inject.Stage"/>
1069      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1070      <doc>
1071      <![CDATA[Creates an injector for the given set of modules, in a given development
1072 stage.
1073
1074 @throws CreationException if one or more errors occur during injector
1075     construction]]>
1076      </doc>
1077    </method>
1078    <doc>
1079    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1080 {@link Module}s.
1081
1082 <p>Guice supports a model of development that draws clear boundaries between
1083 APIs, Implementations of these APIs, Modules which configure these
1084 implementations, and finally Applications which consist of a collection of
1085 Modules. It is the Application, which typically defines your {@code main()}
1086 method, that bootstraps the Guice Injector using the {@code Guice} class, as
1087 in this example:
1088 <pre>
1089     public class FooApplication {
1090       public static void main(String[] args) {
1091         Injector injector = Guice.createInjector(
1092             new ModuleA(),
1093             new ModuleB(),
1094             . . .
1095             new FooApplicationFlagsModule(args)
1096         );
1097
1098         // Now just bootstrap the application and you're done
1099         FooStarter starter = injector.getInstance(FooStarter.class);
1100         starter.runApplication();
1101       }
1102     }
1103 </pre>]]>
1104    </doc>
1105  </class>
1106  <!-- end class com.google.inject.Guice -->
1107  <!-- start class com.google.inject.ImplementedBy -->
1108  <class name="ImplementedBy"    abstract="true"
1109    static="false" final="false" visibility="public"
1110    deprecated="not deprecated">
1111    <implements name="java.lang.annotation.Annotation"/>
1112    <doc>
1113    <![CDATA[A pointer to the default implementation of a type.
1114
1115 @author crazybob@google.com (Bob Lee)]]>
1116    </doc>
1117  </class>
1118  <!-- end class com.google.inject.ImplementedBy -->
1119  <!-- start class com.google.inject.Inject -->
1120  <class name="Inject"    abstract="true"
1121    static="false" final="false" visibility="public"
1122    deprecated="not deprecated">
1123    <implements name="java.lang.annotation.Annotation"/>
1124    <doc>
1125    <![CDATA[Annotates members of your implementation class (constructors, methods
1126 and fields) into which the {@link Injector} should inject values.
1127 The Injector fulfills injection requests for:
1128
1129 <ul>
1130 <li>Every instance it constructs. The class being constructed must have
1131 exactly one of its constructors marked with {@code @Inject} or must have a
1132 constructor taking no parameters. The Injector then proceeds to perform
1133 method and field injections.
1134 
1135 <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1136 {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1137 {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(Provider)}.
1138 In this case all constructors are, of course, ignored.
1139
1140 <li>Static fields and methods of classes which any {@link Module} has
1141 specifically requested static injection for, using
1142 {@link Binder#requestStaticInjection}.
1143 </ul>
1144
1145 In all cases, a member can be injected regardless of its Java access
1146 specifier (private, default, protected, public).
1147
1148 @author crazybob@google.com (Bob Lee)]]>
1149    </doc>
1150  </class>
1151  <!-- end class com.google.inject.Inject -->
1152  <!-- start interface com.google.inject.Injector -->
1153  <interface name="Injector"    abstract="true"
1154    static="false" final="false" visibility="public"
1155    deprecated="not deprecated">
1156    <method name="injectMembers"
1157      abstract="false" native="false" synchronized="false"
1158      static="false" final="false" visibility="public"
1159      deprecated="not deprecated">
1160      <param name="instance" type="java.lang.Object"/>
1161      <doc>
1162      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1163 absence of an injectable constructor.
1164
1165 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1166 performing constructor injection), so if you're able to let Guice create all your objects for
1167 you, you'll never need to use this method.
1168
1169 @param instance to inject members on
1170
1171 @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1172  run time]]>
1173      </doc>
1174    </method>
1175    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1176      abstract="false" native="false" synchronized="false"
1177      static="false" final="false" visibility="public"
1178      deprecated="not deprecated">
1179      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1180      <doc>
1181      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1182 of the given type {@code T}.
1183
1184 @param typeLiteral type to get members injector for
1185 @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1186  detection
1187 @since 2.0]]>
1188      </doc>
1189    </method>
1190    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1191      abstract="false" native="false" synchronized="false"
1192      static="false" final="false" visibility="public"
1193      deprecated="not deprecated">
1194      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1195      <doc>
1196      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1197 of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1198 instead to get increased up front error detection.
1199
1200 @param type type to get members injector for
1201 @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1202  detection
1203 @since 2.0]]>
1204      </doc>
1205    </method>
1206    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1207      abstract="false" native="false" synchronized="false"
1208      static="false" final="false" visibility="public"
1209      deprecated="not deprecated">
1210      <doc>
1211      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1212
1213 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1214 injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1215 its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1216 which bindings appear in user Modules.
1217
1218 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1219      </doc>
1220    </method>
1221    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1222      abstract="false" native="false" synchronized="false"
1223      static="false" final="false" visibility="public"
1224      deprecated="not deprecated">
1225      <doc>
1226      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1227 just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1228 present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1229 additional just-in-time bindings.
1230
1231 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1232 injector}, should one exist.
1233
1234 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1235 
1236 @since 3.0]]>
1237      </doc>
1238    </method>
1239    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1240      abstract="false" native="false" synchronized="false"
1241      static="false" final="false" visibility="public"
1242      deprecated="not deprecated">
1243      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1244      <doc>
1245      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1246 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1247 be created if necessary.
1248
1249 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1250
1251 @throws ConfigurationException if this injector cannot find or create the binding.]]>
1252      </doc>
1253    </method>
1254    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1255      abstract="false" native="false" synchronized="false"
1256      static="false" final="false" visibility="public"
1257      deprecated="not deprecated">
1258      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1259      <doc>
1260      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1261 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1262 be created if necessary.
1263
1264 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1265
1266 @throws ConfigurationException if this injector cannot find or create the binding.
1267 @since 2.0]]>
1268      </doc>
1269    </method>
1270    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1271      abstract="false" native="false" synchronized="false"
1272      static="false" final="false" visibility="public"
1273      deprecated="not deprecated">
1274      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1275      <doc>
1276      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1277 {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1278 for keys that aren't bound.
1279 
1280 <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1281 
1282 @since 3.0]]>
1283      </doc>
1284    </method>
1285    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1286      abstract="false" native="false" synchronized="false"
1287      static="false" final="false" visibility="public"
1288      deprecated="not deprecated">
1289      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1290      <doc>
1291      <![CDATA[Returns all explicit bindings for {@code type}.
1292
1293 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1294      </doc>
1295    </method>
1296    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1297      abstract="false" native="false" synchronized="false"
1298      static="false" final="false" visibility="public"
1299      deprecated="not deprecated">
1300      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1301      <doc>
1302      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1303 using this method, in favor of having Guice inject your dependencies ahead of time.
1304
1305 @throws ConfigurationException if this injector cannot find or create the provider.
1306 @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1307      </doc>
1308    </method>
1309    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1310      abstract="false" native="false" synchronized="false"
1311      static="false" final="false" visibility="public"
1312      deprecated="not deprecated">
1313      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1314      <doc>
1315      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1316 using this method, in favor of having Guice inject your dependencies ahead of time.
1317
1318 @throws ConfigurationException if this injector cannot find or create the provider.
1319 @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1320      </doc>
1321    </method>
1322    <method name="getInstance" return="T"
1323      abstract="false" native="false" synchronized="false"
1324      static="false" final="false" visibility="public"
1325      deprecated="not deprecated">
1326      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1327      <doc>
1328      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1329 getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1330 inject your dependencies ahead of time.
1331
1332 @throws ConfigurationException if this injector cannot find or create the provider.
1333 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1334      </doc>
1335    </method>
1336    <method name="getInstance" return="T"
1337      abstract="false" native="false" synchronized="false"
1338      static="false" final="false" visibility="public"
1339      deprecated="not deprecated">
1340      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1341      <doc>
1342      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1343 getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1344 inject your dependencies ahead of time.
1345
1346 @throws ConfigurationException if this injector cannot find or create the provider.
1347 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1348      </doc>
1349    </method>
1350    <method name="getParent" return="com.google.inject.Injector"
1351      abstract="false" native="false" synchronized="false"
1352      static="false" final="false" visibility="public"
1353      deprecated="not deprecated">
1354      <doc>
1355      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1356
1357 @since 2.0]]>
1358      </doc>
1359    </method>
1360    <method name="createChildInjector" return="com.google.inject.Injector"
1361      abstract="false" native="false" synchronized="false"
1362      static="false" final="false" visibility="public"
1363      deprecated="not deprecated">
1364      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1365      <doc>
1366      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1367 interceptors and type converters are inherited -- they are visible to the child injector.
1368 Elements of the child injector are not visible to its parent.
1369
1370 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1371 whenever possible. This allows for scoped instances to be shared between injectors. Use
1372 explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1373 injections in just-in-time bindings (created in the parent injector) may be silently
1374 ignored if the optional dependencies are from the child injector.
1375
1376 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1377 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1378 injector to itself.
1379
1380 @since 2.0]]>
1381      </doc>
1382    </method>
1383    <method name="createChildInjector" return="com.google.inject.Injector"
1384      abstract="false" native="false" synchronized="false"
1385      static="false" final="false" visibility="public"
1386      deprecated="not deprecated">
1387      <param name="modules" type="com.google.inject.Module[]"/>
1388      <doc>
1389      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1390 interceptors and type converters are inherited -- they are visible to the child injector.
1391 Elements of the child injector are not visible to its parent.
1392
1393 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1394 whenever possible. This allows for scoped instances to be shared between injectors. Use
1395 explicit bindings to prevent bindings from being shared with the parent injector.
1396
1397 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1398 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1399 injector to itself.
1400
1401 @since 2.0]]>
1402      </doc>
1403    </method>
1404    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1405      abstract="false" native="false" synchronized="false"
1406      static="false" final="false" visibility="public"
1407      deprecated="not deprecated">
1408      <doc>
1409      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1410 like {@code Singleton.class}, and the values are scope instances, such as {@code
1411 Scopes.SINGLETON}. The returned map is immutable.
1412
1413 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1414 
1415 @since 3.0]]>
1416      </doc>
1417    </method>
1418    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1419      abstract="false" native="false" synchronized="false"
1420      static="false" final="false" visibility="public"
1421      deprecated="not deprecated">
1422      <doc>
1423      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1424 immutable.
1425
1426 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1427 
1428 @since 3.0]]>
1429      </doc>
1430    </method>
1431    <doc>
1432    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1433 for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1434 interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1435 injection from its cousin, the service locator pattern.
1436
1437 <p>Contains several default bindings:
1438
1439 <ul>
1440 <li>This {@link Injector} instance itself
1441 <li>A {@code Provider<T>} for each binding of type {@code T}
1442 <li>The {@link java.util.logging.Logger} for the class being injected
1443 <li>The {@link Stage} in which the Injector was created
1444 </ul>
1445
1446 Injectors are created using the facade class {@link Guice}.
1447
1448 <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1449 already-constructed instances. This can be used to interoperate with objects created by other
1450 frameworks or services.
1451
1452 <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1453 the configuration of their parent injectors, but the converse does not hold.
1454
1455 <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1456 enables tools and extensions to operate on an injector reflectively.
1457
1458 @author crazybob@google.com (Bob Lee)
1459 @author jessewilson@google.com (Jesse Wilson)]]>
1460    </doc>
1461  </interface>
1462  <!-- end interface com.google.inject.Injector -->
1463  <!-- start class com.google.inject.Key -->
1464  <class name="Key" extends="java.lang.Object"
1465    abstract="false"
1466    static="false" final="false" visibility="public"
1467    deprecated="not deprecated">
1468    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1469      static="false" final="false" visibility="protected"
1470      deprecated="not deprecated">
1471      <doc>
1472      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1473
1474 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1475 parameter in the anonymous class's type hierarchy so we can reconstitute it
1476 at runtime despite erasure.
1477
1478 <p>Example usage for a binding of type {@code Foo} annotated with
1479 {@code @Bar}:
1480
1481 <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1482      </doc>
1483    </constructor>
1484    <constructor name="Key" type="java.lang.annotation.Annotation"
1485      static="false" final="false" visibility="protected"
1486      deprecated="not deprecated">
1487      <doc>
1488      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1489
1490 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1491 parameter in the anonymous class's type hierarchy so we can reconstitute it
1492 at runtime despite erasure.
1493
1494 <p>Example usage for a binding of type {@code Foo} annotated with
1495 {@code @Bar}:
1496
1497 <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1498      </doc>
1499    </constructor>
1500    <constructor name="Key"
1501      static="false" final="false" visibility="protected"
1502      deprecated="not deprecated">
1503      <doc>
1504      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1505
1506 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1507 parameter in the anonymous class's type hierarchy so we can reconstitute it
1508 at runtime despite erasure.
1509
1510 <p>Example usage for a binding of type {@code Foo}:
1511
1512 <p>{@code new Key<Foo>() {}}.]]>
1513      </doc>
1514    </constructor>
1515    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1516      abstract="false" native="false" synchronized="false"
1517      static="false" final="true" visibility="public"
1518      deprecated="not deprecated">
1519      <doc>
1520      <![CDATA[Gets the key type.]]>
1521      </doc>
1522    </method>
1523    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1524      abstract="false" native="false" synchronized="false"
1525      static="false" final="true" visibility="public"
1526      deprecated="not deprecated">
1527      <doc>
1528      <![CDATA[Gets the annotation type.]]>
1529      </doc>
1530    </method>
1531    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1532      abstract="false" native="false" synchronized="false"
1533      static="false" final="true" visibility="public"
1534      deprecated="not deprecated">
1535      <doc>
1536      <![CDATA[Gets the annotation.]]>
1537      </doc>
1538    </method>
1539    <method name="equals" return="boolean"
1540      abstract="false" native="false" synchronized="false"
1541      static="false" final="true" visibility="public"
1542      deprecated="not deprecated">
1543      <param name="o" type="java.lang.Object"/>
1544    </method>
1545    <method name="hashCode" return="int"
1546      abstract="false" native="false" synchronized="false"
1547      static="false" final="true" visibility="public"
1548      deprecated="not deprecated">
1549    </method>
1550    <method name="toString" return="java.lang.String"
1551      abstract="false" native="false" synchronized="false"
1552      static="false" final="true" visibility="public"
1553      deprecated="not deprecated">
1554    </method>
1555    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1556      abstract="false" native="false" synchronized="false"
1557      static="true" final="false" visibility="public"
1558      deprecated="not deprecated">
1559      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1560      <doc>
1561      <![CDATA[Gets a key for an injection type.]]>
1562      </doc>
1563    </method>
1564    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1565      abstract="false" native="false" synchronized="false"
1566      static="true" final="false" visibility="public"
1567      deprecated="not deprecated">
1568      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1569      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1570      <doc>
1571      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1572      </doc>
1573    </method>
1574    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1575      abstract="false" native="false" synchronized="false"
1576      static="true" final="false" visibility="public"
1577      deprecated="not deprecated">
1578      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1579      <param name="annotation" type="java.lang.annotation.Annotation"/>
1580      <doc>
1581      <![CDATA[Gets a key for an injection type and an annotation.]]>
1582      </doc>
1583    </method>
1584    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1585      abstract="false" native="false" synchronized="false"
1586      static="true" final="false" visibility="public"
1587      deprecated="not deprecated">
1588      <param name="type" type="java.lang.reflect.Type"/>
1589      <doc>
1590      <![CDATA[Gets a key for an injection type.]]>
1591      </doc>
1592    </method>
1593    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1594      abstract="false" native="false" synchronized="false"
1595      static="true" final="false" visibility="public"
1596      deprecated="not deprecated">
1597      <param name="type" type="java.lang.reflect.Type"/>
1598      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1599      <doc>
1600      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1601      </doc>
1602    </method>
1603    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1604      abstract="false" native="false" synchronized="false"
1605      static="true" final="false" visibility="public"
1606      deprecated="not deprecated">
1607      <param name="type" type="java.lang.reflect.Type"/>
1608      <param name="annotation" type="java.lang.annotation.Annotation"/>
1609      <doc>
1610      <![CDATA[Gets a key for an injection type and an annotation.]]>
1611      </doc>
1612    </method>
1613    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1614      abstract="false" native="false" synchronized="false"
1615      static="true" final="false" visibility="public"
1616      deprecated="not deprecated">
1617      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1618      <doc>
1619      <![CDATA[Gets a key for an injection type.]]>
1620      </doc>
1621    </method>
1622    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1623      abstract="false" native="false" synchronized="false"
1624      static="true" final="false" visibility="public"
1625      deprecated="not deprecated">
1626      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1627      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1628      <doc>
1629      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1630      </doc>
1631    </method>
1632    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1633      abstract="false" native="false" synchronized="false"
1634      static="true" final="false" visibility="public"
1635      deprecated="not deprecated">
1636      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1637      <param name="annotation" type="java.lang.annotation.Annotation"/>
1638      <doc>
1639      <![CDATA[Gets a key for an injection type and an annotation.]]>
1640      </doc>
1641    </method>
1642    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1643      abstract="false" native="false" synchronized="false"
1644      static="false" final="false" visibility="public"
1645      deprecated="not deprecated">
1646      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1647      <doc>
1648      <![CDATA[Returns a new key of the specified type with the same annotation as this
1649 key.
1650 
1651 @since 3.0]]>
1652      </doc>
1653    </method>
1654    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1655      abstract="false" native="false" synchronized="false"
1656      static="false" final="false" visibility="public"
1657      deprecated="not deprecated">
1658      <param name="type" type="java.lang.reflect.Type"/>
1659      <doc>
1660      <![CDATA[Returns a new key of the specified type with the same annotation as this
1661 key.
1662 
1663 @since 3.0]]>
1664      </doc>
1665    </method>
1666    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1667      abstract="false" native="false" synchronized="false"
1668      static="false" final="false" visibility="public"
1669      deprecated="not deprecated">
1670      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1671      <doc>
1672      <![CDATA[Returns a new key of the specified type with the same annotation as this
1673 key.
1674 
1675 @since 3.0]]>
1676      </doc>
1677    </method>
1678    <method name="hasAttributes" return="boolean"
1679      abstract="false" native="false" synchronized="false"
1680      static="false" final="false" visibility="public"
1681      deprecated="not deprecated">
1682      <doc>
1683      <![CDATA[Returns true if this key has annotation attributes.
1684 
1685 @since 3.0]]>
1686      </doc>
1687    </method>
1688    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1689      abstract="false" native="false" synchronized="false"
1690      static="false" final="false" visibility="public"
1691      deprecated="not deprecated">
1692      <doc>
1693      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1694 annotation type.
1695 
1696 @since 3.0]]>
1697      </doc>
1698    </method>
1699    <doc>
1700    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1701 Matches the type and annotation at a point of injection.
1702
1703 <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1704 match:
1705
1706 <pre>
1707   {@literal @}Inject
1708   public void setService({@literal @}Transactional Service service) {
1709     ...
1710   }
1711 </pre>
1712
1713 <p>{@code Key} supports generic types via subclassing just like {@link
1714 TypeLiteral}.
1715
1716 <p>Keys do not differentiate between primitive types (int, char, etc.) and
1717 their correpsonding wrapper types (Integer, Character, etc.). Primitive
1718 types will be replaced with their wrapper types when keys are created.
1719
1720 @author crazybob@google.com (Bob Lee)]]>
1721    </doc>
1722  </class>
1723  <!-- end class com.google.inject.Key -->
1724  <!-- start interface com.google.inject.MembersInjector -->
1725  <interface name="MembersInjector"    abstract="true"
1726    static="false" final="false" visibility="public"
1727    deprecated="not deprecated">
1728    <method name="injectMembers"
1729      abstract="false" native="false" synchronized="false"
1730      static="false" final="false" visibility="public"
1731      deprecated="not deprecated">
1732      <param name="instance" type="T"/>
1733      <doc>
1734      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1735 absence of an injectable constructor.
1736
1737 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1738 performing constructor injection), so if you're able to let Guice create all your objects for
1739 you, you'll never need to use this method.
1740
1741 @param instance to inject members on. May be {@code null}.]]>
1742      </doc>
1743    </method>
1744    <doc>
1745    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1746 presence or absence of an injectable constructor.
1747
1748 @param <T> type to inject members of
1749
1750 @author crazybob@google.com (Bob Lee)
1751 @author jessewilson@google.com (Jesse Wilson)
1752 @since 2.0]]>
1753    </doc>
1754  </interface>
1755  <!-- end interface com.google.inject.MembersInjector -->
1756  <!-- start interface com.google.inject.Module -->
1757  <interface name="Module"    abstract="true"
1758    static="false" final="false" visibility="public"
1759    deprecated="not deprecated">
1760    <method name="configure"
1761      abstract="false" native="false" synchronized="false"
1762      static="false" final="false" visibility="public"
1763      deprecated="not deprecated">
1764      <param name="binder" type="com.google.inject.Binder"/>
1765      <doc>
1766      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1767
1768 <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1769 {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1770 discovered.]]>
1771      </doc>
1772    </method>
1773    <doc>
1774    <![CDATA[A module contributes configuration information, typically interface
1775 bindings, which will be used to create an {@link Injector}. A Guice-based
1776 application is ultimately composed of little more than a set of
1777 {@code Module}s and some bootstrapping code.
1778
1779 <p>Your Module classes can use a more streamlined syntax by extending
1780 {@link AbstractModule} rather than implementing this interface directly.
1781
1782 <p>In addition to the bindings configured via {@link #configure}, bindings
1783 will be created for all methods annotated with {@literal @}{@link Provides}.
1784 Use scope and binding annotations on these methods to configure the
1785 bindings.]]>
1786    </doc>
1787  </interface>
1788  <!-- end interface com.google.inject.Module -->
1789  <!-- start class com.google.inject.OutOfScopeException -->
1790  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1791    abstract="false"
1792    static="false" final="true" visibility="public"
1793    deprecated="not deprecated">
1794    <constructor name="OutOfScopeException" type="java.lang.String"
1795      static="false" final="false" visibility="public"
1796      deprecated="not deprecated">
1797    </constructor>
1798    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1799      static="false" final="false" visibility="public"
1800      deprecated="not deprecated">
1801    </constructor>
1802    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1803      static="false" final="false" visibility="public"
1804      deprecated="not deprecated">
1805    </constructor>
1806    <doc>
1807    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1808 object while the scope in question is not currently active.
1809
1810 @author kevinb@google.com (Kevin Bourrillion)
1811 @since 2.0]]>
1812    </doc>
1813  </class>
1814  <!-- end class com.google.inject.OutOfScopeException -->
1815  <!-- start interface com.google.inject.PrivateBinder -->
1816  <interface name="PrivateBinder"    abstract="true"
1817    static="false" final="false" visibility="public"
1818    deprecated="not deprecated">
1819    <implements name="com.google.inject.Binder"/>
1820    <method name="expose"
1821      abstract="false" native="false" synchronized="false"
1822      static="false" final="false" visibility="public"
1823      deprecated="not deprecated">
1824      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1825      <doc>
1826      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1827      </doc>
1828    </method>
1829    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1830      abstract="false" native="false" synchronized="false"
1831      static="false" final="false" visibility="public"
1832      deprecated="not deprecated">
1833      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1834      <doc>
1835      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1836 com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1837 binding annotation.]]>
1838      </doc>
1839    </method>
1840    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1841      abstract="false" native="false" synchronized="false"
1842      static="false" final="false" visibility="public"
1843      deprecated="not deprecated">
1844      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1845      <doc>
1846      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1847 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1848 binding annotation.]]>
1849      </doc>
1850    </method>
1851    <method name="withSource" return="com.google.inject.PrivateBinder"
1852      abstract="false" native="false" synchronized="false"
1853      static="false" final="false" visibility="public"
1854      deprecated="not deprecated">
1855      <param name="source" type="java.lang.Object"/>
1856    </method>
1857    <method name="skipSources" return="com.google.inject.PrivateBinder"
1858      abstract="false" native="false" synchronized="false"
1859      static="false" final="false" visibility="public"
1860      deprecated="not deprecated">
1861      <param name="classesToSkip" type="java.lang.Class[]"/>
1862    </method>
1863    <doc>
1864    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1865 {@link com.google.inject.PrivateModule PrivateModule} for details.
1866 
1867 @author jessewilson@google.com (Jesse Wilson)
1868 @since 2.0]]>
1869    </doc>
1870  </interface>
1871  <!-- end interface com.google.inject.PrivateBinder -->
1872  <!-- start class com.google.inject.PrivateModule -->
1873  <class name="PrivateModule" extends="java.lang.Object"
1874    abstract="true"
1875    static="false" final="false" visibility="public"
1876    deprecated="not deprecated">
1877    <implements name="com.google.inject.Module"/>
1878    <constructor name="PrivateModule"
1879      static="false" final="false" visibility="public"
1880      deprecated="not deprecated">
1881    </constructor>
1882    <method name="configure"
1883      abstract="false" native="false" synchronized="true"
1884      static="false" final="true" visibility="public"
1885      deprecated="not deprecated">
1886      <param name="binder" type="com.google.inject.Binder"/>
1887    </method>
1888    <method name="configure"
1889      abstract="true" native="false" synchronized="false"
1890      static="false" final="false" visibility="protected"
1891      deprecated="not deprecated">
1892      <doc>
1893      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1894 expose()} to make the bindings in this module available externally.]]>
1895      </doc>
1896    </method>
1897    <method name="expose"
1898      abstract="false" native="false" synchronized="false"
1899      static="false" final="true" visibility="protected"
1900      deprecated="not deprecated">
1901      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1902      <doc>
1903      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1904      </doc>
1905    </method>
1906    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1907      abstract="false" native="false" synchronized="false"
1908      static="false" final="true" visibility="protected"
1909      deprecated="not deprecated">
1910      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1911      <doc>
1912      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1913 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1914 binding annotation.]]>
1915      </doc>
1916    </method>
1917    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1918      abstract="false" native="false" synchronized="false"
1919      static="false" final="true" visibility="protected"
1920      deprecated="not deprecated">
1921      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1922      <doc>
1923      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
1924 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1925 binding annotation.]]>
1926      </doc>
1927    </method>
1928    <method name="binder" return="com.google.inject.PrivateBinder"
1929      abstract="false" native="false" synchronized="false"
1930      static="false" final="true" visibility="protected"
1931      deprecated="not deprecated">
1932      <doc>
1933      <![CDATA[Returns the current binder.]]>
1934      </doc>
1935    </method>
1936    <method name="bindScope"
1937      abstract="false" native="false" synchronized="false"
1938      static="false" final="true" visibility="protected"
1939      deprecated="not deprecated">
1940      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1941      <param name="scope" type="com.google.inject.Scope"/>
1942      <doc>
1943      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
1944      </doc>
1945    </method>
1946    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
1947      abstract="false" native="false" synchronized="false"
1948      static="false" final="true" visibility="protected"
1949      deprecated="not deprecated">
1950      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1951      <doc>
1952      <![CDATA[@see Binder#bind(Key)]]>
1953      </doc>
1954    </method>
1955    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
1956      abstract="false" native="false" synchronized="false"
1957      static="false" final="true" visibility="protected"
1958      deprecated="not deprecated">
1959      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1960      <doc>
1961      <![CDATA[@see Binder#bind(TypeLiteral)]]>
1962      </doc>
1963    </method>
1964    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
1965      abstract="false" native="false" synchronized="false"
1966      static="false" final="true" visibility="protected"
1967      deprecated="not deprecated">
1968      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
1969      <doc>
1970      <![CDATA[@see Binder#bind(Class)]]>
1971      </doc>
1972    </method>
1973    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
1974      abstract="false" native="false" synchronized="false"
1975      static="false" final="true" visibility="protected"
1976      deprecated="not deprecated">
1977      <doc>
1978      <![CDATA[@see Binder#bindConstant()]]>
1979      </doc>
1980    </method>
1981    <method name="install"
1982      abstract="false" native="false" synchronized="false"
1983      static="false" final="true" visibility="protected"
1984      deprecated="not deprecated">
1985      <param name="module" type="com.google.inject.Module"/>
1986      <doc>
1987      <![CDATA[@see Binder#install(Module)]]>
1988      </doc>
1989    </method>
1990    <method name="addError"
1991      abstract="false" native="false" synchronized="false"
1992      static="false" final="true" visibility="protected"
1993      deprecated="not deprecated">
1994      <param name="message" type="java.lang.String"/>
1995      <param name="arguments" type="java.lang.Object[]"/>
1996      <doc>
1997      <![CDATA[@see Binder#addError(String, Object[])]]>
1998      </doc>
1999    </method>
2000    <method name="addError"
2001      abstract="false" native="false" synchronized="false"
2002      static="false" final="true" visibility="protected"
2003      deprecated="not deprecated">
2004      <param name="t" type="java.lang.Throwable"/>
2005      <doc>
2006      <![CDATA[@see Binder#addError(Throwable)]]>
2007      </doc>
2008    </method>
2009    <method name="addError"
2010      abstract="false" native="false" synchronized="false"
2011      static="false" final="true" visibility="protected"
2012      deprecated="not deprecated">
2013      <param name="message" type="com.google.inject.spi.Message"/>
2014      <doc>
2015      <![CDATA[@see Binder#addError(Message)]]>
2016      </doc>
2017    </method>
2018    <method name="requestInjection"
2019      abstract="false" native="false" synchronized="false"
2020      static="false" final="true" visibility="protected"
2021      deprecated="not deprecated">
2022      <param name="instance" type="java.lang.Object"/>
2023      <doc>
2024      <![CDATA[@see Binder#requestInjection(Object)]]>
2025      </doc>
2026    </method>
2027    <method name="requestStaticInjection"
2028      abstract="false" native="false" synchronized="false"
2029      static="false" final="true" visibility="protected"
2030      deprecated="not deprecated">
2031      <param name="types" type="java.lang.Class[]"/>
2032      <doc>
2033      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2034      </doc>
2035    </method>
2036    <method name="bindInterceptor"
2037      abstract="false" native="false" synchronized="false"
2038      static="false" final="true" visibility="protected"
2039      deprecated="not deprecated">
2040      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2041      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2042      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2043      <doc>
2044      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2045      </doc>
2046    </method>
2047    <method name="requireBinding"
2048      abstract="false" native="false" synchronized="false"
2049      static="false" final="true" visibility="protected"
2050      deprecated="not deprecated">
2051      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2052      <doc>
2053      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2054      </doc>
2055    </method>
2056    <method name="requireBinding"
2057      abstract="false" native="false" synchronized="false"
2058      static="false" final="true" visibility="protected"
2059      deprecated="not deprecated">
2060      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2061      <doc>
2062      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2063      </doc>
2064    </method>
2065    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2066      abstract="false" native="false" synchronized="false"
2067      static="false" final="true" visibility="protected"
2068      deprecated="not deprecated">
2069      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2070      <doc>
2071      <![CDATA[@see Binder#getProvider(Key)]]>
2072      </doc>
2073    </method>
2074    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2075      abstract="false" native="false" synchronized="false"
2076      static="false" final="true" visibility="protected"
2077      deprecated="not deprecated">
2078      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2079      <doc>
2080      <![CDATA[@see Binder#getProvider(Class)]]>
2081      </doc>
2082    </method>
2083    <method name="convertToTypes"
2084      abstract="false" native="false" synchronized="false"
2085      static="false" final="true" visibility="protected"
2086      deprecated="not deprecated">
2087      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2088      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2089      <doc>
2090      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2091      </doc>
2092    </method>
2093    <method name="currentStage" return="com.google.inject.Stage"
2094      abstract="false" native="false" synchronized="false"
2095      static="false" final="true" visibility="protected"
2096      deprecated="not deprecated">
2097      <doc>
2098      <![CDATA[@see Binder#currentStage()]]>
2099      </doc>
2100    </method>
2101    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2102      abstract="false" native="false" synchronized="false"
2103      static="false" final="false" visibility="protected"
2104      deprecated="not deprecated">
2105      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2106      <doc>
2107      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2108      </doc>
2109    </method>
2110    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2111      abstract="false" native="false" synchronized="false"
2112      static="false" final="false" visibility="protected"
2113      deprecated="not deprecated">
2114      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2115      <doc>
2116      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2117      </doc>
2118    </method>
2119    <method name="bindListener"
2120      abstract="false" native="false" synchronized="false"
2121      static="false" final="false" visibility="protected"
2122      deprecated="not deprecated">
2123      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2124      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2125      <doc>
2126      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2127      </doc>
2128    </method>
2129    <doc>
2130    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2131 that are explicitly exposed will be available to other modules and to the users of the injector.
2132 This module may expose the bindings it creates and the bindings of the modules it installs.
2133
2134 <p>A private module can be nested within a regular module or within another private module using
2135 {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2136 type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2137 nest multiple private modules, the result is a tree of environments where the injector's
2138 environment is the root.
2139
2140 <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2141 com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2142 Exposed} annotation:
2143
2144 <pre>
2145 public class FooBarBazModule extends PrivateModule {
2146   protected void configure() {
2147     bind(Foo.class).to(RealFoo.class);
2148     expose(Foo.class);
2149
2150     install(new TransactionalBarModule());
2151     expose(Bar.class).annotatedWith(Transactional.class);
2152
2153     bind(SomeImplementationDetail.class);
2154     install(new MoreImplementationDetailsModule());
2155   }
2156
2157   {@literal @}Provides {@literal @}Exposed
2158   public Baz provideBaz() {
2159     return new SuperBaz();
2160   }
2161 }
2162 </pre>
2163
2164 <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2165 injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2166 root environment. Such bindings are shared among all environments in the tree.
2167 
2168 <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2169 module will be unique to its environment. But a binding for the same type in a different private
2170 module will yield a different instance.
2171
2172 <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2173 access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2174 gets access to all bindings in the child environment.
2175
2176 <p>To promote a just-in-time binding to an explicit binding, bind it:
2177 <pre>
2178   bind(FooImpl.class);
2179 </pre>
2180
2181 @author jessewilson@google.com (Jesse Wilson)
2182 @since 2.0]]>
2183    </doc>
2184  </class>
2185  <!-- end class com.google.inject.PrivateModule -->
2186  <!-- start class com.google.inject.ProvidedBy -->
2187  <class name="ProvidedBy"    abstract="true"
2188    static="false" final="false" visibility="public"
2189    deprecated="not deprecated">
2190    <implements name="java.lang.annotation.Annotation"/>
2191    <doc>
2192    <![CDATA[A pointer to the default provider type for a type.
2193
2194 @author crazybob@google.com (Bob Lee)]]>
2195    </doc>
2196  </class>
2197  <!-- end class com.google.inject.ProvidedBy -->
2198  <!-- start interface com.google.inject.Provider -->
2199  <interface name="Provider"    abstract="true"
2200    static="false" final="false" visibility="public"
2201    deprecated="not deprecated">
2202    <implements name="javax.inject.Provider&lt;T&gt;"/>
2203    <method name="get" return="T"
2204      abstract="false" native="false" synchronized="false"
2205      static="false" final="false" visibility="public"
2206      deprecated="not deprecated">
2207      <doc>
2208      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2209
2210 @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2211     in question is not currently active
2212 @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2213     and throwables to describe why provision failed.]]>
2214      </doc>
2215    </method>
2216    <doc>
2217    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2218 by Guice:
2219
2220 <ul>
2221 <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2222 is insufficient for a particular binding, the module can specify a custom {@code Provider}
2223 instead, to control exactly how Guice creates or obtains instances for the binding.
2224
2225 <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2226 rather than having a {@code T} injected directly.  This may give you access to multiple
2227 instances, instances you wish to safely mutate and discard, instances which are out of scope
2228 (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2229 instances that will be initialized lazily.
2230
2231 <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2232 when to delegate to the backing provider and when to provide the instance some other way.
2233
2234 <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2235 for a given key, via the {@link Injector#getProvider} methods.
2236 </ul>
2237
2238 @param <T> the type of object this provides
2239
2240 @author crazybob@google.com (Bob Lee)]]>
2241    </doc>
2242  </interface>
2243  <!-- end interface com.google.inject.Provider -->
2244  <!-- start class com.google.inject.Provides -->
2245  <class name="Provides"    abstract="true"
2246    static="false" final="false" visibility="public"
2247    deprecated="not deprecated">
2248    <implements name="java.lang.annotation.Annotation"/>
2249    <doc>
2250    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2251 type is bound to it's returned value. Guice will pass dependencies to the method as parameters.
2252
2253 @author crazybob@google.com (Bob Lee)
2254 @since 2.0]]>
2255    </doc>
2256  </class>
2257  <!-- end class com.google.inject.Provides -->
2258  <!-- start class com.google.inject.ProvisionException -->
2259  <class name="ProvisionException" extends="java.lang.RuntimeException"
2260    abstract="false"
2261    static="false" final="true" visibility="public"
2262    deprecated="not deprecated">
2263    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2264      static="false" final="false" visibility="public"
2265      deprecated="not deprecated">
2266      <doc>
2267      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2268      </doc>
2269    </constructor>
2270    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2271      static="false" final="false" visibility="public"
2272      deprecated="not deprecated">
2273    </constructor>
2274    <constructor name="ProvisionException" type="java.lang.String"
2275      static="false" final="false" visibility="public"
2276      deprecated="not deprecated">
2277    </constructor>
2278    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2279      abstract="false" native="false" synchronized="false"
2280      static="false" final="false" visibility="public"
2281      deprecated="not deprecated">
2282      <doc>
2283      <![CDATA[Returns messages for the errors that caused this exception.]]>
2284      </doc>
2285    </method>
2286    <method name="getMessage" return="java.lang.String"
2287      abstract="false" native="false" synchronized="false"
2288      static="false" final="false" visibility="public"
2289      deprecated="not deprecated">
2290    </method>
2291    <doc>
2292    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2293
2294 @author kevinb@google.com (Kevin Bourrillion)
2295 @author jessewilson@google.com (Jesse Wilson)
2296 @since 2.0]]>
2297    </doc>
2298  </class>
2299  <!-- end class com.google.inject.ProvisionException -->
2300  <!-- start interface com.google.inject.Scope -->
2301  <interface name="Scope"    abstract="true"
2302    static="false" final="false" visibility="public"
2303    deprecated="not deprecated">
2304    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2305      abstract="false" native="false" synchronized="false"
2306      static="false" final="false" visibility="public"
2307      deprecated="not deprecated">
2308      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2309      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2310      <doc>
2311      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2312 If an object does not exist in this scope, the provider can use the given
2313 unscoped provider to retrieve one.
2314
2315 <p>Scope implementations are strongly encouraged to override
2316 {@link Object#toString} in the returned provider and include the backing
2317 provider's {@code toString()} output.
2318
2319 @param key binding key
2320 @param unscoped locates an instance when one doesn't already exist in this
2321  scope.
2322 @return a new provider which only delegates to the given unscoped provider
2323  when an instance of the requested object doesn't already exist in this
2324  scope]]>
2325      </doc>
2326    </method>
2327    <method name="toString" return="java.lang.String"
2328      abstract="false" native="false" synchronized="false"
2329      static="false" final="false" visibility="public"
2330      deprecated="not deprecated">
2331      <doc>
2332      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2333 scopes that ship with guice use the descriptions
2334 {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2335 {@code "ServletScopes.REQUEST"}.]]>
2336      </doc>
2337    </method>
2338    <doc>
2339    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2340 By default, an instance created by the {@link Injector} has <i>no scope</i>,
2341 meaning it has no state from the framework's perspective -- the
2342 {@code Injector} creates it, injects it once into the class that required it,
2343 and then immediately forgets it. Associating a scope with a particular
2344 binding allows the created instance to be "remembered" and possibly used
2345 again for other injections.
2346
2347 <p>An example of a scope is {@link Scopes#SINGLETON}.
2348
2349 @author crazybob@google.com (Bob Lee)]]>
2350    </doc>
2351  </interface>
2352  <!-- end interface com.google.inject.Scope -->
2353  <!-- start class com.google.inject.ScopeAnnotation -->
2354  <class name="ScopeAnnotation"    abstract="true"
2355    static="false" final="false" visibility="public"
2356    deprecated="not deprecated">
2357    <implements name="java.lang.annotation.Annotation"/>
2358    <doc>
2359    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2360 may apply to a single implementation class. You must also annotate scope
2361 annotations with {@code @Retention(RUNTIME)}. For example:
2362
2363 <pre>
2364   {@code @}Retention(RUNTIME)
2365   {@code @}Target(TYPE, METHOD)
2366   {@code @}ScopeAnnotation
2367   public {@code @}interface SessionScoped {}
2368 </pre>
2369
2370 @author crazybob@google.com (Bob Lee)]]>
2371    </doc>
2372  </class>
2373  <!-- end class com.google.inject.ScopeAnnotation -->
2374  <!-- start class com.google.inject.Scopes -->
2375  <class name="Scopes" extends="java.lang.Object"
2376    abstract="false"
2377    static="false" final="false" visibility="public"
2378    deprecated="not deprecated">
2379    <method name="isSingleton" return="boolean"
2380      abstract="false" native="false" synchronized="false"
2381      static="true" final="false" visibility="public"
2382      deprecated="not deprecated">
2383      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2384      <doc>
2385      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2386 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2387 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2388 also true if the target binding is singleton-scoped.
2389
2390 @since 3.0]]>
2391      </doc>
2392    </method>
2393    <field name="SINGLETON" type="com.google.inject.Scope"
2394      transient="false" volatile="false"
2395      static="true" final="true" visibility="public"
2396      deprecated="not deprecated">
2397      <doc>
2398      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2399      </doc>
2400    </field>
2401    <field name="NO_SCOPE" type="com.google.inject.Scope"
2402      transient="false" volatile="false"
2403      static="true" final="true" visibility="public"
2404      deprecated="not deprecated">
2405      <doc>
2406      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2407 Injector obtains an instance of an object with "no scope", it injects this
2408 instance then immediately forgets it.  When the next request for the same
2409 binding arrives it will need to obtain the instance over again.
2410
2411 <p>This exists only in case a class has been annotated with a scope
2412 annotation such as {@link Singleton @Singleton}, and you need to override
2413 this to "no scope" in your binding.
2414
2415 @since 2.0]]>
2416      </doc>
2417    </field>
2418    <doc>
2419    <![CDATA[Built-in scope implementations.
2420
2421 @author crazybob@google.com (Bob Lee)]]>
2422    </doc>
2423  </class>
2424  <!-- end class com.google.inject.Scopes -->
2425  <!-- start class com.google.inject.Singleton -->
2426  <class name="Singleton"    abstract="true"
2427    static="false" final="false" visibility="public"
2428    deprecated="not deprecated">
2429    <implements name="java.lang.annotation.Annotation"/>
2430    <doc>
2431    <![CDATA[Apply this to implementation classes when you want only one instance
2432 (per {@link Injector}) to be reused for all injections for that binding.
2433
2434 @author crazybob@google.com (Bob Lee)]]>
2435    </doc>
2436  </class>
2437  <!-- end class com.google.inject.Singleton -->
2438  <!-- start class com.google.inject.Stage -->
2439  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2440    abstract="false"
2441    static="false" final="true" visibility="public"
2442    deprecated="not deprecated">
2443    <method name="values" return="com.google.inject.Stage[]"
2444      abstract="false" native="false" synchronized="false"
2445      static="true" final="false" visibility="public"
2446      deprecated="not deprecated">
2447    </method>
2448    <method name="valueOf" return="com.google.inject.Stage"
2449      abstract="false" native="false" synchronized="false"
2450      static="true" final="false" visibility="public"
2451      deprecated="not deprecated">
2452      <param name="name" type="java.lang.String"/>
2453    </method>
2454    <doc>
2455    <![CDATA[The stage we're running in.
2456
2457 @author crazybob@google.com (Bob Lee)]]>
2458    </doc>
2459  </class>
2460  <!-- end class com.google.inject.Stage -->
2461  <!-- start class com.google.inject.TypeLiteral -->
2462  <class name="TypeLiteral" extends="java.lang.Object"
2463    abstract="false"
2464    static="false" final="false" visibility="public"
2465    deprecated="not deprecated">
2466    <constructor name="TypeLiteral"
2467      static="false" final="false" visibility="protected"
2468      deprecated="not deprecated">
2469      <doc>
2470      <![CDATA[Constructs a new type literal. Derives represented class from type
2471 parameter.
2472
2473 <p>Clients create an empty anonymous subclass. Doing so embeds the type
2474 parameter in the anonymous class's type hierarchy so we can reconstitute it
2475 at runtime despite erasure.]]>
2476      </doc>
2477    </constructor>
2478    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2479      abstract="false" native="false" synchronized="false"
2480      static="false" final="true" visibility="public"
2481      deprecated="not deprecated">
2482      <doc>
2483      <![CDATA[Returns the raw (non-generic) type for this type.
2484 
2485 @since 2.0]]>
2486      </doc>
2487    </method>
2488    <method name="getType" return="java.lang.reflect.Type"
2489      abstract="false" native="false" synchronized="false"
2490      static="false" final="true" visibility="public"
2491      deprecated="not deprecated">
2492      <doc>
2493      <![CDATA[Gets underlying {@code Type} instance.]]>
2494      </doc>
2495    </method>
2496    <method name="hashCode" return="int"
2497      abstract="false" native="false" synchronized="false"
2498      static="false" final="true" visibility="public"
2499      deprecated="not deprecated">
2500    </method>
2501    <method name="equals" return="boolean"
2502      abstract="false" native="false" synchronized="false"
2503      static="false" final="true" visibility="public"
2504      deprecated="not deprecated">
2505      <param name="o" type="java.lang.Object"/>
2506    </method>
2507    <method name="toString" return="java.lang.String"
2508      abstract="false" native="false" synchronized="false"
2509      static="false" final="true" visibility="public"
2510      deprecated="not deprecated">
2511    </method>
2512    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2513      abstract="false" native="false" synchronized="false"
2514      static="true" final="false" visibility="public"
2515      deprecated="not deprecated">
2516      <param name="type" type="java.lang.reflect.Type"/>
2517      <doc>
2518      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2519      </doc>
2520    </method>
2521    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2522      abstract="false" native="false" synchronized="false"
2523      static="true" final="false" visibility="public"
2524      deprecated="not deprecated">
2525      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2526      <doc>
2527      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2528      </doc>
2529    </method>
2530    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2531      abstract="false" native="false" synchronized="false"
2532      static="false" final="false" visibility="public"
2533      deprecated="not deprecated">
2534      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2535      <doc>
2536      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2537 ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2538 Iterable.class}.
2539
2540 @param supertype a superclass of, or interface implemented by, this.
2541 @since 2.0]]>
2542      </doc>
2543    </method>
2544    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2545      abstract="false" native="false" synchronized="false"
2546      static="false" final="false" visibility="public"
2547      deprecated="not deprecated">
2548      <param name="field" type="java.lang.reflect.Field"/>
2549      <doc>
2550      <![CDATA[Returns the resolved generic type of {@code field}.
2551
2552 @param field a field defined by this or any superclass.
2553 @since 2.0]]>
2554      </doc>
2555    </method>
2556    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2557      abstract="false" native="false" synchronized="false"
2558      static="false" final="false" visibility="public"
2559      deprecated="not deprecated">
2560      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2561      <doc>
2562      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2563
2564 @param methodOrConstructor a method or constructor defined by this or any supertype.
2565 @since 2.0]]>
2566      </doc>
2567    </method>
2568    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2569      abstract="false" native="false" synchronized="false"
2570      static="false" final="false" visibility="public"
2571      deprecated="not deprecated">
2572      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2573      <doc>
2574      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2575
2576 @param methodOrConstructor a method or constructor defined by this or any supertype.
2577 @since 2.0]]>
2578      </doc>
2579    </method>
2580    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2581      abstract="false" native="false" synchronized="false"
2582      static="false" final="false" visibility="public"
2583      deprecated="not deprecated">
2584      <param name="method" type="java.lang.reflect.Method"/>
2585      <doc>
2586      <![CDATA[Returns the resolved generic return type of {@code method}.
2587
2588 @param method a method defined by this or any supertype.
2589 @since 2.0]]>
2590      </doc>
2591    </method>
2592    <doc>
2593    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2594 represent generic types, so this class does. Forces clients to create a
2595 subclass of this class which enables retrieval the type information even at
2596 runtime.
2597
2598 <p>For example, to create a type literal for {@code List<String>}, you can
2599 create an empty anonymous inner class:
2600
2601 <p>
2602 {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2603
2604 <p>Along with modeling generic types, this class can resolve type parameters.
2605 For example, to figure out what type {@code keySet()} returns on a {@code
2606 Map<Integer, String>}, use this code:<pre>   {@code
2607
2608   TypeLiteral<Map<Integer, String>> mapType
2609       = new TypeLiteral<Map<Integer, String>>() {};
2610   TypeLiteral<?> keySetType
2611       = mapType.getReturnType(Map.class.getMethod("keySet"));
2612   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2613
2614 @author crazybob@google.com (Bob Lee)
2615 @author jessewilson@google.com (Jesse Wilson)]]>
2616    </doc>
2617  </class>
2618  <!-- end class com.google.inject.TypeLiteral -->
2619</package>
2620<package name="com.google.inject.assistedinject">
2621  <!-- start class com.google.inject.assistedinject.Assisted -->
2622  <class name="Assisted"    abstract="true"
2623    static="false" final="false" visibility="public"
2624    deprecated="not deprecated">
2625    <implements name="java.lang.annotation.Annotation"/>
2626    <doc>
2627    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2628
2629 @author jmourits@google.com (Jerome Mourits)
2630 @author jessewilson@google.com (Jesse Wilson)]]>
2631    </doc>
2632  </class>
2633  <!-- end class com.google.inject.assistedinject.Assisted -->
2634  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2635  <class name="AssistedInject"    abstract="true"
2636    static="false" final="false" visibility="public"
2637    deprecated="not deprecated">
2638    <implements name="java.lang.annotation.Annotation"/>
2639    <doc>
2640    <![CDATA[<p>
2641 When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with 
2642 {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2643 parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2644 annotations. The assisted parameters must exactly match one corresponding factory method within
2645 the factory interface, but the parameters do not need to be in the same order. Constructors
2646 annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2647 (such as AOP).
2648 
2649 <p>
2650 <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2651 annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2652 parameters must exactly match one corresponding factory method within the factory interface and
2653 all must be in the same order as listed in the factory. In this backwards compatable mode,
2654 constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2655 none of the benefits.
2656 
2657 <p>
2658 Constructor parameters must be either supplied by the factory interface and marked with
2659 <code>@Assisted</code>, or they must be injectable.
2660 
2661 @author jmourits@google.com (Jerome Mourits)
2662 @author jessewilson@google.com (Jesse Wilson)]]>
2663    </doc>
2664  </class>
2665  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2666  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2667  <interface name="AssistedInjectBinding"    abstract="true"
2668    static="false" final="false" visibility="public"
2669    deprecated="not deprecated">
2670    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2671      abstract="false" native="false" synchronized="false"
2672      static="false" final="false" visibility="public"
2673      deprecated="not deprecated">
2674      <doc>
2675      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2676      </doc>
2677    </method>
2678    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2679      abstract="false" native="false" synchronized="false"
2680      static="false" final="false" visibility="public"
2681      deprecated="not deprecated">
2682      <doc>
2683      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2684      </doc>
2685    </method>
2686    <doc>
2687    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2688 
2689 @param <T> The fully qualified type of the factory.
2690  
2691 @since 3.0
2692 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2693    </doc>
2694  </interface>
2695  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2696  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2697  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2698    static="false" final="false" visibility="public"
2699    deprecated="not deprecated">
2700    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2701    <method name="visit" return="V"
2702      abstract="false" native="false" synchronized="false"
2703      static="false" final="false" visibility="public"
2704      deprecated="not deprecated">
2705      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2706      <doc>
2707      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2708      </doc>
2709    </method>
2710    <doc>
2711    <![CDATA[A visitor for the AssistedInject extension.
2712 <p>
2713 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2714 {@link FactoryModuleBuilder} will be visited through this interface.
2715
2716 @since 3.0
2717 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2718    </doc>
2719  </interface>
2720  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2721  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2722  <interface name="AssistedMethod"    abstract="true"
2723    static="false" final="false" visibility="public"
2724    deprecated="not deprecated">
2725    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2726      abstract="false" native="false" synchronized="false"
2727      static="false" final="false" visibility="public"
2728      deprecated="not deprecated">
2729      <doc>
2730      <![CDATA[Returns the factory method that is being assisted.]]>
2731      </doc>
2732    </method>
2733    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2734      abstract="false" native="false" synchronized="false"
2735      static="false" final="false" visibility="public"
2736      deprecated="not deprecated">
2737      <doc>
2738      <![CDATA[Returns the implementation type that will be created when the method is
2739 used.]]>
2740      </doc>
2741    </method>
2742    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2743      abstract="false" native="false" synchronized="false"
2744      static="false" final="false" visibility="public"
2745      deprecated="not deprecated">
2746      <doc>
2747      <![CDATA[Returns the constructor that will be used to construct instances of the 
2748 implementation.]]>
2749      </doc>
2750    </method>
2751    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2752      abstract="false" native="false" synchronized="false"
2753      static="false" final="false" visibility="public"
2754      deprecated="not deprecated">
2755      <doc>
2756      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2757 the implementation.]]>
2758      </doc>
2759    </method>
2760    <doc>
2761    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2762 
2763 @since 3.0
2764 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2765    </doc>
2766  </interface>
2767  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2768  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2769  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2770    abstract="false"
2771    static="false" final="true" visibility="public"
2772    deprecated="not deprecated">
2773    <constructor name="FactoryModuleBuilder"
2774      static="false" final="false" visibility="public"
2775      deprecated="not deprecated">
2776    </constructor>
2777    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2778      abstract="false" native="false" synchronized="false"
2779      static="false" final="false" visibility="public"
2780      deprecated="not deprecated">
2781      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2782      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2783      <doc>
2784      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2785      </doc>
2786    </method>
2787    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2788      abstract="false" native="false" synchronized="false"
2789      static="false" final="false" visibility="public"
2790      deprecated="not deprecated">
2791      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2792      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2793      <doc>
2794      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2795      </doc>
2796    </method>
2797    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2798      abstract="false" native="false" synchronized="false"
2799      static="false" final="false" visibility="public"
2800      deprecated="not deprecated">
2801      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2802      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2803      <doc>
2804      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2805      </doc>
2806    </method>
2807    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2808      abstract="false" native="false" synchronized="false"
2809      static="false" final="false" visibility="public"
2810      deprecated="not deprecated">
2811      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2812      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2813      <doc>
2814      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2815      </doc>
2816    </method>
2817    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2818      abstract="false" native="false" synchronized="false"
2819      static="false" final="false" visibility="public"
2820      deprecated="not deprecated">
2821      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2822      <param name="annotation" type="java.lang.annotation.Annotation"/>
2823      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2824      <doc>
2825      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2826      </doc>
2827    </method>
2828    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2829      abstract="false" native="false" synchronized="false"
2830      static="false" final="false" visibility="public"
2831      deprecated="not deprecated">
2832      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2833      <param name="annotation" type="java.lang.annotation.Annotation"/>
2834      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2835      <doc>
2836      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2837      </doc>
2838    </method>
2839    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2840      abstract="false" native="false" synchronized="false"
2841      static="false" final="false" visibility="public"
2842      deprecated="not deprecated">
2843      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2844      <param name="annotation" type="java.lang.annotation.Annotation"/>
2845      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2846      <doc>
2847      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2848      </doc>
2849    </method>
2850    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2851      abstract="false" native="false" synchronized="false"
2852      static="false" final="false" visibility="public"
2853      deprecated="not deprecated">
2854      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2855      <param name="annotation" type="java.lang.annotation.Annotation"/>
2856      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2857      <doc>
2858      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2859      </doc>
2860    </method>
2861    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2862      abstract="false" native="false" synchronized="false"
2863      static="false" final="false" visibility="public"
2864      deprecated="not deprecated">
2865      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2866      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2867      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2868      <doc>
2869      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2870      </doc>
2871    </method>
2872    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2873      abstract="false" native="false" synchronized="false"
2874      static="false" final="false" visibility="public"
2875      deprecated="not deprecated">
2876      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2877      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2878      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2879      <doc>
2880      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2881      </doc>
2882    </method>
2883    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2884      abstract="false" native="false" synchronized="false"
2885      static="false" final="false" visibility="public"
2886      deprecated="not deprecated">
2887      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2888      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2889      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2890      <doc>
2891      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2892      </doc>
2893    </method>
2894    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2895      abstract="false" native="false" synchronized="false"
2896      static="false" final="false" visibility="public"
2897      deprecated="not deprecated">
2898      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2899      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2900      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2901      <doc>
2902      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2903      </doc>
2904    </method>
2905    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2906      abstract="false" native="false" synchronized="false"
2907      static="false" final="false" visibility="public"
2908      deprecated="not deprecated">
2909      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
2910      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2911      <doc>
2912      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2913      </doc>
2914    </method>
2915    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2916      abstract="false" native="false" synchronized="false"
2917      static="false" final="false" visibility="public"
2918      deprecated="not deprecated">
2919      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
2920      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2921      <doc>
2922      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2923      </doc>
2924    </method>
2925    <method name="build" return="com.google.inject.Module"
2926      abstract="false" native="false" synchronized="false"
2927      static="false" final="false" visibility="public"
2928      deprecated="not deprecated">
2929      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
2930      <doc>
2931      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2932      </doc>
2933    </method>
2934    <method name="build" return="com.google.inject.Module"
2935      abstract="false" native="false" synchronized="false"
2936      static="false" final="false" visibility="public"
2937      deprecated="not deprecated">
2938      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
2939      <doc>
2940      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2941      </doc>
2942    </method>
2943    <method name="build" return="com.google.inject.Module"
2944      abstract="false" native="false" synchronized="false"
2945      static="false" final="false" visibility="public"
2946      deprecated="not deprecated">
2947      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
2948    </method>
2949    <doc>
2950    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
2951 construct objects.
2952
2953 <h3>Defining a factory</h3>
2954 Create an interface whose methods return the constructed type, or any of its supertypes. The
2955 method's parameters are the arguments required to build the constructed type.
2956
2957 <pre>public interface PaymentFactory {
2958   Payment create(Date startDate, Money amount);
2959 }</pre>
2960
2961 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
2962 or <i>newPayment</i>.
2963
2964 <h3>Creating a type that accepts factory parameters</h3>
2965 {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
2966 Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
2967 should have parameters that match each of the factory method's parameters. Each factory-supplied
2968 parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
2969 parameter is not bound by your application's modules.
2970
2971 <pre>public class RealPayment implements Payment {
2972   {@literal @}Inject
2973   public RealPayment(
2974      CreditService creditService,
2975      AuthService authService,
2976      <strong>{@literal @}Assisted Date startDate</strong>,
2977      <strong>{@literal @}Assisted Money amount</strong>) {
2978     ...
2979   }
2980 }</pre>
2981 
2982 <h3>Multiple factory methods for the same type</h3>
2983 If the factory contains many methods that return the same type, you can create multiple
2984 constructors in your concrete class, each constructor marked with with
2985 {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
2986 factory methods. 
2987 
2988 <pre>public interface PaymentFactory {
2989    Payment create(Date startDate, Money amount);
2990    Payment createWithoutDate(Money amount);
2991 }
2992 
2993 public class RealPayment implements Payment {
2994  {@literal @}AssistedInject
2995   public RealPayment(
2996      CreditService creditService,
2997      AuthService authService,
2998     <strong>{@literal @}Assisted Date startDate</strong>,
2999     <strong>{@literal @}Assisted Money amount</strong>) {
3000     ...
3001   }
3002   
3003  {@literal @}AssistedInject
3004   public RealPayment(
3005      CreditService creditService,
3006      AuthService authService,
3007     <strong>{@literal @}Assisted Money amount</strong>) {
3008     ...
3009   }   
3010 }</pre> 
3011
3012 <h3>Configuring simple factories</h3>
3013 In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3014 factory:
3015
3016 <pre>install(new FactoryModuleBuilder()
3017     .implement(Payment.class, RealPayment.class)
3018     .build(PaymentFactory.class);</pre>
3019
3020 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3021 factory cannot be used until the injector has been initialized.
3022 
3023 <h3>Configuring complex factories</h3>
3024 Factories can create an arbitrary number of objects, one per each method.  Each factory
3025 method can be configured using <code>.implement</code>.
3026
3027 <pre>public interface OrderFactory {
3028    Payment create(Date startDate, Money amount);
3029    Shipment create(Customer customer, Item item);
3030    Receipt create(Payment payment, Shipment shipment);
3031 }
3032 
3033 [...]
3034 
3035 install(new FactoryModuleBuilder()
3036     .implement(Payment.class, RealPayment.class)
3037     // excluding .implement for Shipment means the implementation class
3038     // will be 'Shipment' itself, which is legal if it's not an interface.
3039     .implement(Receipt.class, RealReceipt.class)
3040     .build(OrderFactory.class);</pre>
3041 </pre>
3042
3043 <h3>Using the factory</h3>
3044 Inject your factory into your application classes. When you use the factory, your arguments
3045 will be combined with values from the injector to construct an instance.
3046
3047 <pre>public class PaymentAction {
3048   {@literal @}Inject private PaymentFactory paymentFactory;
3049
3050   public void doPayment(Money amount) {
3051     Payment payment = paymentFactory.create(new Date(), amount);
3052     payment.apply();
3053   }
3054 }</pre>
3055
3056 <h3>Making parameter types distinct</h3>
3057 The types of the factory method's parameters must be distinct. To use multiple parameters of
3058 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3059 parameters. The names must be applied to the factory method's parameters:
3060
3061 <pre>public interface PaymentFactory {
3062   Payment create(
3063       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3064       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3065       Money amount);
3066 } </pre>
3067
3068 ...and to the concrete type's constructor parameters:
3069
3070 <pre>public class RealPayment implements Payment {
3071   {@literal @}Inject
3072   public RealPayment(
3073      CreditService creditService,
3074      AuthService authService,
3075      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3076      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3077      <strong>{@literal @}Assisted</strong> Money amount) {
3078     ...
3079   }
3080 }</pre>
3081
3082 <h3>Values are created by Guice</h3>
3083 Returned factories use child injectors to create values. The values are eligible for method
3084 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3085 returned.
3086
3087 <h3>More configuration options</h3>
3088 In addition to simply specifying an implementation class for any returned type, factories' return
3089 values can be automatic or can be configured to use annotations:
3090 <p/>
3091 If you just want to return the types specified in the factory, do not configure any
3092 implementations:
3093
3094 <pre>public interface FruitFactory {
3095   Apple getApple(Color color);
3096 }
3097 ...
3098 protected void configure() {
3099   install(new FactoryModuleBuilder().build(FruitFactory.class));
3100 }</pre>
3101
3102 Note that any type returned by the factory in this manner needs to be an implementation class.
3103 <p/>
3104 To return two different implementations for the same interface from your factory, use binding
3105 annotations on your return types:
3106
3107 <pre>interface CarFactory {
3108   {@literal @}Named("fast") Car getFastCar(Color color);
3109   {@literal @}Named("clean") Car getCleanCar(Color color);
3110 }
3111 ...
3112 protected void configure() {
3113   install(new FactoryModuleBuilder()
3114       .implement(Car.class, Names.named("fast"), Porsche.class)
3115       .implement(Car.class, Names.named("clean"), Prius.class)
3116       .build(CarFactory.class));
3117 }</pre>
3118 
3119 <h3>Implementation limitations</h3>
3120 As a limitation of the implementation, it is prohibited to declare a factory method that
3121 accepts a {@code Provider} as one of its arguments.
3122
3123 @since 3.0
3124 @author schmitt@google.com (Peter Schmitt)]]>
3125    </doc>
3126  </class>
3127  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3128  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3129  <class name="FactoryProvider" extends="java.lang.Object"
3130    abstract="false"
3131    static="false" final="false" visibility="public"
3132    deprecated="use {@link FactoryModuleBuilder} instead.">
3133    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3134    <implements name="com.google.inject.spi.HasDependencies"/>
3135    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3136      abstract="false" native="false" synchronized="false"
3137      static="true" final="false" visibility="public"
3138      deprecated="not deprecated">
3139      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3140      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3141    </method>
3142    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3143      abstract="false" native="false" synchronized="false"
3144      static="true" final="false" visibility="public"
3145      deprecated="not deprecated">
3146      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3147      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3148    </method>
3149    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3150      abstract="false" native="false" synchronized="false"
3151      static="false" final="false" visibility="public"
3152      deprecated="not deprecated">
3153    </method>
3154    <method name="get" return="F"
3155      abstract="false" native="false" synchronized="false"
3156      static="false" final="false" visibility="public"
3157      deprecated="not deprecated">
3158    </method>
3159    <doc>
3160    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3161 additional capability.
3162
3163 <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3164 construct objects.
3165
3166 <h3>Defining a factory</h3>
3167 Create an interface whose methods return the constructed type, or any of its supertypes. The
3168 method's parameters are the arguments required to build the constructed type.
3169 <pre>public interface PaymentFactory {
3170   Payment create(Date startDate, Money amount);
3171 }</pre>
3172 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3173 or <i>newPayment</i>.
3174
3175 <h3>Creating a type that accepts factory parameters</h3>
3176 {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3177 constructor. In addition to injector-supplied parameters, the constructor should have
3178 parameters that match each of the factory method's parameters. Each factory-supplied parameter
3179 requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3180 is not bound by your application's modules.
3181 <pre>public class RealPayment implements Payment {
3182   {@literal @}Inject
3183   public RealPayment(
3184      CreditService creditService,
3185      AuthService authService,
3186      <strong>{@literal @}Assisted Date startDate</strong>,
3187      <strong>{@literal @}Assisted Money amount</strong>) {
3188     ...
3189   }
3190 }</pre>
3191 Any parameter that permits a null value should also be annotated {@code @Nullable}.
3192
3193 <h3>Configuring factories</h3>
3194 In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3195 factory:
3196 <pre>bind(PaymentFactory.class).toProvider(
3197     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3198 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3199 factory cannot be used until the injector has been initialized.
3200
3201 <h3>Using the factory</h3>
3202 Inject your factory into your application classes. When you use the factory, your arguments
3203 will be combined with values from the injector to construct an instance.
3204 <pre>public class PaymentAction {
3205   {@literal @}Inject private PaymentFactory paymentFactory;
3206
3207   public void doPayment(Money amount) {
3208     Payment payment = paymentFactory.create(new Date(), amount);
3209     payment.apply();
3210   }
3211 }</pre>
3212
3213 <h3>Making parameter types distinct</h3>
3214 The types of the factory method's parameters must be distinct. To use multiple parameters of
3215 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3216 parameters. The names must be applied to the factory method's parameters:
3217
3218 <pre>public interface PaymentFactory {
3219   Payment create(
3220       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3221       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3222       Money amount);
3223 } </pre>
3224 ...and to the concrete type's constructor parameters:
3225 <pre>public class RealPayment implements Payment {
3226   {@literal @}Inject
3227   public RealPayment(
3228      CreditService creditService,
3229      AuthService authService,
3230      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3231      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3232      <strong>{@literal @}Assisted</strong> Money amount) {
3233     ...
3234   }
3235 }</pre>
3236
3237 <h3>Values are created by Guice</h3>
3238 Returned factories use child injectors to create values. The values are eligible for method
3239 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3240 returned.
3241
3242 <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3243 Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3244 {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3245
3246 <p>Instead of matching factory method arguments to constructor parameters using their names, the
3247 <strong>parameters are matched by their order</strong>. The first factory method argument is
3248 used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3249 effect.
3250
3251 <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3252 method interception. They do receive post-construction member injection.
3253
3254 @param <F> The factory interface
3255
3256 @author jmourits@google.com (Jerome Mourits)
3257 @author jessewilson@google.com (Jesse Wilson)
3258 @author dtm@google.com (Daniel Martin)
3259 
3260 @deprecated use {@link FactoryModuleBuilder} instead.]]>
3261    </doc>
3262  </class>
3263  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3264</package>
3265<package name="com.google.inject.binder">
3266  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3267  <interface name="AnnotatedBindingBuilder"    abstract="true"
3268    static="false" final="false" visibility="public"
3269    deprecated="not deprecated">
3270    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3271    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3272      abstract="false" native="false" synchronized="false"
3273      static="false" final="false" visibility="public"
3274      deprecated="not deprecated">
3275      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3276      <doc>
3277      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3278      </doc>
3279    </method>
3280    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3281      abstract="false" native="false" synchronized="false"
3282      static="false" final="false" visibility="public"
3283      deprecated="not deprecated">
3284      <param name="annotation" type="java.lang.annotation.Annotation"/>
3285      <doc>
3286      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3287      </doc>
3288    </method>
3289    <doc>
3290    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3291
3292 @author crazybob@google.com (Bob Lee)]]>
3293    </doc>
3294  </interface>
3295  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3296  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3297  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3298    static="false" final="false" visibility="public"
3299    deprecated="not deprecated">
3300    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3301      abstract="false" native="false" synchronized="false"
3302      static="false" final="false" visibility="public"
3303      deprecated="not deprecated">
3304      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3305      <doc>
3306      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3307      </doc>
3308    </method>
3309    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3310      abstract="false" native="false" synchronized="false"
3311      static="false" final="false" visibility="public"
3312      deprecated="not deprecated">
3313      <param name="annotation" type="java.lang.annotation.Annotation"/>
3314      <doc>
3315      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3316      </doc>
3317    </method>
3318    <doc>
3319    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3320
3321 @author crazybob@google.com (Bob Lee)]]>
3322    </doc>
3323  </interface>
3324  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3325  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3326  <interface name="AnnotatedElementBuilder"    abstract="true"
3327    static="false" final="false" visibility="public"
3328    deprecated="not deprecated">
3329    <method name="annotatedWith"
3330      abstract="false" native="false" synchronized="false"
3331      static="false" final="false" visibility="public"
3332      deprecated="not deprecated">
3333      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3334      <doc>
3335      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3336      </doc>
3337    </method>
3338    <method name="annotatedWith"
3339      abstract="false" native="false" synchronized="false"
3340      static="false" final="false" visibility="public"
3341      deprecated="not deprecated">
3342      <param name="annotation" type="java.lang.annotation.Annotation"/>
3343      <doc>
3344      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3345      </doc>
3346    </method>
3347    <doc>
3348    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3349
3350 @author jessewilson@google.com (Jesse Wilson)
3351 @since 2.0]]>
3352    </doc>
3353  </interface>
3354  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3355  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3356  <interface name="ConstantBindingBuilder"    abstract="true"
3357    static="false" final="false" visibility="public"
3358    deprecated="not deprecated">
3359    <method name="to"
3360      abstract="false" native="false" synchronized="false"
3361      static="false" final="false" visibility="public"
3362      deprecated="not deprecated">
3363      <param name="value" type="java.lang.String"/>
3364      <doc>
3365      <![CDATA[Binds constant to the given value.]]>
3366      </doc>
3367    </method>
3368    <method name="to"
3369      abstract="false" native="false" synchronized="false"
3370      static="false" final="false" visibility="public"
3371      deprecated="not deprecated">
3372      <param name="value" type="int"/>
3373      <doc>
3374      <![CDATA[Binds constant to the given value.]]>
3375      </doc>
3376    </method>
3377    <method name="to"
3378      abstract="false" native="false" synchronized="false"
3379      static="false" final="false" visibility="public"
3380      deprecated="not deprecated">
3381      <param name="value" type="long"/>
3382      <doc>
3383      <![CDATA[Binds constant to the given value.]]>
3384      </doc>
3385    </method>
3386    <method name="to"
3387      abstract="false" native="false" synchronized="false"
3388      static="false" final="false" visibility="public"
3389      deprecated="not deprecated">
3390      <param name="value" type="boolean"/>
3391      <doc>
3392      <![CDATA[Binds constant to the given value.]]>
3393      </doc>
3394    </method>
3395    <method name="to"
3396      abstract="false" native="false" synchronized="false"
3397      static="false" final="false" visibility="public"
3398      deprecated="not deprecated">
3399      <param name="value" type="double"/>
3400      <doc>
3401      <![CDATA[Binds constant to the given value.]]>
3402      </doc>
3403    </method>
3404    <method name="to"
3405      abstract="false" native="false" synchronized="false"
3406      static="false" final="false" visibility="public"
3407      deprecated="not deprecated">
3408      <param name="value" type="float"/>
3409      <doc>
3410      <![CDATA[Binds constant to the given value.]]>
3411      </doc>
3412    </method>
3413    <method name="to"
3414      abstract="false" native="false" synchronized="false"
3415      static="false" final="false" visibility="public"
3416      deprecated="not deprecated">
3417      <param name="value" type="short"/>
3418      <doc>
3419      <![CDATA[Binds constant to the given value.]]>
3420      </doc>
3421    </method>
3422    <method name="to"
3423      abstract="false" native="false" synchronized="false"
3424      static="false" final="false" visibility="public"
3425      deprecated="not deprecated">
3426      <param name="value" type="char"/>
3427      <doc>
3428      <![CDATA[Binds constant to the given value.]]>
3429      </doc>
3430    </method>
3431    <method name="to"
3432      abstract="false" native="false" synchronized="false"
3433      static="false" final="false" visibility="public"
3434      deprecated="not deprecated">
3435      <param name="value" type="byte"/>
3436      <doc>
3437      <![CDATA[Binds constant to the given value.
3438 
3439 @since 3.0]]>
3440      </doc>
3441    </method>
3442    <method name="to"
3443      abstract="false" native="false" synchronized="false"
3444      static="false" final="false" visibility="public"
3445      deprecated="not deprecated">
3446      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3447      <doc>
3448      <![CDATA[Binds constant to the given value.]]>
3449      </doc>
3450    </method>
3451    <method name="to"
3452      abstract="false" native="false" synchronized="false"
3453      static="false" final="false" visibility="public"
3454      deprecated="not deprecated">
3455      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3456      <doc>
3457      <![CDATA[Binds constant to the given value.]]>
3458      </doc>
3459    </method>
3460    <doc>
3461    <![CDATA[Binds to a constant value.]]>
3462    </doc>
3463  </interface>
3464  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3465  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3466  <interface name="LinkedBindingBuilder"    abstract="true"
3467    static="false" final="false" visibility="public"
3468    deprecated="not deprecated">
3469    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3470    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3471      abstract="false" native="false" synchronized="false"
3472      static="false" final="false" visibility="public"
3473      deprecated="not deprecated">
3474      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3475      <doc>
3476      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3477      </doc>
3478    </method>
3479    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3480      abstract="false" native="false" synchronized="false"
3481      static="false" final="false" visibility="public"
3482      deprecated="not deprecated">
3483      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3484      <doc>
3485      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3486      </doc>
3487    </method>
3488    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3489      abstract="false" native="false" synchronized="false"
3490      static="false" final="false" visibility="public"
3491      deprecated="not deprecated">
3492      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3493      <doc>
3494      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3495      </doc>
3496    </method>
3497    <method name="toInstance"
3498      abstract="false" native="false" synchronized="false"
3499      static="false" final="false" visibility="public"
3500      deprecated="not deprecated">
3501      <param name="instance" type="T"/>
3502      <doc>
3503      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3504
3505 @see com.google.inject.Injector#injectMembers]]>
3506      </doc>
3507    </method>
3508    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3509      abstract="false" native="false" synchronized="false"
3510      static="false" final="false" visibility="public"
3511      deprecated="not deprecated">
3512      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3513      <doc>
3514      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3515
3516 @see com.google.inject.Injector#injectMembers]]>
3517      </doc>
3518    </method>
3519    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3520      abstract="false" native="false" synchronized="false"
3521      static="false" final="false" visibility="public"
3522      deprecated="not deprecated">
3523      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3524      <doc>
3525      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3526      </doc>
3527    </method>
3528    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3529      abstract="false" native="false" synchronized="false"
3530      static="false" final="false" visibility="public"
3531      deprecated="not deprecated">
3532      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3533      <doc>
3534      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3535      </doc>
3536    </method>
3537    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3538      abstract="false" native="false" synchronized="false"
3539      static="false" final="false" visibility="public"
3540      deprecated="not deprecated">
3541      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3542      <doc>
3543      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3544      </doc>
3545    </method>
3546    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3547      abstract="false" native="false" synchronized="false"
3548      static="false" final="false" visibility="public"
3549      deprecated="not deprecated">
3550      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3551      <doc>
3552      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3553 
3554 @since 3.0]]>
3555      </doc>
3556    </method>
3557    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3558      abstract="false" native="false" synchronized="false"
3559      static="false" final="false" visibility="public"
3560      deprecated="not deprecated">
3561      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3562      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3563      <doc>
3564      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3565 
3566 @since 3.0]]>
3567      </doc>
3568    </method>
3569    <doc>
3570    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3571
3572 @author crazybob@google.com (Bob Lee)]]>
3573    </doc>
3574  </interface>
3575  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3576  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3577  <interface name="ScopedBindingBuilder"    abstract="true"
3578    static="false" final="false" visibility="public"
3579    deprecated="not deprecated">
3580    <method name="in"
3581      abstract="false" native="false" synchronized="false"
3582      static="false" final="false" visibility="public"
3583      deprecated="not deprecated">
3584      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3585      <doc>
3586      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3587      </doc>
3588    </method>
3589    <method name="in"
3590      abstract="false" native="false" synchronized="false"
3591      static="false" final="false" visibility="public"
3592      deprecated="not deprecated">
3593      <param name="scope" type="com.google.inject.Scope"/>
3594      <doc>
3595      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3596      </doc>
3597    </method>
3598    <method name="asEagerSingleton"
3599      abstract="false" native="false" synchronized="false"
3600      static="false" final="false" visibility="public"
3601      deprecated="not deprecated">
3602      <doc>
3603      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3604 singleton-scoped binding upon creation. Useful for application
3605 initialization logic.  See the EDSL examples at
3606 {@link com.google.inject.Binder}.]]>
3607      </doc>
3608    </method>
3609    <doc>
3610    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3611
3612 @author crazybob@google.com (Bob Lee)]]>
3613    </doc>
3614  </interface>
3615  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3616</package>
3617<package name="com.google.inject.grapher">
3618  <!-- start interface com.google.inject.grapher.BindingEdge -->
3619  <interface name="BindingEdge"    abstract="true"
3620    static="false" final="false" visibility="public"
3621    deprecated="not deprecated">
3622    <method name="setType"
3623      abstract="false" native="false" synchronized="false"
3624      static="false" final="false" visibility="public"
3625      deprecated="not deprecated">
3626      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
3627    </method>
3628    <doc>
3629    <![CDATA[Interface for an edge that connects an interface to the type or instance
3630 that is bound to implement it.
3631
3632 @author phopkins@gmail.com (Pete Hopkins)
3633
3634 @param <K> The type for node IDs.]]>
3635    </doc>
3636  </interface>
3637  <!-- end interface com.google.inject.grapher.BindingEdge -->
3638  <!-- start interface com.google.inject.grapher.BindingEdge.Factory -->
3639  <interface name="BindingEdge.Factory"    abstract="true"
3640    static="true" final="false" visibility="public"
3641    deprecated="not deprecated">
3642    <method name="newBindingEdge" return="T extends com.google.inject.grapher.BindingEdge&lt;K&gt;"
3643      abstract="false" native="false" synchronized="false"
3644      static="false" final="false" visibility="public"
3645      deprecated="not deprecated">
3646      <param name="fromId" type="K"/>
3647      <param name="toId" type="K"/>
3648      <doc>
3649      <![CDATA[Creates a new {@link BindingEdge} instance and adds it to the graph.
3650
3651 @param fromId Node ID for the interface node.
3652 @param toId Node ID for the implementation (class or instance) node.
3653 @return The newly created and added {@link BindingEdge}.]]>
3654      </doc>
3655    </method>
3656    <doc>
3657    <![CDATA[Factory interface for {@link BindingEdge}s. Renderer implementations will
3658 need to provide an implementation for this.
3659
3660 @param <K> The type for node IDs.
3661 @param <T> The {@link BindingEdge} sub-type that this factory provides.]]>
3662    </doc>
3663  </interface>
3664  <!-- end interface com.google.inject.grapher.BindingEdge.Factory -->
3665  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
3666  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
3667    abstract="false"
3668    static="true" final="true" visibility="public"
3669    deprecated="not deprecated">
3670    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
3671      abstract="false" native="false" synchronized="false"
3672      static="true" final="false" visibility="public"
3673      deprecated="not deprecated">
3674    </method>
3675    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
3676      abstract="false" native="false" synchronized="false"
3677      static="true" final="false" visibility="public"
3678      deprecated="not deprecated">
3679      <param name="name" type="java.lang.String"/>
3680    </method>
3681    <doc>
3682    <![CDATA[Classification for what kind of binding this edge represents.]]>
3683    </doc>
3684  </class>
3685  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
3686  <!-- start interface com.google.inject.grapher.DependencyEdge -->
3687  <interface name="DependencyEdge"    abstract="true"
3688    static="false" final="false" visibility="public"
3689    deprecated="not deprecated">
3690    <doc>
3691    <![CDATA[Interface for an edge from a class or {@link InjectionPoint} to the
3692 interface node that will satisfy the dependency.
3693
3694 @author phopkins@gmail.com (Pete Hopkins)
3695
3696 @param <K> The type for node IDs.]]>
3697    </doc>
3698  </interface>
3699  <!-- end interface com.google.inject.grapher.DependencyEdge -->
3700  <!-- start interface com.google.inject.grapher.DependencyEdge.Factory -->
3701  <interface name="DependencyEdge.Factory"    abstract="true"
3702    static="true" final="false" visibility="public"
3703    deprecated="not deprecated">
3704    <method name="newDependencyEdge" return="T extends com.google.inject.grapher.DependencyEdge&lt;K&gt;"
3705      abstract="false" native="false" synchronized="false"
3706      static="false" final="false" visibility="public"
3707      deprecated="not deprecated">
3708      <param name="fromId" type="K"/>
3709      <param name="fromPoint" type="com.google.inject.spi.InjectionPoint"/>
3710      <param name="toId" type="K"/>
3711      <doc>
3712      <![CDATA[Creates a new {@link DependencyEdge} and adds it to the graph.
3713
3714 @param fromId The ID for the class or instance node that has the
3715     dependency.
3716 @param fromPoint The point where the dependency will be
3717     {@literal @}{@link Inject}ed. 
3718 @param toId The ID for the interface node that satisfies the dependency.]]>
3719      </doc>
3720    </method>
3721    <doc>
3722    <![CDATA[Factory interface for {@link DependencyEdge}s. Renderer implementations
3723 will need to provide an implementation for this.
3724
3725 @param <K> The type for node IDs.
3726 @param <T> The {@link DependencyEdge} sub-type that this factory provides.]]>
3727    </doc>
3728  </interface>
3729  <!-- end interface com.google.inject.grapher.DependencyEdge.Factory -->
3730  <!-- start class com.google.inject.grapher.GrapherModule -->
3731  <class name="GrapherModule" extends="com.google.inject.AbstractModule"
3732    abstract="false"
3733    static="false" final="false" visibility="public"
3734    deprecated="not deprecated">
3735    <constructor name="GrapherModule"
3736      static="false" final="false" visibility="public"
3737      deprecated="not deprecated">
3738    </constructor>
3739    <method name="configure"
3740      abstract="false" native="false" synchronized="false"
3741      static="false" final="false" visibility="protected"
3742      deprecated="not deprecated">
3743    </method>
3744    <doc>
3745    <![CDATA[Module for the common bindings for {@link InjectorGrapher}. You will also
3746 need to bind a {@link Module} that satisfies the {@link Renderer}
3747 dependency.
3748 <p>
3749 If you want to use subtypes of the node and edge classes, or a different
3750 node ID type, you will need to override the {@link GraphingVisitor} binding
3751 to specify the new type parameters. 
3752
3753 @author phopkins@gmail.com (Pete Hopkins)]]>
3754    </doc>
3755  </class>
3756  <!-- end class com.google.inject.grapher.GrapherModule -->
3757  <!-- start class com.google.inject.grapher.GraphingVisitor -->
3758  <class name="GraphingVisitor" extends="java.lang.Object"
3759    abstract="false"
3760    static="false" final="false" visibility="public"
3761    deprecated="not deprecated">
3762    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.lang.Void&gt;"/>
3763    <constructor name="GraphingVisitor" type="com.google.inject.grapher.NodeIdFactory&lt;K&gt;, com.google.inject.grapher.InterfaceNode.Factory&lt;K, N&gt;, com.google.inject.grapher.ImplementationNode.Factory&lt;K, M&gt;, com.google.inject.grapher.BindingEdge.Factory&lt;K, B&gt;, com.google.inject.grapher.DependencyEdge.Factory&lt;K, D&gt;, com.google.inject.grapher.NodeAliasFactory&lt;K&gt;"
3764      static="false" final="false" visibility="public"
3765      deprecated="not deprecated">
3766    </constructor>
3767    <method name="getClassNodeId" return="K"
3768      abstract="false" native="false" synchronized="false"
3769      static="false" final="true" visibility="protected"
3770      deprecated="not deprecated">
3771      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3772      <doc>
3773      <![CDATA[Helper method to return the standard node ID for the {@link Binding}'s
3774 {@link Key}.
3775 
3776 @see NodeIdFactory#getClassNodeId(Key)]]>
3777      </doc>
3778    </method>
3779    <method name="getInstanceNodeId" return="K"
3780      abstract="false" native="false" synchronized="false"
3781      static="false" final="true" visibility="protected"
3782      deprecated="not deprecated">
3783      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3784      <doc>
3785      <![CDATA[Helper method to return the instance node ID for the {@link Binding}'s
3786 {@link Key}.
3787 
3788 @see NodeIdFactory#getInstanceNodeId(Key)]]>
3789      </doc>
3790    </method>
3791    <method name="newInterfaceNode" return="N extends com.google.inject.grapher.InterfaceNode&lt;K&gt;"
3792      abstract="false" native="false" synchronized="false"
3793      static="false" final="false" visibility="protected"
3794      deprecated="not deprecated">
3795      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3796      <doc>
3797      <![CDATA[Creates and returns a new {@link InterfaceNode} object for the given
3798 {@link Binding}.]]>
3799      </doc>
3800    </method>
3801    <method name="newClassImplementationNode" return="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
3802      abstract="false" native="false" synchronized="false"
3803      static="false" final="false" visibility="protected"
3804      deprecated="not deprecated">
3805      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3806      <param name="constructorInjectionPoint" type="com.google.inject.spi.InjectionPoint"/>
3807      <param name="memberInjectionPoints" type="java.util.Collection&lt;com.google.inject.spi.InjectionPoint&gt;"/>
3808      <doc>
3809      <![CDATA[Creates and returns a new {@link ImplementationNode} for the given
3810 {@link Binding}, where the {@link Binding} is for a class that Guice
3811 will instantiate, rather than a specific instance.]]>
3812      </doc>
3813    </method>
3814    <method name="newInstanceImplementationNode" return="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
3815      abstract="false" native="false" synchronized="false"
3816      static="false" final="false" visibility="protected"
3817      deprecated="not deprecated">
3818      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
3819      <param name="instance" type="java.lang.Object"/>
3820      <doc>
3821      <![CDATA[Creates and returns a new {@link ImplementationNode} for the given
3822 {@link Binding}, where the {@link Binding} is for an instance, rather than
3823 a class.]]>
3824      </doc>
3825    </method>
3826    <method name="newBindingEdge" return="B extends com.google.inject.grapher.BindingEdge&lt;K&gt;"
3827      abstract="false" native="false" synchronized="false"
3828      static="false" final="false" visibility="protected"
3829      deprecated="not deprecated">
3830      <param name="nodeId" type="K"/>
3831      <param name="toId" type="K"/>
3832      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
3833      <doc>
3834      <![CDATA[Creates a new {@link BindingEdge} from the given node to the specified
3835 node.
3836
3837 @param nodeId ID of the {@link InterfaceNode} that binds to the other.
3838 @param toId The node ID of a class or instance that is bound.
3839 @param type The {@link BindingEdge.Type} of this binding.
3840 @return The newly-created and added {@link BindingEdge}.]]>
3841      </doc>
3842    </method>
3843    <method name="newDependencyEdges" return="java.util.Collection&lt;D&gt;"
3844      abstract="false" native="false" synchronized="false"
3845      static="false" final="false" visibility="protected"
3846      deprecated="not deprecated">
3847      <param name="nodeId" type="K"/>
3848      <param name="node" type="M extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"/>
3849      <param name="dependencies" type="java.util.Collection&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"/>
3850      <doc>
3851      <![CDATA[Adds {@link DependencyEdge}s to the graph for each of the provided
3852 {@link Dependency}s. These will be from the given node ID to the
3853 {@link Dependency}'s {@link Key}.
3854 <p>
3855 If a {@link Dependency} has an associated {@link InjectionPoint}, its
3856 member will be added to the given {@link ImplementationNode} and the edge
3857 will start at the {@link Member}.
3858
3859 @see #newDependencyEdge(Object, InjectionPoint, Dependency)
3860 
3861 @param nodeId ID of the node that should be the tail of the
3862     {@link DependencyEdge}s.
3863 @param node An {@link ImplementationNode} to add {@link Member}s to.
3864 @param dependencies {@link Collection} of {@link Dependency}s from the
3865     {@link Binding}.
3866 @return A {@link Collection} of the {@link DependencyEdge}s that were
3867     added to the graph.]]>
3868      </doc>
3869    </method>
3870    <method name="newDependencyEdge" return="D extends com.google.inject.grapher.DependencyEdge&lt;K&gt;"
3871      abstract="false" native="false" synchronized="false"
3872      static="false" final="false" visibility="protected"
3873      deprecated="not deprecated">
3874      <param name="nodeId" type="K"/>
3875      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
3876      <param name="dependency" type="com.google.inject.spi.Dependency&lt;?&gt;"/>
3877      <doc>
3878      <![CDATA[Creates a new {@link DependencyEdge} from the given node to a
3879 {@link Dependency}.
3880 <p>
3881 This method takes more comprehensive parameters than strictly necessary
3882 in case they would be useful to overriding implementations.
3883
3884 @param nodeId ID of the {@link ImplementationNode} where the edges will start.
3885 @param injectionPoint The {@link InjectionPoint} that gave rise to this
3886     {@link Dependency}, if one exists. Used to figure out which
3887     {@link Member} the edge should point from.
3888 @param dependency The {@link Dependency} to represent with this edge.
3889 @return The newly-created and added {@link DependencyEdge}.]]>
3890      </doc>
3891    </method>
3892    <method name="visit" return="java.lang.Void"
3893      abstract="false" native="false" synchronized="false"
3894      static="false" final="false" visibility="public"
3895      deprecated="not deprecated">
3896      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
3897      <doc>
3898      <![CDATA[Visitor for {@link ConstructorBinding}s. These are for classes that Guice
3899 will instantiate to satisfy injection requests. We create a new
3900 {@link ImplementationNode} for the class, then add edges to everything
3901 that it depends on to be instantiated.
3902
3903 @see #newClassImplementationNode(Binding, InjectionPoint, Collection)
3904 @see #newDependencyEdges(Object, ImplementationNode, Collection)]]>
3905      </doc>
3906    </method>
3907    <method name="visit" return="java.lang.Void"
3908      abstract="false" native="false" synchronized="false"
3909      static="false" final="false" visibility="public"
3910      deprecated="not deprecated">
3911      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
3912      <doc>
3913      <![CDATA[Visitor for {@link ConvertedConstantBinding}. The {@link Binding}'s
3914 {@link Key} will be of an annotated primitive type, and the value of
3915 {@link ConvertedConstantBinding#getSourceKey()} will be of a
3916 {@link String} with the same annotation.
3917 <p>
3918 We render this as an {@link InterfaceNode} that has a
3919 {@link BindingEdge} to the source {@link Key}. That will then be rendered
3920 by {@link #visit(InstanceBinding)} as an {@link InterfaceNode}
3921 with a {@link BindingEdge} to the {@link String} instance.
3922 
3923 @see #newInterfaceNode(Binding)
3924 @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
3925      </doc>
3926    </method>
3927    <method name="visit" return="java.lang.Void"
3928      abstract="false" native="false" synchronized="false"
3929      static="false" final="false" visibility="public"
3930      deprecated="not deprecated">
3931      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;?&gt;"/>
3932      <doc>
3933      <![CDATA[Currently not displayed on the graph.]]>
3934      </doc>
3935    </method>
3936    <method name="visit" return="java.lang.Void"
3937      abstract="false" native="false" synchronized="false"
3938      static="false" final="false" visibility="public"
3939      deprecated="not deprecated">
3940      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
3941      <doc>
3942      <![CDATA[Visitor for {@link InstanceBinding}. We render two nodes in this case: a
3943 {@link InterfaceNode} for the binding's {@link Key}, and then an
3944 {@link ImplementationNode} for the instance {@link Object} itself. We run
3945 a binding node between them.
3946 <p>
3947 We then render any {@link DependencyEdge}s that the instance may have,
3948 which come either from {@link InjectionPoint}s (method and field) on the
3949 instance, or on {@link Dependency}s the instance declares through the
3950 {@link HasDependencies} interface.
3951 
3952 @see #newInterfaceNode(Binding)
3953 @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)
3954 @see #newInstanceImplementationNode(Binding, Object)
3955 @see #newDependencyEdges(Object, ImplementationNode, java.util.Collection)]]>
3956      </doc>
3957    </method>
3958    <method name="visit" return="java.lang.Void"
3959      abstract="false" native="false" synchronized="false"
3960      static="false" final="false" visibility="public"
3961      deprecated="not deprecated">
3962      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
3963      <doc>
3964      <![CDATA[Visitor for {@link LinkedKeyBinding}. This is the standard {@link Binding}
3965 you get from binding an interface class to an implementation class. We
3966 create an {@link InterfaceNode}, then draw a {@link BindingEdge} to the
3967 node of the implementing class.
3968 
3969 @see #newInterfaceNode(Binding)
3970 @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
3971      </doc>
3972    </method>
3973    <method name="visit" return="java.lang.Void"
3974      abstract="false" native="false" synchronized="false"
3975      static="false" final="false" visibility="public"
3976      deprecated="not deprecated">
3977      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
3978      <doc>
3979      <![CDATA[Visitor for {@link ProviderBinding}. These {@link Binding}s arise from an
3980 {@link InjectionPoint} for the {@link Provider} interface. Since this
3981 isn't tremendously interesting information, we don't render this binding
3982 on the graph, and instead let the {@link DependencyEdge} go straight from
3983 the {@link InjectionPoint} to the node specified by
3984 {@link ProviderBinding#getProvidedKey()}.
3985 
3986 @see NodeAliasFactory#newAlias(Object, Object)]]>
3987      </doc>
3988    </method>
3989    <method name="visit" return="java.lang.Void"
3990      abstract="false" native="false" synchronized="false"
3991      static="false" final="false" visibility="public"
3992      deprecated="not deprecated">
3993      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
3994      <doc>
3995      <![CDATA[Same as {@link #visit(InstanceBinding)}, but the
3996 {@link BindingEdge} is {@link BindingEdge.Type#PROVIDER}.
3997 
3998 @see #newInterfaceNode(Binding)
3999 @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)
4000 @see #newInstanceImplementationNode(Binding, Object)
4001 @see #newDependencyEdges(Object, ImplementationNode, java.util.Collection)]]>
4002      </doc>
4003    </method>
4004    <method name="visit" return="java.lang.Void"
4005      abstract="false" native="false" synchronized="false"
4006      static="false" final="false" visibility="public"
4007      deprecated="not deprecated">
4008      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4009      <doc>
4010      <![CDATA[Same as {@link #visit(LinkedKeyBinding)}, but the
4011 {@link BindingEdge} is {@link BindingEdge.Type#PROVIDER}.
4012 
4013 @see #newInterfaceNode(Binding)
4014 @see #newBindingEdge(Object, Object, com.google.inject.grapher.BindingEdge.Type)]]>
4015      </doc>
4016    </method>
4017    <method name="visit" return="java.lang.Void"
4018      abstract="false" native="false" synchronized="false"
4019      static="false" final="false" visibility="public"
4020      deprecated="not deprecated">
4021      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;?&gt;"/>
4022      <doc>
4023      <![CDATA[Currently not displayed on the graph.]]>
4024      </doc>
4025    </method>
4026    <doc>
4027    <![CDATA[{@link BindingTargetVisitor} that adds nodes and edges to the graph based on
4028 the visited {@link Binding}.
4029 <p>
4030 This class is parameterized over the four graph element types
4031 ({@link InterfaceNode}, {@link ImplementationNode}, {@link BindingEdge}, and
4032 {@link DependencyEdge}) so that you can extend those interfaces and also
4033 extend this class, and the helper methods will all return your new types.
4034 
4035 @author phopkins@gmail.com (Pete Hopkins)
4036
4037 @param <K> The type for node IDs.
4038 @param <N> Type for {@link InterfaceNode}s.
4039 @param <M> Type for {@link ImplementationNode}.s
4040 @param <B> Type for {@link BindingEdge}s.
4041 @param <D> Type for {@link DependencyEdge}s.]]>
4042    </doc>
4043  </class>
4044  <!-- end class com.google.inject.grapher.GraphingVisitor -->
4045  <!-- start interface com.google.inject.grapher.ImplementationNode -->
4046  <interface name="ImplementationNode"    abstract="true"
4047    static="false" final="false" visibility="public"
4048    deprecated="not deprecated">
4049    <method name="setClassKey"
4050      abstract="false" native="false" synchronized="false"
4051      static="false" final="false" visibility="public"
4052      deprecated="not deprecated">
4053      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4054      <doc>
4055      <![CDATA[Sets the {@link Key} that this node is for. Used when the node is
4056 representing a class that Guice will instantiate.]]>
4057      </doc>
4058    </method>
4059    <method name="setInstance"
4060      abstract="false" native="false" synchronized="false"
4061      static="false" final="false" visibility="public"
4062      deprecated="not deprecated">
4063      <param name="instance" type="java.lang.Object"/>
4064      <doc>
4065      <![CDATA[Sets the {@link Object} that's the already-created instance. Used when
4066 this node is represeting the instance instead of a class.]]>
4067      </doc>
4068    </method>
4069    <method name="setSource"
4070      abstract="false" native="false" synchronized="false"
4071      static="false" final="false" visibility="public"
4072      deprecated="not deprecated">
4073      <param name="source" type="java.lang.Object"/>
4074    </method>
4075    <method name="addMember"
4076      abstract="false" native="false" synchronized="false"
4077      static="false" final="false" visibility="public"
4078      deprecated="not deprecated">
4079      <param name="member" type="java.lang.reflect.Member"/>
4080    </method>
4081    <doc>
4082    <![CDATA[Node for classes and instances that have {@link Dependency}s and are
4083 bound to {@link InterfaceNode}s. These nodes will often have fields for
4084 {@link Member}s that are {@link InjectionPoint}s.
4085 
4086 @see DependencyEdge
4087
4088 @author phopkins@gmail.com (Pete Hopkins)
4089
4090 @param <K> The type for node IDs.]]>
4091    </doc>
4092  </interface>
4093  <!-- end interface com.google.inject.grapher.ImplementationNode -->
4094  <!-- start interface com.google.inject.grapher.ImplementationNode.Factory -->
4095  <interface name="ImplementationNode.Factory"    abstract="true"
4096    static="true" final="false" visibility="public"
4097    deprecated="not deprecated">
4098    <method name="newImplementationNode" return="T extends com.google.inject.grapher.ImplementationNode&lt;K&gt;"
4099      abstract="false" native="false" synchronized="false"
4100      static="false" final="false" visibility="public"
4101      deprecated="not deprecated">
4102      <param name="nodeId" type="K"/>
4103      <doc>
4104      <![CDATA[Creates a new {@link ImplementationNode} and adds it to the graph.
4105
4106 @param nodeId ID for the node.
4107 @return The new {@link ImplementationNode} instance.]]>
4108      </doc>
4109    </method>
4110    <doc>
4111    <![CDATA[Factory interface for {@link ImplementationNode}s. Renderer
4112 implementations will need to provide an implementation for this.
4113
4114 @param <K> The type for node IDs.
4115 @param <T> The {@link ImplementationNode} sub-type that this factory
4116     provides.]]>
4117    </doc>
4118  </interface>
4119  <!-- end interface com.google.inject.grapher.ImplementationNode.Factory -->
4120  <!-- start class com.google.inject.grapher.InjectorGrapher -->
4121  <class name="InjectorGrapher" extends="java.lang.Object"
4122    abstract="false"
4123    static="false" final="false" visibility="public"
4124    deprecated="not deprecated">
4125    <constructor name="InjectorGrapher" type="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;, com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.lang.Void&gt;, com.google.inject.grapher.Renderer"
4126      static="false" final="false" visibility="public"
4127      deprecated="not deprecated">
4128    </constructor>
4129    <method name="of" return="com.google.inject.grapher.InjectorGrapher"
4130      abstract="false" native="false" synchronized="false"
4131      static="false" final="false" visibility="public"
4132      deprecated="not deprecated">
4133      <param name="injector" type="com.google.inject.Injector"/>
4134      <doc>
4135      <![CDATA[Sets the {@link Injector} to graph.]]>
4136      </doc>
4137    </method>
4138    <method name="rootedAt" return="com.google.inject.grapher.InjectorGrapher"
4139      abstract="false" native="false" synchronized="false"
4140      static="false" final="false" visibility="public"
4141      deprecated="not deprecated">
4142      <param name="classes" type="java.lang.Class[]"/>
4143      <doc>
4144      <![CDATA[Sets an initial group of {@link Class}es to use as the starting point for
4145 the graph. The graph will be of these classes and their transitive
4146 dependencies and bindings.]]>
4147      </doc>
4148    </method>
4149    <method name="rootedAt" return="com.google.inject.grapher.InjectorGrapher"
4150      abstract="false" native="false" synchronized="false"
4151      static="false" final="false" visibility="public"
4152      deprecated="not deprecated">
4153      <param name="keys" type="com.google.inject.Key[]"/>
4154      <doc>
4155      <![CDATA[Sets an initial group of {@link Key}s to use as the starting point for
4156 the graph. The graph will be of these keys and their transitive
4157 dependencies and bindings.]]>
4158      </doc>
4159    </method>
4160    <method name="graph"
4161      abstract="false" native="false" synchronized="false"
4162      static="false" final="false" visibility="public"
4163      deprecated="not deprecated">
4164      <exception name="IOException" type="java.io.IOException"/>
4165      <doc>
4166      <![CDATA[Renders a graph with the bound {@link Renderer}. The {@link Injector}
4167 must have already been specified with {@link #of(Injector)}.]]>
4168      </doc>
4169    </method>
4170    <doc>
4171    <![CDATA[Root class for graphing an {@link Injector}. Bound in {@link GrapherModule}.
4172 <p>
4173 Use {@link #of(Injector)} to specify the {@link Injector} to use, and
4174 {@link graph()} to graph the {@link Injector} using the currently-bound
4175 {@link Renderer}.
4176 <p>
4177 By default, this will graph the entire {@link Injector}. Use
4178 {@link #rootedAt(Class...)} or {@link #rootedAt(Key...)} to specify an
4179 initial set of {@link Class}es or {@link Key}s to use, and this will graph
4180 their transitive bindings and dependencies.
4181
4182 @author phopkins@gmail.com (Pete Hopkins)]]>
4183    </doc>
4184  </class>
4185  <!-- end class com.google.inject.grapher.InjectorGrapher -->
4186  <!-- start interface com.google.inject.grapher.InterfaceNode -->
4187  <interface name="InterfaceNode"    abstract="true"
4188    static="false" final="false" visibility="public"
4189    deprecated="not deprecated">
4190    <method name="setKey"
4191      abstract="false" native="false" synchronized="false"
4192      static="false" final="false" visibility="public"
4193      deprecated="not deprecated">
4194      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4195    </method>
4196    <method name="setSource"
4197      abstract="false" native="false" synchronized="false"
4198      static="false" final="false" visibility="public"
4199      deprecated="not deprecated">
4200      <param name="source" type="java.lang.Object"/>
4201    </method>
4202    <doc>
4203    <![CDATA[Node for an interface class that has been bound to an implementation class
4204 or instance. These nodes are basically defined by a {@link Key}.
4205
4206 @see BindingEdge
4207
4208 @author phopkins@gmail.com (Pete Hopkins)
4209
4210 @param <K> The type for node IDs.]]>
4211    </doc>
4212  </interface>
4213  <!-- end interface com.google.inject.grapher.InterfaceNode -->
4214  <!-- start interface com.google.inject.grapher.InterfaceNode.Factory -->
4215  <interface name="InterfaceNode.Factory"    abstract="true"
4216    static="true" final="false" visibility="public"
4217    deprecated="not deprecated">
4218    <method name="newInterfaceNode" return="T extends com.google.inject.grapher.InterfaceNode&lt;K&gt;"
4219      abstract="false" native="false" synchronized="false"
4220      static="false" final="false" visibility="public"
4221      deprecated="not deprecated">
4222      <param name="nodeId" type="K"/>
4223      <doc>
4224      <![CDATA[Creates a new {@link InterfaceNode} and adds it to the graph.
4225
4226 @param nodeId ID for the node.
4227 @return The new {@link InterfaceNode} instance.]]>
4228      </doc>
4229    </method>
4230    <doc>
4231    <![CDATA[Factory interface for {@link InterfaceNode}s. Renderer implementations
4232 will need to provide an implementation for this.
4233
4234 @param <K> The type for node IDs.
4235 @param <T> The {@link InterfaceNode} sub-type that this factory provides.]]>
4236    </doc>
4237  </interface>
4238  <!-- end interface com.google.inject.grapher.InterfaceNode.Factory -->
4239  <!-- start interface com.google.inject.grapher.NameFactory -->
4240  <interface name="NameFactory"    abstract="true"
4241    static="false" final="false" visibility="public"
4242    deprecated="not deprecated">
4243    <method name="getMemberName" return="java.lang.String"
4244      abstract="false" native="false" synchronized="false"
4245      static="false" final="false" visibility="public"
4246      deprecated="not deprecated">
4247      <param name="member" type="java.lang.reflect.Member"/>
4248    </method>
4249    <method name="getClassName" return="java.lang.String"
4250      abstract="false" native="false" synchronized="false"
4251      static="false" final="false" visibility="public"
4252      deprecated="not deprecated">
4253      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4254    </method>
4255    <method name="getInstanceName" return="java.lang.String"
4256      abstract="false" native="false" synchronized="false"
4257      static="false" final="false" visibility="public"
4258      deprecated="not deprecated">
4259      <param name="instance" type="java.lang.Object"/>
4260    </method>
4261    <method name="getAnnotationName" return="java.lang.String"
4262      abstract="false" native="false" synchronized="false"
4263      static="false" final="false" visibility="public"
4264      deprecated="not deprecated">
4265      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4266    </method>
4267    <method name="getSourceName" return="java.lang.String"
4268      abstract="false" native="false" synchronized="false"
4269      static="false" final="false" visibility="public"
4270      deprecated="not deprecated">
4271      <param name="source" type="java.lang.Object"/>
4272    </method>
4273    <doc>
4274    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4275 display in the graph for the types that come up in {@link Binding}s.
4276
4277 @author phopkins@gmail.com (Pete Hopkins)]]>
4278    </doc>
4279  </interface>
4280  <!-- end interface com.google.inject.grapher.NameFactory -->
4281  <!-- start interface com.google.inject.grapher.NodeAliasFactory -->
4282  <interface name="NodeAliasFactory"    abstract="true"
4283    static="false" final="false" visibility="public"
4284    deprecated="not deprecated">
4285    <method name="newAlias"
4286      abstract="false" native="false" synchronized="false"
4287      static="false" final="false" visibility="public"
4288      deprecated="not deprecated">
4289      <param name="fromId" type="K"/>
4290      <param name="toId" type="K"/>
4291      <doc>
4292      <![CDATA[Makes edges that would point to {@code fromId} point to
4293 {@code toId} instead.]]>
4294      </doc>
4295    </method>
4296    <doc>
4297    <![CDATA[Factory for aliasing one node ID to another. Used when we don't want to
4298 render {@link Key}s from {@link Binding}s that are not interesting.
4299 
4300 @author phopkins@gmail.com (Pete Hopkins)]]>
4301    </doc>
4302  </interface>
4303  <!-- end interface com.google.inject.grapher.NodeAliasFactory -->
4304  <!-- start interface com.google.inject.grapher.NodeIdFactory -->
4305  <interface name="NodeIdFactory"    abstract="true"
4306    static="false" final="false" visibility="public"
4307    deprecated="not deprecated">
4308    <method name="getClassNodeId" return="K"
4309      abstract="false" native="false" synchronized="false"
4310      static="false" final="false" visibility="public"
4311      deprecated="not deprecated">
4312      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4313    </method>
4314    <method name="getInstanceNodeId" return="K"
4315      abstract="false" native="false" synchronized="false"
4316      static="false" final="false" visibility="public"
4317      deprecated="not deprecated">
4318      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4319    </method>
4320    <doc>
4321    <![CDATA[Factory for abstract identifiers for elements on the graph. Most graph nodes
4322 will correspond directly to {@link Key}s, but we do this for additional
4323 flexibility and because instances do not have separate {@link Key}s from the
4324 interfaces they are bound to.
4325 <p>
4326 Node IDs are treated as opaque values by {@link GraphingVisitor} and the
4327 other classes in this package.
4328
4329 @author phopkins@gmail.com (Pete Hopkins)
4330 
4331 @param <K> The type for node IDs.]]>
4332    </doc>
4333  </interface>
4334  <!-- end interface com.google.inject.grapher.NodeIdFactory -->
4335  <!-- start interface com.google.inject.grapher.Renderer -->
4336  <interface name="Renderer"    abstract="true"
4337    static="false" final="false" visibility="public"
4338    deprecated="not deprecated">
4339    <method name="render"
4340      abstract="false" native="false" synchronized="false"
4341      static="false" final="false" visibility="public"
4342      deprecated="not deprecated">
4343      <exception name="IOException" type="java.io.IOException"/>
4344    </method>
4345    <doc>
4346    <![CDATA[Interface for the service that renders the graph. It is assumed that the
4347 implementations for {@link BindingEdge.Factory},
4348 {@link ImplementationNode.Factory}, etc. will have direct access to the
4349 internals of the {@link Renderer} implementation, so the only external
4350 interface needed is the {@link #render()} call that {@link InjectorGrapher}
4351 calls when it's done.
4352
4353 @author phopkins@gmail.com (Pete Hopkins)]]>
4354    </doc>
4355  </interface>
4356  <!-- end interface com.google.inject.grapher.Renderer -->
4357  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4358  <class name="ShortNameFactory" extends="java.lang.Object"
4359    abstract="false"
4360    static="false" final="false" visibility="public"
4361    deprecated="not deprecated">
4362    <implements name="com.google.inject.grapher.NameFactory"/>
4363    <constructor name="ShortNameFactory"
4364      static="false" final="false" visibility="public"
4365      deprecated="not deprecated">
4366    </constructor>
4367    <method name="getMemberName" return="java.lang.String"
4368      abstract="false" native="false" synchronized="false"
4369      static="false" final="false" visibility="public"
4370      deprecated="not deprecated">
4371      <param name="member" type="java.lang.reflect.Member"/>
4372    </method>
4373    <method name="getAnnotationName" return="java.lang.String"
4374      abstract="false" native="false" synchronized="false"
4375      static="false" final="false" visibility="public"
4376      deprecated="not deprecated">
4377      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4378    </method>
4379    <method name="getClassName" return="java.lang.String"
4380      abstract="false" native="false" synchronized="false"
4381      static="false" final="false" visibility="public"
4382      deprecated="not deprecated">
4383      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4384    </method>
4385    <method name="getInstanceName" return="java.lang.String"
4386      abstract="false" native="false" synchronized="false"
4387      static="false" final="false" visibility="public"
4388      deprecated="not deprecated">
4389      <param name="instance" type="java.lang.Object"/>
4390    </method>
4391    <method name="getSourceName" return="java.lang.String"
4392      abstract="false" native="false" synchronized="false"
4393      static="false" final="false" visibility="public"
4394      deprecated="not deprecated">
4395      <param name="source" type="java.lang.Object"/>
4396      <doc>
4397      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4398 a {@link StackTraceElement} for when the binding is made to the instance,
4399 or a {@link Method} when a provider method is used.]]>
4400      </doc>
4401    </method>
4402    <method name="getFileString" return="java.lang.String"
4403      abstract="false" native="false" synchronized="false"
4404      static="false" final="false" visibility="protected"
4405      deprecated="not deprecated">
4406      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4407    </method>
4408    <method name="getMethodString" return="java.lang.String"
4409      abstract="false" native="false" synchronized="false"
4410      static="false" final="false" visibility="protected"
4411      deprecated="not deprecated">
4412      <param name="method" type="java.lang.reflect.Method"/>
4413    </method>
4414    <doc>
4415    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4416 {@link Object#toString()}s and strips package names out of them so that
4417 they'll fit on the graph.
4418
4419 @author phopkins@gmail.com (Pete Hopkins)]]>
4420    </doc>
4421  </class>
4422  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4423  <!-- start class com.google.inject.grapher.StringNodeIdFactory -->
4424  <class name="StringNodeIdFactory" extends="java.lang.Object"
4425    abstract="false"
4426    static="false" final="false" visibility="public"
4427    deprecated="not deprecated">
4428    <implements name="com.google.inject.grapher.NodeIdFactory&lt;java.lang.String&gt;"/>
4429    <constructor name="StringNodeIdFactory"
4430      static="false" final="false" visibility="public"
4431      deprecated="not deprecated">
4432    </constructor>
4433    <method name="getClassNodeId" return="java.lang.String"
4434      abstract="false" native="false" synchronized="false"
4435      static="false" final="false" visibility="public"
4436      deprecated="not deprecated">
4437      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4438    </method>
4439    <method name="getInstanceNodeId" return="java.lang.String"
4440      abstract="false" native="false" synchronized="false"
4441      static="false" final="false" visibility="public"
4442      deprecated="not deprecated">
4443      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4444    </method>
4445    <doc>
4446    <![CDATA[{@link IdFactory} implementation that for {@link String} node IDs. The IDs
4447 are comprised of letters, numbers and underscores.
4448
4449 @author phopkins@gmail.com (Pete Hopkins)]]>
4450    </doc>
4451  </class>
4452  <!-- end class com.google.inject.grapher.StringNodeIdFactory -->
4453  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4454  <class name="TransitiveDependencyVisitor" extends="java.lang.Object"
4455    abstract="false"
4456    static="false" final="false" visibility="public"
4457    deprecated="not deprecated">
4458    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;"/>
4459    <constructor name="TransitiveDependencyVisitor"
4460      static="false" final="false" visibility="public"
4461      deprecated="not deprecated">
4462    </constructor>
4463    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4464      abstract="false" native="false" synchronized="false"
4465      static="false" final="false" visibility="public"
4466      deprecated="not deprecated">
4467      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4468    </method>
4469    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4470      abstract="false" native="false" synchronized="false"
4471      static="false" final="false" visibility="public"
4472      deprecated="not deprecated">
4473      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4474    </method>
4475    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4476      abstract="false" native="false" synchronized="false"
4477      static="false" final="false" visibility="public"
4478      deprecated="not deprecated">
4479      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;?&gt;"/>
4480    </method>
4481    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4482      abstract="false" native="false" synchronized="false"
4483      static="false" final="false" visibility="public"
4484      deprecated="not deprecated">
4485      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4486    </method>
4487    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4488      abstract="false" native="false" synchronized="false"
4489      static="false" final="false" visibility="public"
4490      deprecated="not deprecated">
4491      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4492    </method>
4493    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4494      abstract="false" native="false" synchronized="false"
4495      static="false" final="false" visibility="public"
4496      deprecated="not deprecated">
4497      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4498    </method>
4499    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4500      abstract="false" native="false" synchronized="false"
4501      static="false" final="false" visibility="public"
4502      deprecated="not deprecated">
4503      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4504    </method>
4505    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4506      abstract="false" native="false" synchronized="false"
4507      static="false" final="false" visibility="public"
4508      deprecated="not deprecated">
4509      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4510    </method>
4511    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4512      abstract="false" native="false" synchronized="false"
4513      static="false" final="false" visibility="public"
4514      deprecated="not deprecated">
4515      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;?&gt;"/>
4516    </method>
4517    <doc>
4518    <![CDATA[{@link BindingTargetVisitor} that returns a {@link Collection} of the
4519 {@link Key}s of each {@link Binding}'s dependencies. Used by
4520 {@link InjectorGropher} to walk the dependency graph from a starting set of
4521 {@link Binding}s.
4522
4523 @author phopkins@gmail.com (Pete Hopkins)]]>
4524    </doc>
4525  </class>
4526  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4527</package>
4528<package name="com.google.inject.grapher.graphviz">
4529  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4530  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4531    abstract="false"
4532    static="false" final="true" visibility="public"
4533    deprecated="not deprecated">
4534    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4535      abstract="false" native="false" synchronized="false"
4536      static="true" final="false" visibility="public"
4537      deprecated="not deprecated">
4538    </method>
4539    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4540      abstract="false" native="false" synchronized="false"
4541      static="true" final="false" visibility="public"
4542      deprecated="not deprecated">
4543      <param name="name" type="java.lang.String"/>
4544    </method>
4545    <method name="toString" return="java.lang.String"
4546      abstract="false" native="false" synchronized="false"
4547      static="false" final="false" visibility="public"
4548      deprecated="not deprecated">
4549    </method>
4550    <doc>
4551    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4552 concatenation to make double arrows and such.
4553 <p>
4554 See: http://www.graphviz.org/doc/info/arrows.html
4555
4556 @author phopkins@gmail.com (Pete Hopkins)]]>
4557    </doc>
4558  </class>
4559  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4560  <!-- start class com.google.inject.grapher.graphviz.BindingEdgeFactory -->
4561  <class name="BindingEdgeFactory" extends="java.lang.Object"
4562    abstract="false"
4563    static="false" final="false" visibility="public"
4564    deprecated="not deprecated">
4565    <implements name="com.google.inject.grapher.BindingEdge.Factory&lt;java.lang.String, com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;&gt;"/>
4566    <constructor name="BindingEdgeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer"
4567      static="false" final="false" visibility="public"
4568      deprecated="not deprecated">
4569    </constructor>
4570    <method name="newBindingEdge" return="com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;"
4571      abstract="false" native="false" synchronized="false"
4572      static="false" final="false" visibility="public"
4573      deprecated="not deprecated">
4574      <param name="fromId" type="java.lang.String"/>
4575      <param name="toId" type="java.lang.String"/>
4576    </method>
4577    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor"
4578      abstract="false" native="false" synchronized="false"
4579      static="false" final="false" visibility="protected"
4580      deprecated="not deprecated">
4581      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4582    </method>
4583    <doc>
4584    <![CDATA[Graphviz-specific implementation of {@link BindingEdge.Factory}. Uses a
4585 {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizEdge}.
4586
4587 @author phopkins@gmail.com (Pete Hopkins)]]>
4588    </doc>
4589  </class>
4590  <!-- end class com.google.inject.grapher.graphviz.BindingEdgeFactory -->
4591  <!-- start class com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor -->
4592  <class name="BindingEdgeFactory.GraphvizEdgeAdaptor" extends="java.lang.Object"
4593    abstract="false"
4594    static="false" final="false" visibility="protected"
4595    deprecated="not deprecated">
4596    <implements name="com.google.inject.grapher.BindingEdge&lt;java.lang.String&gt;"/>
4597    <constructor name="BindingEdgeFactory.GraphvizEdgeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4598      static="false" final="false" visibility="public"
4599      deprecated="not deprecated">
4600    </constructor>
4601    <method name="setType"
4602      abstract="false" native="false" synchronized="false"
4603      static="false" final="false" visibility="public"
4604      deprecated="not deprecated">
4605      <param name="type" type="com.google.inject.grapher.BindingEdge.Type"/>
4606    </method>
4607    <field name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4608      transient="false" volatile="false"
4609      static="false" final="true" visibility="protected"
4610      deprecated="not deprecated">
4611    </field>
4612    <doc>
4613    <![CDATA[Adaptor class that converts {@link BindingEdge} methods to display
4614 operations on a {@link GraphvizEdge}.]]>
4615    </doc>
4616  </class>
4617  <!-- end class com.google.inject.grapher.graphviz.BindingEdgeFactory.GraphvizEdgeAdaptor -->
4618  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4619  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4620    abstract="false"
4621    static="false" final="true" visibility="public"
4622    deprecated="not deprecated">
4623    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4624      abstract="false" native="false" synchronized="false"
4625      static="true" final="false" visibility="public"
4626      deprecated="not deprecated">
4627    </method>
4628    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4629      abstract="false" native="false" synchronized="false"
4630      static="true" final="false" visibility="public"
4631      deprecated="not deprecated">
4632      <param name="name" type="java.lang.String"/>
4633    </method>
4634    <method name="toString" return="java.lang.String"
4635      abstract="false" native="false" synchronized="false"
4636      static="false" final="false" visibility="public"
4637      deprecated="not deprecated">
4638    </method>
4639    <doc>
4640    <![CDATA[Enum for the "compass point" values used to control where edge
4641 end points appear on the graph.
4642 <p>
4643 See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4644
4645 @author phopkins@gmail.com (Pete Hopkins)]]>
4646    </doc>
4647  </class>
4648  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4649  <!-- start class com.google.inject.grapher.graphviz.DependencyEdgeFactory -->
4650  <class name="DependencyEdgeFactory" extends="java.lang.Object"
4651    abstract="false"
4652    static="false" final="false" visibility="public"
4653    deprecated="not deprecated">
4654    <implements name="com.google.inject.grapher.DependencyEdge.Factory&lt;java.lang.String, com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;&gt;"/>
4655    <constructor name="DependencyEdgeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.graphviz.PortIdFactory"
4656      static="false" final="false" visibility="public"
4657      deprecated="not deprecated">
4658    </constructor>
4659    <method name="newDependencyEdge" return="com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;"
4660      abstract="false" native="false" synchronized="false"
4661      static="false" final="false" visibility="public"
4662      deprecated="not deprecated">
4663      <param name="fromId" type="java.lang.String"/>
4664      <param name="fromPoint" type="com.google.inject.spi.InjectionPoint"/>
4665      <param name="toId" type="java.lang.String"/>
4666    </method>
4667    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor"
4668      abstract="false" native="false" synchronized="false"
4669      static="false" final="false" visibility="protected"
4670      deprecated="not deprecated">
4671      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4672    </method>
4673    <doc>
4674    <![CDATA[Graphviz-specific implementation of {@link DependencyEdge.Factory}. Uses a
4675 {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizEdge}.
4676
4677 @author phopkins@gmail.com (Pete Hopkins)]]>
4678    </doc>
4679  </class>
4680  <!-- end class com.google.inject.grapher.graphviz.DependencyEdgeFactory -->
4681  <!-- start class com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor -->
4682  <class name="DependencyEdgeFactory.GraphvizEdgeAdaptor" extends="java.lang.Object"
4683    abstract="false"
4684    static="false" final="false" visibility="protected"
4685    deprecated="not deprecated">
4686    <implements name="com.google.inject.grapher.DependencyEdge&lt;java.lang.String&gt;"/>
4687    <constructor name="DependencyEdgeFactory.GraphvizEdgeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4688      static="false" final="false" visibility="public"
4689      deprecated="not deprecated">
4690    </constructor>
4691    <field name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"
4692      transient="false" volatile="false"
4693      static="false" final="true" visibility="protected"
4694      deprecated="not deprecated">
4695    </field>
4696    <doc>
4697    <![CDATA[Adaptor class that converts {@link DependencyEdge} methods to display
4698 operations on a {@link GraphvizEdge}.]]>
4699    </doc>
4700  </class>
4701  <!-- end class com.google.inject.grapher.graphviz.DependencyEdgeFactory.GraphvizEdgeAdaptor -->
4702  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4703  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4704    abstract="false"
4705    static="false" final="true" visibility="public"
4706    deprecated="not deprecated">
4707    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4708      abstract="false" native="false" synchronized="false"
4709      static="true" final="false" visibility="public"
4710      deprecated="not deprecated">
4711    </method>
4712    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4713      abstract="false" native="false" synchronized="false"
4714      static="true" final="false" visibility="public"
4715      deprecated="not deprecated">
4716      <param name="name" type="java.lang.String"/>
4717    </method>
4718    <method name="toString" return="java.lang.String"
4719      abstract="false" native="false" synchronized="false"
4720      static="false" final="false" visibility="public"
4721      deprecated="not deprecated">
4722    </method>
4723    <doc>
4724    <![CDATA[Styles for edges.
4725 <p>
4726 See: http://www.graphviz.org/doc/info/attrs.html#k:style
4727
4728 @author phopkins@gmail.com (Pete Hopkins)]]>
4729    </doc>
4730  </class>
4731  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4732  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4733  <class name="GraphvizEdge" extends="java.lang.Object"
4734    abstract="false"
4735    static="false" final="false" visibility="public"
4736    deprecated="not deprecated">
4737    <constructor name="GraphvizEdge" type="java.lang.String, java.lang.String"
4738      static="false" final="false" visibility="public"
4739      deprecated="not deprecated">
4740    </constructor>
4741    <method name="getHeadNodeId" return="java.lang.String"
4742      abstract="false" native="false" synchronized="false"
4743      static="false" final="false" visibility="public"
4744      deprecated="not deprecated">
4745    </method>
4746    <method name="getHeadPortId" return="java.lang.String"
4747      abstract="false" native="false" synchronized="false"
4748      static="false" final="false" visibility="public"
4749      deprecated="not deprecated">
4750    </method>
4751    <method name="setHeadPortId"
4752      abstract="false" native="false" synchronized="false"
4753      static="false" final="false" visibility="public"
4754      deprecated="not deprecated">
4755      <param name="headPortId" type="java.lang.String"/>
4756    </method>
4757    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4758      abstract="false" native="false" synchronized="false"
4759      static="false" final="false" visibility="public"
4760      deprecated="not deprecated">
4761    </method>
4762    <method name="setHeadCompassPoint"
4763      abstract="false" native="false" synchronized="false"
4764      static="false" final="false" visibility="public"
4765      deprecated="not deprecated">
4766      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4767    </method>
4768    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4769      abstract="false" native="false" synchronized="false"
4770      static="false" final="false" visibility="public"
4771      deprecated="not deprecated">
4772    </method>
4773    <method name="setArrowHead"
4774      abstract="false" native="false" synchronized="false"
4775      static="false" final="false" visibility="public"
4776      deprecated="not deprecated">
4777      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4778    </method>
4779    <method name="getTailNodeId" return="java.lang.String"
4780      abstract="false" native="false" synchronized="false"
4781      static="false" final="false" visibility="public"
4782      deprecated="not deprecated">
4783    </method>
4784    <method name="getTailPortId" return="java.lang.String"
4785      abstract="false" native="false" synchronized="false"
4786      static="false" final="false" visibility="public"
4787      deprecated="not deprecated">
4788    </method>
4789    <method name="setTailPortId"
4790      abstract="false" native="false" synchronized="false"
4791      static="false" final="false" visibility="public"
4792      deprecated="not deprecated">
4793      <param name="tailPortId" type="java.lang.String"/>
4794    </method>
4795    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4796      abstract="false" native="false" synchronized="false"
4797      static="false" final="false" visibility="public"
4798      deprecated="not deprecated">
4799    </method>
4800    <method name="setTailCompassPoint"
4801      abstract="false" native="false" synchronized="false"
4802      static="false" final="false" visibility="public"
4803      deprecated="not deprecated">
4804      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4805    </method>
4806    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4807      abstract="false" native="false" synchronized="false"
4808      static="false" final="false" visibility="public"
4809      deprecated="not deprecated">
4810    </method>
4811    <method name="setArrowTail"
4812      abstract="false" native="false" synchronized="false"
4813      static="false" final="false" visibility="public"
4814      deprecated="not deprecated">
4815      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4816    </method>
4817    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4818      abstract="false" native="false" synchronized="false"
4819      static="false" final="false" visibility="public"
4820      deprecated="not deprecated">
4821    </method>
4822    <method name="setStyle"
4823      abstract="false" native="false" synchronized="false"
4824      static="false" final="false" visibility="public"
4825      deprecated="not deprecated">
4826      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4827    </method>
4828    <doc>
4829    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4830 interested in drawing.
4831
4832 @author phopkins@gmail.com (Pete Hopkins)]]>
4833    </doc>
4834  </class>
4835  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4836  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
4837  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
4838    abstract="false"
4839    static="false" final="false" visibility="public"
4840    deprecated="not deprecated">
4841    <constructor name="GraphvizModule"
4842      static="false" final="false" visibility="public"
4843      deprecated="not deprecated">
4844    </constructor>
4845    <method name="configure"
4846      abstract="false" native="false" synchronized="false"
4847      static="false" final="false" visibility="protected"
4848      deprecated="not deprecated">
4849    </method>
4850    <doc>
4851    <![CDATA[Module that provides {@link GraphvizRenderer} as the {@link Renderer} and
4852 binds the other Graphviz factories.
4853
4854 @author phopkins@gmail.com (Pete Hopkins)]]>
4855    </doc>
4856  </class>
4857  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
4858  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
4859  <class name="GraphvizNode" extends="java.lang.Object"
4860    abstract="false"
4861    static="false" final="false" visibility="public"
4862    deprecated="not deprecated">
4863    <constructor name="GraphvizNode" type="java.lang.String"
4864      static="false" final="false" visibility="public"
4865      deprecated="not deprecated">
4866    </constructor>
4867    <method name="getNodeId" return="java.lang.String"
4868      abstract="false" native="false" synchronized="false"
4869      static="false" final="false" visibility="public"
4870      deprecated="not deprecated">
4871    </method>
4872    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
4873      abstract="false" native="false" synchronized="false"
4874      static="false" final="false" visibility="public"
4875      deprecated="not deprecated">
4876    </method>
4877    <method name="setShape"
4878      abstract="false" native="false" synchronized="false"
4879      static="false" final="false" visibility="public"
4880      deprecated="not deprecated">
4881      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
4882    </method>
4883    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
4884      abstract="false" native="false" synchronized="false"
4885      static="false" final="false" visibility="public"
4886      deprecated="not deprecated">
4887    </method>
4888    <method name="setStyle"
4889      abstract="false" native="false" synchronized="false"
4890      static="false" final="false" visibility="public"
4891      deprecated="not deprecated">
4892      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
4893    </method>
4894    <method name="getTitle" return="java.lang.String"
4895      abstract="false" native="false" synchronized="false"
4896      static="false" final="false" visibility="public"
4897      deprecated="not deprecated">
4898    </method>
4899    <method name="setTitle"
4900      abstract="false" native="false" synchronized="false"
4901      static="false" final="false" visibility="public"
4902      deprecated="not deprecated">
4903      <param name="title" type="java.lang.String"/>
4904    </method>
4905    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
4906      abstract="false" native="false" synchronized="false"
4907      static="false" final="false" visibility="public"
4908      deprecated="not deprecated">
4909    </method>
4910    <method name="addSubtitle"
4911      abstract="false" native="false" synchronized="false"
4912      static="false" final="false" visibility="public"
4913      deprecated="not deprecated">
4914      <param name="position" type="int"/>
4915      <param name="subtitle" type="java.lang.String"/>
4916    </method>
4917    <method name="getHeaderTextColor" return="java.lang.String"
4918      abstract="false" native="false" synchronized="false"
4919      static="false" final="false" visibility="public"
4920      deprecated="not deprecated">
4921    </method>
4922    <method name="setHeaderTextColor"
4923      abstract="false" native="false" synchronized="false"
4924      static="false" final="false" visibility="public"
4925      deprecated="not deprecated">
4926      <param name="headerTextColor" type="java.lang.String"/>
4927    </method>
4928    <method name="getHeaderBackgroundColor" return="java.lang.String"
4929      abstract="false" native="false" synchronized="false"
4930      static="false" final="false" visibility="public"
4931      deprecated="not deprecated">
4932    </method>
4933    <method name="setHeaderBackgroundColor"
4934      abstract="false" native="false" synchronized="false"
4935      static="false" final="false" visibility="public"
4936      deprecated="not deprecated">
4937      <param name="headerBackgroundColor" type="java.lang.String"/>
4938    </method>
4939    <method name="addField"
4940      abstract="false" native="false" synchronized="false"
4941      static="false" final="false" visibility="public"
4942      deprecated="not deprecated">
4943      <param name="portId" type="java.lang.String"/>
4944      <param name="title" type="java.lang.String"/>
4945    </method>
4946    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
4947      abstract="false" native="false" synchronized="false"
4948      static="false" final="false" visibility="public"
4949      deprecated="not deprecated">
4950    </method>
4951    <doc>
4952    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
4953 interested in drawing.
4954
4955 @author phopkins@gmail.com (Pete Hopkins)]]>
4956    </doc>
4957  </class>
4958  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
4959  <!-- start class com.google.inject.grapher.graphviz.GraphvizRenderer -->
4960  <class name="GraphvizRenderer" extends="java.lang.Object"
4961    abstract="false"
4962    static="false" final="false" visibility="public"
4963    deprecated="not deprecated">
4964    <implements name="com.google.inject.grapher.Renderer"/>
4965    <implements name="com.google.inject.grapher.NodeAliasFactory&lt;java.lang.String&gt;"/>
4966    <constructor name="GraphvizRenderer"
4967      static="false" final="false" visibility="public"
4968      deprecated="not deprecated">
4969    </constructor>
4970    <method name="setOut" return="com.google.inject.grapher.graphviz.GraphvizRenderer"
4971      abstract="false" native="false" synchronized="false"
4972      static="false" final="false" visibility="public"
4973      deprecated="not deprecated">
4974      <param name="out" type="java.io.PrintWriter"/>
4975    </method>
4976    <method name="setRankdir" return="com.google.inject.grapher.graphviz.GraphvizRenderer"
4977      abstract="false" native="false" synchronized="false"
4978      static="false" final="false" visibility="public"
4979      deprecated="not deprecated">
4980      <param name="rankdir" type="java.lang.String"/>
4981    </method>
4982    <method name="addNode"
4983      abstract="false" native="false" synchronized="false"
4984      static="false" final="false" visibility="public"
4985      deprecated="not deprecated">
4986      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
4987    </method>
4988    <method name="addEdge"
4989      abstract="false" native="false" synchronized="false"
4990      static="false" final="false" visibility="public"
4991      deprecated="not deprecated">
4992      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
4993    </method>
4994    <method name="newAlias"
4995      abstract="false" native="false" synchronized="false"
4996      static="false" final="false" visibility="public"
4997      deprecated="not deprecated">
4998      <param name="fromId" type="java.lang.String"/>
4999      <param name="toId" type="java.lang.String"/>
5000    </method>
5001    <method name="resolveAlias" return="java.lang.String"
5002      abstract="false" native="false" synchronized="false"
5003      static="false" final="false" visibility="protected"
5004      deprecated="not deprecated">
5005      <param name="id" type="java.lang.String"/>
5006    </method>
5007    <method name="render"
5008      abstract="false" native="false" synchronized="false"
5009      static="false" final="false" visibility="public"
5010      deprecated="not deprecated">
5011    </method>
5012    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5013      abstract="false" native="false" synchronized="false"
5014      static="false" final="false" visibility="protected"
5015      deprecated="not deprecated">
5016    </method>
5017    <method name="start"
5018      abstract="false" native="false" synchronized="false"
5019      static="false" final="false" visibility="protected"
5020      deprecated="not deprecated">
5021    </method>
5022    <method name="finish"
5023      abstract="false" native="false" synchronized="false"
5024      static="false" final="false" visibility="protected"
5025      deprecated="not deprecated">
5026    </method>
5027    <method name="renderNode"
5028      abstract="false" native="false" synchronized="false"
5029      static="false" final="false" visibility="protected"
5030      deprecated="not deprecated">
5031      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5032    </method>
5033    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5034      abstract="false" native="false" synchronized="false"
5035      static="false" final="false" visibility="protected"
5036      deprecated="not deprecated">
5037      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5038    </method>
5039    <method name="getNodeLabel" return="java.lang.String"
5040      abstract="false" native="false" synchronized="false"
5041      static="false" final="false" visibility="protected"
5042      deprecated="not deprecated">
5043      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5044      <doc>
5045      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5046 table with a heading at the top and (in the case of
5047 {@link ImplementationNode}s) rows for each of the member fields.]]>
5048      </doc>
5049    </method>
5050    <method name="renderEdge"
5051      abstract="false" native="false" synchronized="false"
5052      static="false" final="false" visibility="protected"
5053      deprecated="not deprecated">
5054      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5055    </method>
5056    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5057      abstract="false" native="false" synchronized="false"
5058      static="false" final="false" visibility="protected"
5059      deprecated="not deprecated">
5060      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5061    </method>
5062    <method name="getArrowString" return="java.lang.String"
5063      abstract="false" native="false" synchronized="false"
5064      static="false" final="false" visibility="protected"
5065      deprecated="not deprecated">
5066      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5067      <doc>
5068      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5069 represents combining them. With Graphviz, that just means concatenating
5070 them.]]>
5071      </doc>
5072    </method>
5073    <method name="getEdgeEndPoint" return="java.lang.String"
5074      abstract="false" native="false" synchronized="false"
5075      static="false" final="false" visibility="protected"
5076      deprecated="not deprecated">
5077      <param name="nodeId" type="java.lang.String"/>
5078      <param name="portId" type="java.lang.String"/>
5079      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5080    </method>
5081    <method name="htmlEscape" return="java.lang.String"
5082      abstract="false" native="false" synchronized="false"
5083      static="false" final="false" visibility="protected"
5084      deprecated="not deprecated">
5085      <param name="str" type="java.lang.String"/>
5086    </method>
5087    <doc>
5088    <![CDATA[{@link Renderer} implementation that writes out a Graphviz DOT file of the
5089 graph. Bound in {@link GraphvizModule}.
5090 <p>
5091 Specify the {@link PrintWriter} to output to with
5092 {@link #setOut(PrintWriter)}.
5093
5094 @author phopkins@gmail.com (Pete Hopkins)]]>
5095    </doc>
5096  </class>
5097  <!-- end class com.google.inject.grapher.graphviz.GraphvizRenderer -->
5098  <!-- start class com.google.inject.grapher.graphviz.ImplementationNodeFactory -->
5099  <class name="ImplementationNodeFactory" extends="java.lang.Object"
5100    abstract="false"
5101    static="false" final="false" visibility="public"
5102    deprecated="not deprecated">
5103    <implements name="com.google.inject.grapher.ImplementationNode.Factory&lt;java.lang.String, com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;&gt;"/>
5104    <constructor name="ImplementationNodeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.NameFactory, com.google.inject.grapher.graphviz.PortIdFactory"
5105      static="false" final="false" visibility="public"
5106      deprecated="not deprecated">
5107    </constructor>
5108    <method name="newImplementationNode" return="com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;"
5109      abstract="false" native="false" synchronized="false"
5110      static="false" final="false" visibility="public"
5111      deprecated="not deprecated">
5112      <param name="nodeId" type="java.lang.String"/>
5113    </method>
5114    <method name="newAdaptor" return="com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor"
5115      abstract="false" native="false" synchronized="false"
5116      static="false" final="false" visibility="protected"
5117      deprecated="not deprecated">
5118      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5119    </method>
5120    <doc>
5121    <![CDATA[Graphviz-specific implementation of {@link ImplementationNode.Factory}. Uses
5122 a {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizNode}.
5123
5124 @author phopkins@gmail.com (Pete Hopkins)]]>
5125    </doc>
5126  </class>
5127  <!-- end class com.google.inject.grapher.graphviz.ImplementationNodeFactory -->
5128  <!-- start class com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor -->
5129  <class name="ImplementationNodeFactory.GraphvizNodeAdaptor" extends="java.lang.Object"
5130    abstract="false"
5131    static="false" final="false" visibility="protected"
5132    deprecated="not deprecated">
5133    <implements name="com.google.inject.grapher.ImplementationNode&lt;java.lang.String&gt;"/>
5134    <constructor name="ImplementationNodeFactory.GraphvizNodeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizNode"
5135      static="false" final="false" visibility="public"
5136      deprecated="not deprecated">
5137    </constructor>
5138    <method name="setClassKey"
5139      abstract="false" native="false" synchronized="false"
5140      static="false" final="false" visibility="public"
5141      deprecated="not deprecated">
5142      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
5143    </method>
5144    <method name="setInstance"
5145      abstract="false" native="false" synchronized="false"
5146      static="false" final="false" visibility="public"
5147      deprecated="not deprecated">
5148      <param name="instance" type="java.lang.Object"/>
5149    </method>
5150    <method name="setSource"
5151      abstract="false" native="false" synchronized="false"
5152      static="false" final="false" visibility="public"
5153      deprecated="not deprecated">
5154      <param name="source" type="java.lang.Object"/>
5155    </method>
5156    <method name="addMember"
5157      abstract="false" native="false" synchronized="false"
5158      static="false" final="false" visibility="public"
5159      deprecated="not deprecated">
5160      <param name="member" type="java.lang.reflect.Member"/>
5161    </method>
5162    <field name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"
5163      transient="false" volatile="false"
5164      static="false" final="true" visibility="protected"
5165      deprecated="not deprecated">
5166    </field>
5167    <doc>
5168    <![CDATA[Adaptor class that converts {@link ImplementationNode} methods to display
5169 operations on a {@link GraphvizNode}.]]>
5170    </doc>
5171  </class>
5172  <!-- end class com.google.inject.grapher.graphviz.ImplementationNodeFactory.GraphvizNodeAdaptor -->
5173  <!-- start class com.google.inject.grapher.graphviz.InterfaceNodeFactory -->
5174  <class name="InterfaceNodeFactory" extends="java.lang.Object"
5175    abstract="false"
5176    static="false" final="false" visibility="public"
5177    deprecated="not deprecated">
5178    <implements name="com.google.inject.grapher.InterfaceNode.Factory&lt;java.lang.String, com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;&gt;"/>
5179    <constructor name="InterfaceNodeFactory" type="com.google.inject.grapher.graphviz.GraphvizRenderer, com.google.inject.grapher.NameFactory"
5180      static="false" final="false" visibility="public"
5181      deprecated="not deprecated">
5182    </constructor>
5183    <method name="newInterfaceNode" return="com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;"
5184      abstract="false" native="false" synchronized="false"
5185      static="false" final="false" visibility="public"
5186      deprecated="not deprecated">
5187      <param name="nodeId" type="java.lang.String"/>
5188    </method>
5189    <doc>
5190    <![CDATA[Graphviz-specific implementation of {@link InterfaceNode.Factory}. Uses
5191 a {@link GraphvizEdgeAdaptor} to delegate to a {@link GraphvizNode}.
5192
5193 @author phopkins@gmail.com (Pete Hopkins)]]>
5194    </doc>
5195  </class>
5196  <!-- end class com.google.inject.grapher.graphviz.InterfaceNodeFactory -->
5197  <!-- start class com.google.inject.grapher.graphviz.InterfaceNodeFactory.GraphvizNodeAdaptor -->
5198  <class name="InterfaceNodeFactory.GraphvizNodeAdaptor" extends="java.lang.Object"
5199    abstract="false"
5200    static="false" final="false" visibility="protected"
5201    deprecated="not deprecated">
5202    <implements name="com.google.inject.grapher.InterfaceNode&lt;java.lang.String&gt;"/>
5203    <constructor name="InterfaceNodeFactory.GraphvizNodeAdaptor" type="com.google.inject.grapher.graphviz.GraphvizNode"
5204      static="false" final="false" visibility="public"
5205      deprecated="not deprecated">
5206    </constructor>
5207    <method name="setKey"
5208      abstract="false" native="false" synchronized="false"
5209      static="false" final="false" visibility="public"
5210      deprecated="not deprecated">
5211      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
5212    </method>
5213    <method name="setSource"
5214      abstract="false" native="false" synchronized="false"
5215      static="false" final="false" visibility="public"
5216      deprecated="not deprecated">
5217      <param name="source" type="java.lang.Object"/>
5218    </method>
5219    <field name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"
5220      transient="false" volatile="false"
5221      static="false" final="true" visibility="protected"
5222      deprecated="not deprecated">
5223    </field>
5224    <doc>
5225    <![CDATA[Adaptor class that converts {@link InterfaceNode} methods to display
5226 operations on a {@link GraphvizNode}.]]>
5227    </doc>
5228  </class>
5229  <!-- end class com.google.inject.grapher.graphviz.InterfaceNodeFactory.GraphvizNodeAdaptor -->
5230  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5231  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5232    abstract="false"
5233    static="false" final="true" visibility="public"
5234    deprecated="not deprecated">
5235    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5236      abstract="false" native="false" synchronized="false"
5237      static="true" final="false" visibility="public"
5238      deprecated="not deprecated">
5239    </method>
5240    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5241      abstract="false" native="false" synchronized="false"
5242      static="true" final="false" visibility="public"
5243      deprecated="not deprecated">
5244      <param name="name" type="java.lang.String"/>
5245    </method>
5246    <method name="toString" return="java.lang.String"
5247      abstract="false" native="false" synchronized="false"
5248      static="false" final="false" visibility="public"
5249      deprecated="not deprecated">
5250    </method>
5251    <doc>
5252    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5253 <p>
5254 See: http://www.graphviz.org/doc/info/shapes.html
5255 
5256 @author phopkins@gmail.com (Pete Hopkins)]]>
5257    </doc>
5258  </class>
5259  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5260  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5261  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5262    abstract="false"
5263    static="false" final="true" visibility="public"
5264    deprecated="not deprecated">
5265    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5266      abstract="false" native="false" synchronized="false"
5267      static="true" final="false" visibility="public"
5268      deprecated="not deprecated">
5269    </method>
5270    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5271      abstract="false" native="false" synchronized="false"
5272      static="true" final="false" visibility="public"
5273      deprecated="not deprecated">
5274      <param name="name" type="java.lang.String"/>
5275    </method>
5276    <method name="toString" return="java.lang.String"
5277      abstract="false" native="false" synchronized="false"
5278      static="false" final="false" visibility="public"
5279      deprecated="not deprecated">
5280    </method>
5281    <doc>
5282    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5283 <p>
5284 See: http://www.graphviz.org/doc/info/attrs.html#k:style
5285
5286 @author phopkins@gmail.com (Pete Hopkins)]]>
5287    </doc>
5288  </class>
5289  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5290  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5291  <interface name="PortIdFactory"    abstract="true"
5292    static="false" final="false" visibility="public"
5293    deprecated="not deprecated">
5294    <method name="getPortId" return="java.lang.String"
5295      abstract="false" native="false" synchronized="false"
5296      static="false" final="false" visibility="public"
5297      deprecated="not deprecated">
5298      <param name="member" type="java.lang.reflect.Member"/>
5299    </method>
5300    <doc>
5301    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5302 rows in {@link ImplementationNode}-displaying {@link GraphvizNode}s.
5303 Implemented by {@link StringNodeIdFactory}.
5304
5305 @author phopkins@gmail.com (Pete Hopkins)]]>
5306    </doc>
5307  </interface>
5308  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5309  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5310  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5311    abstract="false"
5312    static="false" final="false" visibility="public"
5313    deprecated="not deprecated">
5314    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5315    <constructor name="PortIdFactoryImpl"
5316      static="false" final="false" visibility="public"
5317      deprecated="not deprecated">
5318    </constructor>
5319    <method name="getPortId" return="java.lang.String"
5320      abstract="false" native="false" synchronized="false"
5321      static="false" final="false" visibility="public"
5322      deprecated="not deprecated">
5323      <param name="member" type="java.lang.reflect.Member"/>
5324    </method>
5325    <doc>
5326    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5327
5328 @author phopkins@gmail.com (Pete Hopkins)]]>
5329    </doc>
5330  </class>
5331  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5332</package>
5333<package name="com.google.inject.jndi">
5334  <!-- start class com.google.inject.jndi.JndiIntegration -->
5335  <class name="JndiIntegration" extends="java.lang.Object"
5336    abstract="false"
5337    static="false" final="false" visibility="public"
5338    deprecated="not deprecated">
5339    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5340      abstract="false" native="false" synchronized="false"
5341      static="true" final="false" visibility="public"
5342      deprecated="not deprecated">
5343      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5344      <param name="name" type="java.lang.String"/>
5345      <doc>
5346      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5347 Example usage:
5348
5349 <pre>
5350 bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5351 </pre>]]>
5352      </doc>
5353    </method>
5354    <doc>
5355    <![CDATA[Integrates Guice with JNDI. Requires a binding to 
5356 {@link javax.naming.Context}.
5357
5358 @author crazybob@google.com (Bob Lee)]]>
5359    </doc>
5360  </class>
5361  <!-- end class com.google.inject.jndi.JndiIntegration -->
5362</package>
5363<package name="com.google.inject.matcher">
5364  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5365  <class name="AbstractMatcher" extends="java.lang.Object"
5366    abstract="true"
5367    static="false" final="false" visibility="public"
5368    deprecated="not deprecated">
5369    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5370    <constructor name="AbstractMatcher"
5371      static="false" final="false" visibility="public"
5372      deprecated="not deprecated">
5373    </constructor>
5374    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5375      abstract="false" native="false" synchronized="false"
5376      static="false" final="false" visibility="public"
5377      deprecated="not deprecated">
5378      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5379    </method>
5380    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5381      abstract="false" native="false" synchronized="false"
5382      static="false" final="false" visibility="public"
5383      deprecated="not deprecated">
5384      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5385    </method>
5386    <doc>
5387    <![CDATA[Implements {@code and()} and {@code or()}.
5388
5389 @author crazybob@google.com (Bob Lee)]]>
5390    </doc>
5391  </class>
5392  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5393  <!-- start interface com.google.inject.matcher.Matcher -->
5394  <interface name="Matcher"    abstract="true"
5395    static="false" final="false" visibility="public"
5396    deprecated="not deprecated">
5397    <method name="matches" return="boolean"
5398      abstract="false" native="false" synchronized="false"
5399      static="false" final="false" visibility="public"
5400      deprecated="not deprecated">
5401      <param name="t" type="T"/>
5402      <doc>
5403      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5404      </doc>
5405    </method>
5406    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5407      abstract="false" native="false" synchronized="false"
5408      static="false" final="false" visibility="public"
5409      deprecated="not deprecated">
5410      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5411      <doc>
5412      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5413 given matcher return {@code true}.]]>
5414      </doc>
5415    </method>
5416    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5417      abstract="false" native="false" synchronized="false"
5418      static="false" final="false" visibility="public"
5419      deprecated="not deprecated">
5420      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5421      <doc>
5422      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5423 given matcher return {@code true}.]]>
5424      </doc>
5425    </method>
5426    <doc>
5427    <![CDATA[Returns {@code true} or {@code false} for a given input.
5428
5429 @author crazybob@google.com (Bob Lee)]]>
5430    </doc>
5431  </interface>
5432  <!-- end interface com.google.inject.matcher.Matcher -->
5433  <!-- start class com.google.inject.matcher.Matchers -->
5434  <class name="Matchers" extends="java.lang.Object"
5435    abstract="false"
5436    static="false" final="false" visibility="public"
5437    deprecated="not deprecated">
5438    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5439      abstract="false" native="false" synchronized="false"
5440      static="true" final="false" visibility="public"
5441      deprecated="not deprecated">
5442      <doc>
5443      <![CDATA[Returns a matcher which matches any input.]]>
5444      </doc>
5445    </method>
5446    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5447      abstract="false" native="false" synchronized="false"
5448      static="true" final="false" visibility="public"
5449      deprecated="not deprecated">
5450      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5451      <doc>
5452      <![CDATA[Inverts the given matcher.]]>
5453      </doc>
5454    </method>
5455    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5456      abstract="false" native="false" synchronized="false"
5457      static="true" final="false" visibility="public"
5458      deprecated="not deprecated">
5459      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5460      <doc>
5461      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5462 with a given annotation.]]>
5463      </doc>
5464    </method>
5465    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5466      abstract="false" native="false" synchronized="false"
5467      static="true" final="false" visibility="public"
5468      deprecated="not deprecated">
5469      <param name="annotation" type="java.lang.annotation.Annotation"/>
5470      <doc>
5471      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5472 with a given annotation.]]>
5473      </doc>
5474    </method>
5475    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5476      abstract="false" native="false" synchronized="false"
5477      static="true" final="false" visibility="public"
5478      deprecated="not deprecated">
5479      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5480      <doc>
5481      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5482 the given type).]]>
5483      </doc>
5484    </method>
5485    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5486      abstract="false" native="false" synchronized="false"
5487      static="true" final="false" visibility="public"
5488      deprecated="not deprecated">
5489      <param name="value" type="java.lang.Object"/>
5490      <doc>
5491      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5492      </doc>
5493    </method>
5494    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5495      abstract="false" native="false" synchronized="false"
5496      static="true" final="false" visibility="public"
5497      deprecated="not deprecated">
5498      <param name="value" type="java.lang.Object"/>
5499      <doc>
5500      <![CDATA[Returns a matcher which matches only the given object.]]>
5501      </doc>
5502    </method>
5503    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5504      abstract="false" native="false" synchronized="false"
5505      static="true" final="false" visibility="public"
5506      deprecated="not deprecated">
5507      <param name="targetPackage" type="java.lang.Package"/>
5508      <doc>
5509      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5510 classloader, so classes with the same package name may not have the same package at runtime.]]>
5511      </doc>
5512    </method>
5513    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5514      abstract="false" native="false" synchronized="false"
5515      static="true" final="false" visibility="public"
5516      deprecated="not deprecated">
5517      <param name="targetPackageName" type="java.lang.String"/>
5518      <doc>
5519      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5520 {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5521 
5522 @since 2.0]]>
5523      </doc>
5524    </method>
5525    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5526      abstract="false" native="false" synchronized="false"
5527      static="true" final="false" visibility="public"
5528      deprecated="not deprecated">
5529      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5530      <doc>
5531      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5532      </doc>
5533    </method>
5534    <doc>
5535    <![CDATA[Matcher implementations. Supports matching classes and methods.
5536
5537 @author crazybob@google.com (Bob Lee)]]>
5538    </doc>
5539  </class>
5540  <!-- end class com.google.inject.matcher.Matchers -->
5541</package>
5542<package name="com.google.inject.multibindings">
5543  <!-- start class com.google.inject.multibindings.MapBinder -->
5544  <class name="MapBinder" extends="java.lang.Object"
5545    abstract="true"
5546    static="false" final="false" visibility="public"
5547    deprecated="not deprecated">
5548    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5549      abstract="false" native="false" synchronized="false"
5550      static="true" final="false" visibility="public"
5551      deprecated="not deprecated">
5552      <param name="binder" type="com.google.inject.Binder"/>
5553      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5554      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5555      <doc>
5556      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5557 {@link Map} that is itself bound with no binding annotation.]]>
5558      </doc>
5559    </method>
5560    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5561      abstract="false" native="false" synchronized="false"
5562      static="true" final="false" visibility="public"
5563      deprecated="not deprecated">
5564      <param name="binder" type="com.google.inject.Binder"/>
5565      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5566      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5567      <doc>
5568      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5569 {@link Map} that is itself bound with no binding annotation.]]>
5570      </doc>
5571    </method>
5572    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5573      abstract="false" native="false" synchronized="false"
5574      static="true" final="false" visibility="public"
5575      deprecated="not deprecated">
5576      <param name="binder" type="com.google.inject.Binder"/>
5577      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5578      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5579      <param name="annotation" type="java.lang.annotation.Annotation"/>
5580      <doc>
5581      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5582 {@link Map} that is itself bound with {@code annotation}.]]>
5583      </doc>
5584    </method>
5585    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5586      abstract="false" native="false" synchronized="false"
5587      static="true" final="false" visibility="public"
5588      deprecated="not deprecated">
5589      <param name="binder" type="com.google.inject.Binder"/>
5590      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5591      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5592      <param name="annotation" type="java.lang.annotation.Annotation"/>
5593      <doc>
5594      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5595 {@link Map} that is itself bound with {@code annotation}.]]>
5596      </doc>
5597    </method>
5598    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5599      abstract="false" native="false" synchronized="false"
5600      static="true" final="false" visibility="public"
5601      deprecated="not deprecated">
5602      <param name="binder" type="com.google.inject.Binder"/>
5603      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5604      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5605      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5606      <doc>
5607      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5608 {@link Map} that is itself bound with {@code annotationType}.]]>
5609      </doc>
5610    </method>
5611    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5612      abstract="false" native="false" synchronized="false"
5613      static="true" final="false" visibility="public"
5614      deprecated="not deprecated">
5615      <param name="binder" type="com.google.inject.Binder"/>
5616      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5617      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5618      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5619      <doc>
5620      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5621 {@link Map} that is itself bound with {@code annotationType}.]]>
5622      </doc>
5623    </method>
5624    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5625      abstract="true" native="false" synchronized="false"
5626      static="false" final="false" visibility="public"
5627      deprecated="not deprecated">
5628      <doc>
5629      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5630 <p>When multiple equal keys are bound, the value that gets included in the map is
5631 arbitrary.
5632 <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5633 maps that are normally bound, a {@code Map<K, Set<V>>} and
5634 {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5635 all values bound to each key.
5636 <p>
5637 When multiple modules contribute elements to the map, this configuration
5638 option impacts all of them.
5639
5640 @return this map binder
5641 @since 3.0]]>
5642      </doc>
5643    </method>
5644    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5645      abstract="true" native="false" synchronized="false"
5646      static="false" final="false" visibility="public"
5647      deprecated="not deprecated">
5648      <param name="key" type="K"/>
5649      <doc>
5650      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5651 key must be distinct (and non-null). Bound providers will be evaluated each
5652 time the map is injected.
5653
5654 <p>It is an error to call this method without also calling one of the
5655 {@code to} methods on the returned binding builder.
5656
5657 <p>Scoping elements independently is supported. Use the {@code in} method
5658 to specify a binding scope.]]>
5659      </doc>
5660    </method>
5661    <doc>
5662    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5663 a complete map. MapBinder is intended for use in your application's module:
5664 <pre><code>
5665 public class SnacksModule extends AbstractModule {
5666   protected void configure() {
5667     MapBinder&lt;String, Snack&gt; mapbinder
5668         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5669     mapbinder.addBinding("twix").toInstance(new Twix());
5670     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5671     mapbinder.addBinding("skittles").to(Skittles.class);
5672   }
5673 }</code></pre>
5674
5675 <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5676 injected:
5677 <pre><code>
5678 class SnackMachine {
5679   {@literal @}Inject
5680   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5681 }</code></pre>
5682
5683 <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5684 {@code Map<K, Provider<V>>} for lazy value provision:
5685 <pre><code>
5686 class SnackMachine {
5687   {@literal @}Inject
5688   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5689 }</code></pre>
5690
5691 <p>Contributing mapbindings from different modules is supported. For example,
5692 it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5693 create their own {@code MapBinder<String, Snack>}, and to each contribute
5694 bindings to the snacks map. When that map is injected, it will contain
5695 entries from both modules.
5696
5697 <p>The map's iteration order is consistent with the binding order. This is
5698 convenient when multiple elements are contributed by the same module because
5699 that module can order its bindings appropriately. Avoid relying on the
5700 iteration order of elements contributed by different modules, since there is
5701 no equivalent mechanism to order modules.
5702 
5703 <p>The map is unmodifiable.  Elements can only be added to the map by
5704 configuring the MapBinder.  Elements can never be removed from the map.
5705
5706 <p>Values are resolved at map injection time. If a value is bound to a
5707 provider, that provider's get method will be called each time the map is
5708 injected (unless the binding is also scoped, or a map of providers is injected).
5709
5710 <p>Annotations are used to create different maps of the same key/value
5711 type. Each distinct annotation gets its own independent map.
5712
5713 <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5714 once, map injection will fail. However, use {@link #permitDuplicates()} in
5715 order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5716 {@code Map<K, Set<Provider<V>>} will be added.
5717
5718 <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5719 throw an unchecked exception.
5720
5721 <p><strong>Values must be non-null to use map injection.</strong> If any
5722 value is null, map injection will fail (although injecting a map of providers
5723 will not).
5724
5725 @author dpb@google.com (David P. Baker)]]>
5726    </doc>
5727  </class>
5728  <!-- end class com.google.inject.multibindings.MapBinder -->
5729  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5730  <interface name="MapBinderBinding"    abstract="true"
5731    static="false" final="false" visibility="public"
5732    deprecated="not deprecated">
5733    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5734      abstract="false" native="false" synchronized="false"
5735      static="false" final="false" visibility="public"
5736      deprecated="not deprecated">
5737      <doc>
5738      <![CDATA[Returns the {@link Key} for the map.]]>
5739      </doc>
5740    </method>
5741    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5742      abstract="false" native="false" synchronized="false"
5743      static="false" final="false" visibility="public"
5744      deprecated="not deprecated">
5745      <doc>
5746      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5747 <p>
5748 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5749 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5750 <code>TypeLiteral&lt;String></code>.]]>
5751      </doc>
5752    </method>
5753    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5754      abstract="false" native="false" synchronized="false"
5755      static="false" final="false" visibility="public"
5756      deprecated="not deprecated">
5757      <doc>
5758      <![CDATA[Returns the TypeLiteral describing the values of the map.
5759 <p>
5760 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5761 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5762 <code>TypeLiteral&lt;Snack></code>.]]>
5763      </doc>
5764    </method>
5765    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5766      abstract="false" native="false" synchronized="false"
5767      static="false" final="false" visibility="public"
5768      deprecated="not deprecated">
5769      <doc>
5770      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5771 to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5772 This is only supported on bindings returned from an injector. This will throw
5773 {@link UnsupportedOperationException} if it is called on an element retrieved from
5774 {@link Elements#getElements}.
5775 <p>
5776 The elements will always match the type Map's generic type. For example, if getMapKey returns a
5777 key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5778 <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5779      </doc>
5780    </method>
5781    <method name="permitsDuplicates" return="boolean"
5782      abstract="false" native="false" synchronized="false"
5783      static="false" final="false" visibility="public"
5784      deprecated="not deprecated">
5785      <doc>
5786      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5787 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5788 MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5789      </doc>
5790    </method>
5791    <method name="containsElement" return="boolean"
5792      abstract="false" native="false" synchronized="false"
5793      static="false" final="false" visibility="public"
5794      deprecated="not deprecated">
5795      <param name="element" type="com.google.inject.spi.Element"/>
5796      <doc>
5797      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5798 given Element in order to support building and injecting the map. This will work for
5799 MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5800 only necessary if you are working with elements retrieved from modules (without an Injector),
5801 otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5802 <p>
5803 If you need to introspect the details of the map, such as the keys, values or if it permits
5804 duplicates, it is necessary to pass the elements through an Injector and use
5805 {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5806      </doc>
5807    </method>
5808    <doc>
5809    <![CDATA[A binding for a MapBinder.
5810 <p>
5811 Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5812 &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5813 Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5814 MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5815 bindings can be validated to be derived from this MapBinderBinding using
5816 {@link #containsElement(Element)}.
5817 
5818 @param <T> The fully qualified type of the map, including Map. For example:
5819          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5820 
5821 @since 3.0
5822 @author sameb@google.com (Sam Berlin)]]>
5823    </doc>
5824  </interface>
5825  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5826  <!-- start class com.google.inject.multibindings.Multibinder -->
5827  <class name="Multibinder" extends="java.lang.Object"
5828    abstract="true"
5829    static="false" final="false" visibility="public"
5830    deprecated="not deprecated">
5831    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5832      abstract="false" native="false" synchronized="false"
5833      static="true" final="false" visibility="public"
5834      deprecated="not deprecated">
5835      <param name="binder" type="com.google.inject.Binder"/>
5836      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5837      <doc>
5838      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5839 itself bound with no binding annotation.]]>
5840      </doc>
5841    </method>
5842    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5843      abstract="false" native="false" synchronized="false"
5844      static="true" final="false" visibility="public"
5845      deprecated="not deprecated">
5846      <param name="binder" type="com.google.inject.Binder"/>
5847      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5848      <doc>
5849      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5850 itself bound with no binding annotation.]]>
5851      </doc>
5852    </method>
5853    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5854      abstract="false" native="false" synchronized="false"
5855      static="true" final="false" visibility="public"
5856      deprecated="not deprecated">
5857      <param name="binder" type="com.google.inject.Binder"/>
5858      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5859      <param name="annotation" type="java.lang.annotation.Annotation"/>
5860      <doc>
5861      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5862 itself bound with {@code annotation}.]]>
5863      </doc>
5864    </method>
5865    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5866      abstract="false" native="false" synchronized="false"
5867      static="true" final="false" visibility="public"
5868      deprecated="not deprecated">
5869      <param name="binder" type="com.google.inject.Binder"/>
5870      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5871      <param name="annotation" type="java.lang.annotation.Annotation"/>
5872      <doc>
5873      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5874 itself bound with {@code annotation}.]]>
5875      </doc>
5876    </method>
5877    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5878      abstract="false" native="false" synchronized="false"
5879      static="true" final="false" visibility="public"
5880      deprecated="not deprecated">
5881      <param name="binder" type="com.google.inject.Binder"/>
5882      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5883      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5884      <doc>
5885      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5886 itself bound with {@code annotationType}.]]>
5887      </doc>
5888    </method>
5889    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5890      abstract="false" native="false" synchronized="false"
5891      static="true" final="false" visibility="public"
5892      deprecated="not deprecated">
5893      <param name="binder" type="com.google.inject.Binder"/>
5894      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5895      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5896      <doc>
5897      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5898 itself bound with {@code annotationType}.]]>
5899      </doc>
5900    </method>
5901    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5902      abstract="true" native="false" synchronized="false"
5903      static="false" final="false" visibility="public"
5904      deprecated="not deprecated">
5905      <doc>
5906      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5907 bound, the one that gets included is arbitrary. When multiple modules contribute elements to
5908 the set, this configuration option impacts all of them.
5909
5910 @return this multibinder
5911 @since 3.0]]>
5912      </doc>
5913    </method>
5914    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
5915      abstract="true" native="false" synchronized="false"
5916      static="false" final="false" visibility="public"
5917      deprecated="not deprecated">
5918      <doc>
5919      <![CDATA[Returns a binding builder used to add a new element in the set. Each
5920 bound element must have a distinct value. Bound providers will be
5921 evaluated each time the set is injected.
5922
5923 <p>It is an error to call this method without also calling one of the
5924 {@code to} methods on the returned binding builder.
5925
5926 <p>Scoping elements independently is supported. Use the {@code in} method
5927 to specify a binding scope.]]>
5928      </doc>
5929    </method>
5930    <doc>
5931    <![CDATA[An API to bind multiple values separately, only to later inject them as a
5932 complete collection. Multibinder is intended for use in your application's
5933 module:
5934 <pre><code>
5935 public class SnacksModule extends AbstractModule {
5936   protected void configure() {
5937     Multibinder&lt;Snack&gt; multibinder
5938         = Multibinder.newSetBinder(binder(), Snack.class);
5939     multibinder.addBinding().toInstance(new Twix());
5940     multibinder.addBinding().toProvider(SnickersProvider.class);
5941     multibinder.addBinding().to(Skittles.class);
5942   }
5943 }</code></pre>
5944
5945 <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
5946 <pre><code>
5947 class SnackMachine {
5948   {@literal @}Inject
5949   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
5950 }</code></pre>
5951
5952 <p>Contributing multibindings from different modules is supported. For
5953 example, it is okay to have both {@code CandyModule} and {@code ChipsModule}
5954 to both create their own {@code Multibinder<Snack>}, and to each contribute
5955 bindings to the set of snacks. When that set is injected, it will contain
5956 elements from both modules.
5957 
5958 <p>The set's iteration order is consistent with the binding order. This is
5959 convenient when multiple elements are contributed by the same module because
5960 that module can order its bindings appropriately. Avoid relying on the
5961 iteration order of elements contributed by different modules, since there is
5962 no equivalent mechanism to order modules.
5963 
5964 <p>The set is unmodifiable.  Elements can only be added to the set by
5965 configuring the multibinder.  Elements can never be removed from the set.
5966
5967 <p>Elements are resolved at set injection time. If an element is bound to a
5968 provider, that provider's get method will be called each time the set is
5969 injected (unless the binding is also scoped).
5970
5971 <p>Annotations are be used to create different sets of the same element
5972 type. Each distinct annotation gets its own independent collection of
5973 elements.
5974
5975 <p><strong>Elements must be distinct.</strong> If multiple bound elements
5976 have the same value, set injection will fail.
5977
5978 <p><strong>Elements must be non-null.</strong> If any set element is null,
5979 set injection will fail.
5980
5981 @author jessewilson@google.com (Jesse Wilson)]]>
5982    </doc>
5983  </class>
5984  <!-- end class com.google.inject.multibindings.Multibinder -->
5985  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
5986  <interface name="MultibinderBinding"    abstract="true"
5987    static="false" final="false" visibility="public"
5988    deprecated="not deprecated">
5989    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
5990      abstract="false" native="false" synchronized="false"
5991      static="false" final="false" visibility="public"
5992      deprecated="not deprecated">
5993      <doc>
5994      <![CDATA[Returns the key for the set.]]>
5995      </doc>
5996    </method>
5997    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5998      abstract="false" native="false" synchronized="false"
5999      static="false" final="false" visibility="public"
6000      deprecated="not deprecated">
6001      <doc>
6002      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6003 <p>
6004 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6005 key of <code>Set&lt;String></code>, then this will always return a
6006 <code>TypeLiteral&lt;String></code>.]]>
6007      </doc>
6008    </method>
6009    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6010      abstract="false" native="false" synchronized="false"
6011      static="false" final="false" visibility="public"
6012      deprecated="not deprecated">
6013      <doc>
6014      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6015 injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6016 retrieved from {@link Elements#getElements}.
6017 <p>
6018 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6019 key of <code>Set&lt;String></code>, then this will always return a list of type
6020 <code>List&lt;Binding&lt;String>></code>.]]>
6021      </doc>
6022    </method>
6023    <method name="permitsDuplicates" return="boolean"
6024      abstract="false" native="false" synchronized="false"
6025      static="false" final="false" visibility="public"
6026      deprecated="not deprecated">
6027      <doc>
6028      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6029 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6030 MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6031      </doc>
6032    </method>
6033    <method name="containsElement" return="boolean"
6034      abstract="false" native="false" synchronized="false"
6035      static="false" final="false" visibility="public"
6036      deprecated="not deprecated">
6037      <param name="element" type="com.google.inject.spi.Element"/>
6038      <doc>
6039      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6040 derive the elements of the set and other bindings that Multibinder uses internally. This will
6041 work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6042 Usually this is only necessary if you are working with elements retrieved from modules (without
6043 an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6044 <p>
6045 If you need to introspect the details of the set, such as the values or if it permits
6046 duplicates, it is necessary to pass the elements through an Injector and use
6047 {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6048      </doc>
6049    </method>
6050    <doc>
6051    <![CDATA[A binding for a Multibinder.
6052 
6053 @param <T> The fully qualified type of the set, including Set. For example:
6054          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6055 
6056 @since 3.0
6057 @author sameb@google.com (Sam Berlin)]]>
6058    </doc>
6059  </interface>
6060  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6061  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6062  <interface name="MultibindingsTargetVisitor"    abstract="true"
6063    static="false" final="false" visibility="public"
6064    deprecated="not deprecated">
6065    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6066    <method name="visit" return="V"
6067      abstract="false" native="false" synchronized="false"
6068      static="false" final="false" visibility="public"
6069      deprecated="not deprecated">
6070      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6071      <doc>
6072      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6073      </doc>
6074    </method>
6075    <method name="visit" return="V"
6076      abstract="false" native="false" synchronized="false"
6077      static="false" final="false" visibility="public"
6078      deprecated="not deprecated">
6079      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6080      <doc>
6081      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6082      </doc>
6083    </method>
6084    <doc>
6085    <![CDATA[A visitor for the multibinder extension.
6086 <p>
6087 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6088 {@link Multibinder} or {@link MapBinder} will be visited through this interface.
6089 
6090 @since 3.0
6091 @author sameb@google.com (Sam Berlin)]]>
6092    </doc>
6093  </interface>
6094  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6095</package>
6096<package name="com.google.inject.name">
6097  <!-- start class com.google.inject.name.Named -->
6098  <class name="Named"    abstract="true"
6099    static="false" final="false" visibility="public"
6100    deprecated="not deprecated">
6101    <implements name="java.lang.annotation.Annotation"/>
6102    <doc>
6103    <![CDATA[Annotates named things.
6104
6105 @author crazybob@google.com (Bob Lee)]]>
6106    </doc>
6107  </class>
6108  <!-- end class com.google.inject.name.Named -->
6109  <!-- start class com.google.inject.name.Names -->
6110  <class name="Names" extends="java.lang.Object"
6111    abstract="false"
6112    static="false" final="false" visibility="public"
6113    deprecated="not deprecated">
6114    <method name="named" return="com.google.inject.name.Named"
6115      abstract="false" native="false" synchronized="false"
6116      static="true" final="false" visibility="public"
6117      deprecated="not deprecated">
6118      <param name="name" type="java.lang.String"/>
6119      <doc>
6120      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6121      </doc>
6122    </method>
6123    <method name="bindProperties"
6124      abstract="false" native="false" synchronized="false"
6125      static="true" final="false" visibility="public"
6126      deprecated="not deprecated">
6127      <param name="binder" type="com.google.inject.Binder"/>
6128      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6129      <doc>
6130      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6131 {@code properties}.]]>
6132      </doc>
6133    </method>
6134    <method name="bindProperties"
6135      abstract="false" native="false" synchronized="false"
6136      static="true" final="false" visibility="public"
6137      deprecated="not deprecated">
6138      <param name="binder" type="com.google.inject.Binder"/>
6139      <param name="properties" type="java.util.Properties"/>
6140      <doc>
6141      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6142 method binds all properties including those inherited from 
6143 {@link Properties#defaults defaults}.]]>
6144      </doc>
6145    </method>
6146    <doc>
6147    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6148
6149 @author crazybob@google.com (Bob Lee)]]>
6150    </doc>
6151  </class>
6152  <!-- end class com.google.inject.name.Names -->
6153</package>
6154<package name="com.google.inject.persist">
6155  <!-- start class com.google.inject.persist.PersistFilter -->
6156  <class name="PersistFilter" extends="java.lang.Object"
6157    abstract="false"
6158    static="false" final="true" visibility="public"
6159    deprecated="not deprecated">
6160    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6161      static="false" final="false" visibility="public"
6162      deprecated="not deprecated">
6163    </constructor>
6164    <method name="init"
6165      abstract="false" native="false" synchronized="false"
6166      static="false" final="false" visibility="public"
6167      deprecated="not deprecated">
6168      <param name="filterConfig" type="FilterConfig"/>
6169      <exception name="ServletException" type="ServletException"/>
6170    </method>
6171    <method name="destroy"
6172      abstract="false" native="false" synchronized="false"
6173      static="false" final="false" visibility="public"
6174      deprecated="not deprecated">
6175    </method>
6176    <method name="doFilter"
6177      abstract="false" native="false" synchronized="false"
6178      static="false" final="false" visibility="public"
6179      deprecated="not deprecated">
6180      <param name="servletRequest" type="ServletRequest"/>
6181      <param name="servletResponse" type="ServletResponse"/>
6182      <param name="filterChain" type="FilterChain"/>
6183      <exception name="IOException" type="java.io.IOException"/>
6184      <exception name="ServletException" type="ServletException"/>
6185    </method>
6186    <doc>
6187    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6188 guice-persist manage the lifecycle of active units of work.
6189 The filter automatically starts and stops the relevant {@link PersistService}
6190 upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6191 {@link javax.servlet.Filter#destroy()} respectively.
6192
6193 <p> To be able to use the open session-in-view pattern (i.e. work per request),
6194 register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6195 important that you register this filter before any other filter.
6196
6197 For multiple providers, you should register this filter once per provider, inside
6198 a private module for each persist module installed (this must be the same private
6199 module where the specific persist module is itself installed).
6200
6201 <p>
6202 Example configuration:
6203 <pre>{@code
6204  public class MyModule extends ServletModule {
6205    public void configureServlets() {
6206      filter("/*").through(PersistFilter.class);
6207
6208      serve("/index.html").with(MyHtmlServlet.class);
6209      // Etc.
6210    }
6211  }
6212 }</pre>
6213 <p>
6214 This filter is thread safe and allows you to create injectors concurrently
6215 and deploy multiple guice-persist modules within the same injector, or even
6216 multiple injectors with persist modules withing the same JVM or web app.
6217 <p>
6218 This filter requires the Guice Servlet extension.
6219
6220 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6221    </doc>
6222  </class>
6223  <!-- end class com.google.inject.persist.PersistFilter -->
6224  <!-- start class com.google.inject.persist.PersistModule -->
6225  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6226    abstract="true"
6227    static="false" final="false" visibility="public"
6228    deprecated="not deprecated">
6229    <constructor name="PersistModule"
6230      static="false" final="false" visibility="public"
6231      deprecated="not deprecated">
6232    </constructor>
6233    <method name="configure"
6234      abstract="false" native="false" synchronized="false"
6235      static="false" final="true" visibility="protected"
6236      deprecated="not deprecated">
6237    </method>
6238    <method name="configurePersistence"
6239      abstract="true" native="false" synchronized="false"
6240      static="false" final="false" visibility="protected"
6241      deprecated="not deprecated">
6242    </method>
6243    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6244      abstract="true" native="false" synchronized="false"
6245      static="false" final="false" visibility="protected"
6246      deprecated="not deprecated">
6247    </method>
6248    <doc>
6249    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6250 providers.
6251
6252 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6253    </doc>
6254  </class>
6255  <!-- end class com.google.inject.persist.PersistModule -->
6256  <!-- start interface com.google.inject.persist.PersistService -->
6257  <interface name="PersistService"    abstract="true"
6258    static="false" final="false" visibility="public"
6259    deprecated="not deprecated">
6260    <method name="start"
6261      abstract="false" native="false" synchronized="false"
6262      static="false" final="false" visibility="public"
6263      deprecated="not deprecated">
6264      <doc>
6265      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6266 use. For instance, with JPA, it creates an EntityManagerFactory and may
6267 open connection pools. This method must be called by your code prior to
6268 using any guice-persist or JPA artifacts. If already started,
6269 calling this method does nothing, if already stopped, it also does
6270 nothing.]]>
6271      </doc>
6272    </method>
6273    <method name="stop"
6274      abstract="false" native="false" synchronized="false"
6275      static="false" final="false" visibility="public"
6276      deprecated="not deprecated">
6277      <doc>
6278      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6279 closes the {@code EntityManagerFactory}. If already stopped, calling this
6280 method does nothing. If not yet started, it also does nothing.]]>
6281      </doc>
6282    </method>
6283    <doc>
6284    <![CDATA[Persistence provider service. Use this to manage the overall
6285 startup and stop of the persistence module(s).
6286
6287 TODO(dhanji): Integrate with Service API when appropriate.
6288
6289 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6290    </doc>
6291  </interface>
6292  <!-- end interface com.google.inject.persist.PersistService -->
6293  <!-- start class com.google.inject.persist.Transactional -->
6294  <class name="Transactional"    abstract="true"
6295    static="false" final="false" visibility="public"
6296    deprecated="not deprecated">
6297    <implements name="java.lang.annotation.Annotation"/>
6298    <doc>
6299    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6300 Consult the documentation on http://code.google.com/p/google-guice for detailed semantics.
6301 Marking a method {@code @Transactional} will start a new transaction before the method
6302 executes and commit it after the method returns.
6303 <p>
6304 If the method throws an exception, the transaction will be rolled back <em>unless</em>
6305 you have specifically requested not to in the {@link #ignore()} clause.
6306 <p>
6307 Similarly, the set of exceptions that will trigger a rollback can be defined in
6308 the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6309 rollback.
6310
6311 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6312    </doc>
6313  </class>
6314  <!-- end class com.google.inject.persist.Transactional -->
6315  <!-- start interface com.google.inject.persist.UnitOfWork -->
6316  <interface name="UnitOfWork"    abstract="true"
6317    static="false" final="false" visibility="public"
6318    deprecated="not deprecated">
6319    <method name="begin"
6320      abstract="false" native="false" synchronized="false"
6321      static="false" final="false" visibility="public"
6322      deprecated="not deprecated">
6323      <doc>
6324      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6325 is already one open, the invocation will do nothing. In this way, you can define arbitrary
6326 units-of-work that nest within one another safely.
6327
6328 Transaction semantics are not affected.]]>
6329      </doc>
6330    </method>
6331    <method name="end"
6332      abstract="false" native="false" synchronized="false"
6333      static="false" final="false" visibility="public"
6334      deprecated="not deprecated">
6335      <doc>
6336      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6337 layer to close. If there is no Unit of work open, then the call returns silently. You can
6338 safely invoke end() repeatedly.
6339 <p>
6340 Transaction semantics are not affected.]]>
6341      </doc>
6342    </method>
6343    <doc>
6344    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6345 work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6346 of work is required. Starting and ending a unit of work directly corresponds to opening and
6347 closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6348 <p> The
6349 Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6350 end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6351 behind thread-locality of Unit of Work semantics).
6352
6353 <ul>
6354   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6355   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6356   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6357       background or bootstrap thread) is probably a good use case.</li>
6358  </ul>
6359
6360 @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6361    </doc>
6362  </interface>
6363  <!-- end interface com.google.inject.persist.UnitOfWork -->
6364</package>
6365<package name="com.google.inject.persist.finder">
6366  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6367  <class name="DynamicFinder" extends="java.lang.Object"
6368    abstract="false"
6369    static="false" final="true" visibility="public"
6370    deprecated="not deprecated">
6371    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6372      static="false" final="false" visibility="public"
6373      deprecated="not deprecated">
6374    </constructor>
6375    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6376      abstract="false" native="false" synchronized="false"
6377      static="true" final="false" visibility="public"
6378      deprecated="not deprecated">
6379      <param name="method" type="java.lang.reflect.Method"/>
6380      <doc>
6381      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6382
6383 @param method a method you want to test as a dynamic finder]]>
6384      </doc>
6385    </method>
6386    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6387      abstract="false" native="false" synchronized="false"
6388      static="false" final="false" visibility="public"
6389      deprecated="not deprecated">
6390    </method>
6391    <doc>
6392    <![CDATA[Utility that helps you introspect dynamic finder methods.
6393
6394 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6395    </doc>
6396  </class>
6397  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6398  <!-- start class com.google.inject.persist.finder.Finder -->
6399  <class name="Finder"    abstract="true"
6400    static="false" final="false" visibility="public"
6401    deprecated="not deprecated">
6402    <implements name="java.lang.annotation.Annotation"/>
6403    <doc>
6404    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6405 specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6406
6407 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6408    </doc>
6409  </class>
6410  <!-- end class com.google.inject.persist.finder.Finder -->
6411  <!-- start class com.google.inject.persist.finder.FirstResult -->
6412  <class name="FirstResult"    abstract="true"
6413    static="false" final="false" visibility="public"
6414    deprecated="not deprecated">
6415    <implements name="java.lang.annotation.Annotation"/>
6416    <doc>
6417    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6418 the index of the first result in the result set you are interested in.
6419 Useful for paging result sets. Complemented by {@link MaxResults}.
6420
6421 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6422    </doc>
6423  </class>
6424  <!-- end class com.google.inject.persist.finder.FirstResult -->
6425  <!-- start class com.google.inject.persist.finder.MaxResults -->
6426  <class name="MaxResults"    abstract="true"
6427    static="false" final="false" visibility="public"
6428    deprecated="not deprecated">
6429    <implements name="java.lang.annotation.Annotation"/>
6430    <doc>
6431    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6432 the maximum size of returned result window. Usefule for paging result sets.
6433 Complement of {@link FirstResult}.
6434
6435 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6436    </doc>
6437  </class>
6438  <!-- end class com.google.inject.persist.finder.MaxResults -->
6439</package>
6440<package name="com.google.inject.persist.jpa">
6441  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6442  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6443    abstract="false"
6444    static="false" final="true" visibility="public"
6445    deprecated="not deprecated">
6446    <constructor name="JpaPersistModule" type="java.lang.String"
6447      static="false" final="false" visibility="public"
6448      deprecated="not deprecated">
6449    </constructor>
6450    <method name="configurePersistence"
6451      abstract="false" native="false" synchronized="false"
6452      static="false" final="false" visibility="protected"
6453      deprecated="not deprecated">
6454    </method>
6455    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6456      abstract="false" native="false" synchronized="false"
6457      static="false" final="false" visibility="protected"
6458      deprecated="not deprecated">
6459    </method>
6460    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6461      abstract="false" native="false" synchronized="false"
6462      static="false" final="false" visibility="public"
6463      deprecated="not deprecated">
6464      <param name="properties" type="java.util.Properties"/>
6465      <doc>
6466      <![CDATA[Configures the JPA persistence provider with a set of properties.
6467 
6468 @param properties A set of name value pairs that configure a JPA persistence
6469 provider as per the specification.]]>
6470      </doc>
6471    </method>
6472    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6473      abstract="false" native="false" synchronized="false"
6474      static="false" final="false" visibility="public"
6475      deprecated="not deprecated">
6476      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6477      <doc>
6478      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6479
6480 @param iface Any interface type whose methods are all dynamic finders.]]>
6481      </doc>
6482    </method>
6483    <doc>
6484    <![CDATA[JPA provider for guice persist.
6485
6486 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6487    </doc>
6488  </class>
6489  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6490</package>
6491<package name="com.google.inject.servlet">
6492  <!-- start class com.google.inject.servlet.GuiceFilter -->
6493  <class name="GuiceFilter" extends="java.lang.Object"
6494    abstract="false"
6495    static="false" final="false" visibility="public"
6496    deprecated="not deprecated">
6497    <constructor name="GuiceFilter"
6498      static="false" final="false" visibility="public"
6499      deprecated="not deprecated">
6500    </constructor>
6501    <method name="doFilter"
6502      abstract="false" native="false" synchronized="false"
6503      static="false" final="false" visibility="public"
6504      deprecated="not deprecated">
6505      <param name="servletRequest" type="ServletRequest"/>
6506      <param name="servletResponse" type="ServletResponse"/>
6507      <param name="filterChain" type="FilterChain"/>
6508      <exception name="IOException" type="java.io.IOException"/>
6509      <exception name="ServletException" type="ServletException"/>
6510    </method>
6511    <method name="init"
6512      abstract="false" native="false" synchronized="false"
6513      static="false" final="false" visibility="public"
6514      deprecated="not deprecated">
6515      <param name="filterConfig" type="FilterConfig"/>
6516      <exception name="ServletException" type="ServletException"/>
6517    </method>
6518    <method name="destroy"
6519      abstract="false" native="false" synchronized="false"
6520      static="false" final="false" visibility="public"
6521      deprecated="not deprecated">
6522    </method>
6523    <doc>
6524    <![CDATA[<p>
6525 Apply this filter in web.xml above all other filters (typically), to all requests where you plan
6526  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
6527  and servlets:
6528  <pre>
6529  &lt;filter&gt;
6530    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6531    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
6532  &lt;/filter&gt;
6533
6534  &lt;filter-mapping&gt;
6535    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
6536    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
6537  &lt;/filter-mapping&gt;
6538  </pre>
6539
6540 This filter must appear before every filter that makes use of Guice injection or servlet
6541 scopes functionality. Typically, you will only register this filter in web.xml and register
6542 any other filters (and servlets) using a {@link ServletModule}.
6543
6544 @author crazybob@google.com (Bob Lee)
6545 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6546    </doc>
6547  </class>
6548  <!-- end class com.google.inject.servlet.GuiceFilter -->
6549  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
6550  <class name="GuiceServletContextListener" extends="java.lang.Object"
6551    abstract="true"
6552    static="false" final="false" visibility="public"
6553    deprecated="not deprecated">
6554    <constructor name="GuiceServletContextListener"
6555      static="false" final="false" visibility="public"
6556      deprecated="not deprecated">
6557    </constructor>
6558    <method name="contextInitialized"
6559      abstract="false" native="false" synchronized="false"
6560      static="false" final="false" visibility="public"
6561      deprecated="not deprecated">
6562      <param name="servletContextEvent" type="ServletContextEvent"/>
6563    </method>
6564    <method name="contextDestroyed"
6565      abstract="false" native="false" synchronized="false"
6566      static="false" final="false" visibility="public"
6567      deprecated="not deprecated">
6568      <param name="servletContextEvent" type="ServletContextEvent"/>
6569    </method>
6570    <method name="getInjector" return="com.google.inject.Injector"
6571      abstract="true" native="false" synchronized="false"
6572      static="false" final="false" visibility="protected"
6573      deprecated="not deprecated">
6574      <doc>
6575      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
6576 injector.]]>
6577      </doc>
6578    </method>
6579    <doc>
6580    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
6581 class as a logical place to create and configure your injector. This will ensure the injector
6582 is created when the web application is deployed.
6583 
6584 @author Kevin Bourrillion (kevinb@google.com)
6585 @since 2.0]]>
6586    </doc>
6587  </class>
6588  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
6589  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
6590  <interface name="InstanceFilterBinding"    abstract="true"
6591    static="false" final="false" visibility="public"
6592    deprecated="not deprecated">
6593    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6594    <method name="getFilterInstance" return="Filter"
6595      abstract="false" native="false" synchronized="false"
6596      static="false" final="false" visibility="public"
6597      deprecated="not deprecated">
6598      <doc>
6599      <![CDATA[Returns the filter instance that will be used.]]>
6600      </doc>
6601    </method>
6602    <doc>
6603    <![CDATA[A binding to a single instance of a filter. 
6604
6605 @author sameb@google.com
6606 @since 3.0]]>
6607    </doc>
6608  </interface>
6609  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
6610  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
6611  <interface name="InstanceServletBinding"    abstract="true"
6612    static="false" final="false" visibility="public"
6613    deprecated="not deprecated">
6614    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6615    <method name="getServletInstance" return="HttpServlet"
6616      abstract="false" native="false" synchronized="false"
6617      static="false" final="false" visibility="public"
6618      deprecated="not deprecated">
6619      <doc>
6620      <![CDATA[Returns the servlet instance that will be used.]]>
6621      </doc>
6622    </method>
6623    <doc>
6624    <![CDATA[A binding to a single instance of a servlet. 
6625
6626 @author sameb@google.com
6627 @since 3.0]]>
6628    </doc>
6629  </interface>
6630  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
6631  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
6632  <interface name="LinkedFilterBinding"    abstract="true"
6633    static="false" final="false" visibility="public"
6634    deprecated="not deprecated">
6635    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6636    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends Filter&gt;"
6637      abstract="false" native="false" synchronized="false"
6638      static="false" final="false" visibility="public"
6639      deprecated="not deprecated">
6640      <doc>
6641      <![CDATA[Returns the key used to lookup the filter instance.]]>
6642      </doc>
6643    </method>
6644    <doc>
6645    <![CDATA[A linked binding to a filter. 
6646
6647 @author sameb@google.com
6648 @since 3.0]]>
6649    </doc>
6650  </interface>
6651  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
6652  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
6653  <interface name="LinkedServletBinding"    abstract="true"
6654    static="false" final="false" visibility="public"
6655    deprecated="not deprecated">
6656    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
6657    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends HttpServlet&gt;"
6658      abstract="false" native="false" synchronized="false"
6659      static="false" final="false" visibility="public"
6660      deprecated="not deprecated">
6661      <doc>
6662      <![CDATA[Returns the key used to lookup the servlet instance.]]>
6663      </doc>
6664    </method>
6665    <doc>
6666    <![CDATA[A linked binding to a servlet. 
6667
6668 @author sameb@google.com
6669 @since 3.0]]>
6670    </doc>
6671  </interface>
6672  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
6673  <!-- start class com.google.inject.servlet.RequestParameters -->
6674  <class name="RequestParameters"    abstract="true"
6675    static="false" final="false" visibility="public"
6676    deprecated="not deprecated">
6677    <implements name="java.lang.annotation.Annotation"/>
6678    <doc>
6679    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
6680 when you want the HTTP request parameter map to be injected.
6681
6682 @author crazybob@google.com (Bob Lee)]]>
6683    </doc>
6684  </class>
6685  <!-- end class com.google.inject.servlet.RequestParameters -->
6686  <!-- start class com.google.inject.servlet.RequestScoped -->
6687  <class name="RequestScoped"    abstract="true"
6688    static="false" final="false" visibility="public"
6689    deprecated="not deprecated">
6690    <implements name="java.lang.annotation.Annotation"/>
6691    <doc>
6692    <![CDATA[Apply this to implementation classes when you want one instance per request.
6693
6694 @author crazybob@google.com (Bob Lee)]]>
6695    </doc>
6696  </class>
6697  <!-- end class com.google.inject.servlet.RequestScoped -->
6698  <!-- start class com.google.inject.servlet.ServletModule -->
6699  <class name="ServletModule" extends="com.google.inject.AbstractModule"
6700    abstract="false"
6701    static="false" final="false" visibility="public"
6702    deprecated="not deprecated">
6703    <constructor name="ServletModule"
6704      static="false" final="false" visibility="public"
6705      deprecated="not deprecated">
6706    </constructor>
6707    <method name="configure"
6708      abstract="false" native="false" synchronized="false"
6709      static="false" final="true" visibility="protected"
6710      deprecated="not deprecated">
6711    </method>
6712    <method name="configureServlets"
6713      abstract="false" native="false" synchronized="false"
6714      static="false" final="false" visibility="protected"
6715      deprecated="not deprecated">
6716      <doc>
6717      <![CDATA[<h3>Servlet Mapping EDSL</h3>
6718
6719 <p> Part of the EDSL builder language for configuring servlets
6720 and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
6721 Filters and servlets are configured here using simple java method calls. Here is a typical
6722 example of registering a filter when creating your Guice injector:
6723
6724 <pre>
6725   Guice.createInjector(..., new ServletModule() {
6726
6727     {@literal @}Override
6728     protected void configureServlets() {
6729       <b>serve("*.html").with(MyServlet.class)</b>
6730     }
6731   }
6732 </pre>
6733
6734 This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
6735 any web pages ending in {@code .html}. You can also use a path-style syntax to register
6736 servlets:
6737
6738 <pre>
6739       <b>serve("/my/*").with(MyServlet.class)</b>
6740 </pre>
6741
6742 Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
6743 directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
6744 your module. Mapping a servlet that is bound under any other scope is an error.
6745
6746 <p>
6747 <h4>Dispatch Order</h4>
6748 You are free to register as many servlets and filters as you like this way. They will
6749 be compared and dispatched in the order in which the filter methods are called:
6750
6751 <pre>
6752
6753   Guice.createInjector(..., new ServletModule() {
6754
6755     {@literal @}Override
6756     protected void configureServlets() {
6757       filter("/*").through(MyFilter.class);
6758       filter("*.css").through(MyCssFilter.class);
6759       filter("*.jpg").through(new MyJpgFilter());
6760       // etc..
6761
6762       serve("*.html").with(MyServlet.class);
6763       serve("/my/*").with(MyServlet.class);
6764       serve("*.jpg").with(new MyServlet());
6765       // etc..
6766      }
6767    }
6768 </pre>
6769 This will traverse down the list of rules in lexical order. For example, a url
6770  "{@code /my/file.js}" (after it runs through the matching filters) will first
6771  be compared against the servlet mapping:
6772 
6773 <pre>
6774       serve("*.html").with(MyServlet.class);
6775 </pre>
6776 And failing that, it will descend to the next servlet mapping:
6777
6778 <pre>
6779       serve("/my/*").with(MyServlet.class);
6780 </pre>
6781
6782 Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
6783 two mapping rules can also be written in more compact form using varargs syntax:
6784
6785 <pre>
6786       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
6787 </pre>
6788 
6789 This way you can map several URI patterns to the same servlet. A similar syntax is
6790 also available for filter mappings.
6791
6792 <p>
6793 <h4>Regular Expressions</h4>
6794 You can also map servlets (or filters) to URIs using regular expressions:
6795 <pre>
6796    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
6797 </pre>
6798
6799 This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
6800 <ul>
6801 <li>http://www.google.com/ajax.html</li>
6802 <li>http://www.google.com/content/ajax/index</li>
6803 <li>http://www.google.com/it/is_totally_ajaxian</li>
6804 </ul>
6805
6806
6807 <h3>Initialization Parameters</h3>
6808
6809 Servlets (and filters) allow you to pass in init params
6810 using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
6811 Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
6812 name/value pairs. For example, to initialize {@code MyServlet} with two parameters
6813 ({@code name="Dhanji", site="google.com"}) you could write:
6814
6815 <pre>
6816  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
6817  params.put("name", "Dhanji");
6818  params.put("site", "google.com");
6819
6820  ...
6821      serve("/*").with(MyServlet.class, <b>params</b>)
6822 </pre>
6823
6824 <p>
6825 <h3>Binding Keys</h3>
6826
6827 You can also bind keys rather than classes. This lets you hide
6828 implementations with package-local visbility and expose them using
6829 only a Guice module and an annotation:
6830
6831 <pre>
6832  ...
6833      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
6834 </pre>
6835
6836 Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
6837 custom binding annotation. Elsewhere (in one of your own modules) you can bind this
6838 filter's implementation:
6839
6840 <pre>
6841   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
6842 </pre>
6843
6844 See {@link com.google.inject.Binder} for more information on binding syntax.
6845
6846 <p>
6847 <h3>Multiple Modules</h3>
6848
6849 It is sometimes useful to capture servlet and filter mappings from multiple different
6850 modules. This is essential if you want to package and offer drop-in Guice plugins that
6851 provide servlet functionality.
6852
6853 <p>
6854 Guice Servlet allows you to register several instances of {@code ServletModule} to your
6855 injector. The order in which these modules are installed determines the dispatch order
6856 of filters and the precedence order of servlets. For example, if you had two servlet modules,
6857 {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
6858 to the same URI pattern, {@code "/*"}:
6859
6860 <p>
6861 In {@code RpcModule}:
6862 <pre>
6863     filter("/*").through(RpcFilter.class);
6864 </pre>
6865
6866 In {@code WebServiceModule}:
6867 <pre>
6868     filter("/*").through(WebServiceFilter.class);
6869 </pre>
6870
6871 Then the order in which these filters are dispatched is determined by the order in which
6872 the modules are installed:
6873
6874 <pre>
6875   <b>install(new WebServiceModule());</b>
6876   install(new RpcModule());
6877 </pre>
6878
6879 In the case shown above {@code WebServiceFilter} will run first.
6880 
6881 @since 2.0]]>
6882      </doc>
6883    </method>
6884    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6885      abstract="false" native="false" synchronized="false"
6886      static="false" final="true" visibility="protected"
6887      deprecated="not deprecated">
6888      <param name="urlPattern" type="java.lang.String"/>
6889      <param name="morePatterns" type="java.lang.String[]"/>
6890      <doc>
6891      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6892 @since 2.0]]>
6893      </doc>
6894    </method>
6895    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
6896      abstract="false" native="false" synchronized="false"
6897      static="false" final="true" visibility="protected"
6898      deprecated="not deprecated">
6899      <param name="regex" type="java.lang.String"/>
6900      <param name="regexes" type="java.lang.String[]"/>
6901      <doc>
6902      <![CDATA[@param regex Any Java-style regular expression.
6903 @since 2.0]]>
6904      </doc>
6905    </method>
6906    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6907      abstract="false" native="false" synchronized="false"
6908      static="false" final="true" visibility="protected"
6909      deprecated="not deprecated">
6910      <param name="urlPattern" type="java.lang.String"/>
6911      <param name="morePatterns" type="java.lang.String[]"/>
6912      <doc>
6913      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
6914 @since 2.0]]>
6915      </doc>
6916    </method>
6917    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
6918      abstract="false" native="false" synchronized="false"
6919      static="false" final="true" visibility="protected"
6920      deprecated="not deprecated">
6921      <param name="regex" type="java.lang.String"/>
6922      <param name="regexes" type="java.lang.String[]"/>
6923      <doc>
6924      <![CDATA[@param regex Any Java-style regular expression.
6925 @since 2.0]]>
6926      </doc>
6927    </method>
6928    <method name="getServletContext" return="ServletContext"
6929      abstract="false" native="false" synchronized="false"
6930      static="false" final="true" visibility="protected"
6931      deprecated="not deprecated">
6932      <doc>
6933      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
6934 create your injector. Otherwise, it returns null.
6935 @return The current servlet context.
6936 @since 3.0]]>
6937      </doc>
6938    </method>
6939    <doc>
6940    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
6941 objects so you can inject the request, response, session, etc.
6942
6943 <p>
6944 You should subclass this module to register servlets and
6945 filters in the {@link #configureServlets()} method.
6946
6947 @author crazybob@google.com (Bob Lee)
6948 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6949    </doc>
6950  </class>
6951  <!-- end class com.google.inject.servlet.ServletModule -->
6952  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
6953  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
6954    static="true" final="false" visibility="public"
6955    deprecated="not deprecated">
6956    <method name="through"
6957      abstract="false" native="false" synchronized="false"
6958      static="false" final="false" visibility="public"
6959      deprecated="not deprecated">
6960      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6961    </method>
6962    <method name="through"
6963      abstract="false" native="false" synchronized="false"
6964      static="false" final="false" visibility="public"
6965      deprecated="not deprecated">
6966      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6967    </method>
6968    <method name="through"
6969      abstract="false" native="false" synchronized="false"
6970      static="false" final="false" visibility="public"
6971      deprecated="not deprecated">
6972      <param name="filter" type="Filter"/>
6973      <doc>
6974      <![CDATA[@since 3.0]]>
6975      </doc>
6976    </method>
6977    <method name="through"
6978      abstract="false" native="false" synchronized="false"
6979      static="false" final="false" visibility="public"
6980      deprecated="not deprecated">
6981      <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
6982      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6983    </method>
6984    <method name="through"
6985      abstract="false" native="false" synchronized="false"
6986      static="false" final="false" visibility="public"
6987      deprecated="not deprecated">
6988      <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
6989      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6990    </method>
6991    <method name="through"
6992      abstract="false" native="false" synchronized="false"
6993      static="false" final="false" visibility="public"
6994      deprecated="not deprecated">
6995      <param name="filter" type="Filter"/>
6996      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6997      <doc>
6998      <![CDATA[@since 3.0]]>
6999      </doc>
7000    </method>
7001    <doc>
7002    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7003
7004 @since 2.0]]>
7005    </doc>
7006  </interface>
7007  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7008  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7009  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7010    static="true" final="false" visibility="public"
7011    deprecated="not deprecated">
7012    <method name="with"
7013      abstract="false" native="false" synchronized="false"
7014      static="false" final="false" visibility="public"
7015      deprecated="not deprecated">
7016      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
7017    </method>
7018    <method name="with"
7019      abstract="false" native="false" synchronized="false"
7020      static="false" final="false" visibility="public"
7021      deprecated="not deprecated">
7022      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
7023    </method>
7024    <method name="with"
7025      abstract="false" native="false" synchronized="false"
7026      static="false" final="false" visibility="public"
7027      deprecated="not deprecated">
7028      <param name="servlet" type="HttpServlet"/>
7029      <doc>
7030      <![CDATA[@since 3.0]]>
7031      </doc>
7032    </method>
7033    <method name="with"
7034      abstract="false" native="false" synchronized="false"
7035      static="false" final="false" visibility="public"
7036      deprecated="not deprecated">
7037      <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
7038      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7039    </method>
7040    <method name="with"
7041      abstract="false" native="false" synchronized="false"
7042      static="false" final="false" visibility="public"
7043      deprecated="not deprecated">
7044      <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
7045      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7046    </method>
7047    <method name="with"
7048      abstract="false" native="false" synchronized="false"
7049      static="false" final="false" visibility="public"
7050      deprecated="not deprecated">
7051      <param name="servlet" type="HttpServlet"/>
7052      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7053      <doc>
7054      <![CDATA[@since 3.0]]>
7055      </doc>
7056    </method>
7057    <doc>
7058    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7059
7060 @since 2.0]]>
7061    </doc>
7062  </interface>
7063  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7064  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7065  <interface name="ServletModuleBinding"    abstract="true"
7066    static="false" final="false" visibility="public"
7067    deprecated="not deprecated">
7068    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7069      abstract="false" native="false" synchronized="false"
7070      static="false" final="false" visibility="public"
7071      deprecated="not deprecated">
7072      <doc>
7073      <![CDATA[Returns the pattern type that this binding was created with.]]>
7074      </doc>
7075    </method>
7076    <method name="getPattern" return="java.lang.String"
7077      abstract="false" native="false" synchronized="false"
7078      static="false" final="false" visibility="public"
7079      deprecated="not deprecated">
7080      <doc>
7081      <![CDATA[Returns the pattern used to match against the binding.]]>
7082      </doc>
7083    </method>
7084    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7085      abstract="false" native="false" synchronized="false"
7086      static="false" final="false" visibility="public"
7087      deprecated="not deprecated">
7088      <doc>
7089      <![CDATA[Returns any context params supplied when creating the binding.]]>
7090      </doc>
7091    </method>
7092    <method name="matchesUri" return="boolean"
7093      abstract="false" native="false" synchronized="false"
7094      static="false" final="false" visibility="public"
7095      deprecated="not deprecated">
7096      <param name="uri" type="java.lang.String"/>
7097      <doc>
7098      <![CDATA[Returns true if the given URI will match this binding.]]>
7099      </doc>
7100    </method>
7101    <doc>
7102    <![CDATA[A binding created by {@link ServletModule}.
7103 
7104 @author sameb@google.com (Sam Berlin)
7105 @since 3.0]]>
7106    </doc>
7107  </interface>
7108  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7109  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7110  <interface name="ServletModuleTargetVisitor"    abstract="true"
7111    static="false" final="false" visibility="public"
7112    deprecated="not deprecated">
7113    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7114    <method name="visit" return="V"
7115      abstract="false" native="false" synchronized="false"
7116      static="false" final="false" visibility="public"
7117      deprecated="not deprecated">
7118      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7119      <doc>
7120      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7121 {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7122 
7123 If multiple patterns were specified, this will be called multiple times.]]>
7124      </doc>
7125    </method>
7126    <method name="visit" return="V"
7127      abstract="false" native="false" synchronized="false"
7128      static="false" final="false" visibility="public"
7129      deprecated="not deprecated">
7130      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7131      <doc>
7132      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7133 {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7134 
7135 If multiple patterns were specified, this will be called multiple times.]]>
7136      </doc>
7137    </method>
7138    <method name="visit" return="V"
7139      abstract="false" native="false" synchronized="false"
7140      static="false" final="false" visibility="public"
7141      deprecated="not deprecated">
7142      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7143      <doc>
7144      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7145 {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7146 
7147 If multiple patterns were specified, this will be called multiple times.]]>
7148      </doc>
7149    </method>
7150    <method name="visit" return="V"
7151      abstract="false" native="false" synchronized="false"
7152      static="false" final="false" visibility="public"
7153      deprecated="not deprecated">
7154      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7155      <doc>
7156      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where 
7157 {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7158 
7159 If multiple patterns were specified, this will be called multiple times.]]>
7160      </doc>
7161    </method>
7162    <doc>
7163    <![CDATA[A visitor for the servlet extension.
7164 
7165 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7166 {@link ServletModule} will be visited through this interface.
7167 
7168 @since 3.0
7169 @author sameb@google.com (Sam Berlin)]]>
7170    </doc>
7171  </interface>
7172  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7173  <!-- start class com.google.inject.servlet.ServletScopes -->
7174  <class name="ServletScopes" extends="java.lang.Object"
7175    abstract="false"
7176    static="false" final="false" visibility="public"
7177    deprecated="not deprecated">
7178    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7179      abstract="false" native="false" synchronized="false"
7180      static="true" final="false" visibility="public"
7181      deprecated="not deprecated">
7182      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7183      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7184      <doc>
7185      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7186 HTTP request in another thread. This acts as a way of transporting
7187 request context data from the request processing thread to to worker
7188 threads.
7189 <p>
7190 There are some limitations:
7191 <ul>
7192   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7193      transported.</li>
7194   <li>State changes to the HttpServletRequest after this method is called
7195      will not be seen in the continued thread.</li>
7196   <li>Only the HttpServletRequest, ServletContext and request parameter
7197      map are available in the continued thread. The response and session
7198      are not available.</li>
7199 </ul>
7200
7201 @param callable code to be executed in another thread, which depends on
7202     the request scope.
7203 @param seedMap the initial set of scoped instances for Guice to seed the
7204     request scope with.  To seed a key with null, use {@code null} as
7205     the value.
7206 @return a callable that will invoke the given callable, making the request
7207     context available to it.
7208 @throws OutOfScopeException if this method is called from a non-request
7209     thread, or if the request has completed.
7210 
7211 @since 3.0]]>
7212      </doc>
7213    </method>
7214    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7215      abstract="false" native="false" synchronized="false"
7216      static="true" final="false" visibility="public"
7217      deprecated="not deprecated">
7218      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7219      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7220      <doc>
7221      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7222 as the HTTP request scope, but is used if no HTTP request scope is in
7223 progress. In this way, keys can be scoped as @RequestScoped and exist
7224 in non-HTTP requests (for example: RPC requests) as well as in HTTP
7225 request threads.
7226
7227 @param callable code to be executed which depends on the request scope.
7228     Typically in another thread, but not necessarily so.
7229 @param seedMap the initial set of scoped instances for Guice to seed the
7230     request scope with.  To seed a key with null, use {@code null} as
7231     the value.
7232 @return a callable that when called will run inside the a request scope
7233     that exposes the instances in the {@code seedMap} as scoped keys.
7234 @since 3.0]]>
7235      </doc>
7236    </method>
7237    <field name="REQUEST" type="com.google.inject.Scope"
7238      transient="false" volatile="false"
7239      static="true" final="true" visibility="public"
7240      deprecated="not deprecated">
7241      <doc>
7242      <![CDATA[HTTP servlet request scope.]]>
7243      </doc>
7244    </field>
7245    <field name="SESSION" type="com.google.inject.Scope"
7246      transient="false" volatile="false"
7247      static="true" final="true" visibility="public"
7248      deprecated="not deprecated">
7249      <doc>
7250      <![CDATA[HTTP session scope.]]>
7251      </doc>
7252    </field>
7253    <doc>
7254    <![CDATA[Servlet scopes.
7255
7256 @author crazybob@google.com (Bob Lee)]]>
7257    </doc>
7258  </class>
7259  <!-- end class com.google.inject.servlet.ServletScopes -->
7260  <!-- start class com.google.inject.servlet.SessionScoped -->
7261  <class name="SessionScoped"    abstract="true"
7262    static="false" final="false" visibility="public"
7263    deprecated="not deprecated">
7264    <implements name="java.lang.annotation.Annotation"/>
7265    <doc>
7266    <![CDATA[Apply this to implementation classes when you want one instance per session.
7267
7268 @see com.google.inject.Scopes#SINGLETON
7269 @author crazybob@google.com (Bob Lee)]]>
7270    </doc>
7271  </class>
7272  <!-- end class com.google.inject.servlet.SessionScoped -->
7273  <!-- start class com.google.inject.servlet.UriPatternType -->
7274  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7275    abstract="false"
7276    static="false" final="true" visibility="public"
7277    deprecated="not deprecated">
7278    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7279      abstract="false" native="false" synchronized="false"
7280      static="true" final="false" visibility="public"
7281      deprecated="not deprecated">
7282    </method>
7283    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7284      abstract="false" native="false" synchronized="false"
7285      static="true" final="false" visibility="public"
7286      deprecated="not deprecated">
7287      <param name="name" type="java.lang.String"/>
7288    </method>
7289    <doc>
7290    <![CDATA[An enumeration of the available URI-pattern matching styles
7291 
7292 @since 3.0]]>
7293    </doc>
7294  </class>
7295  <!-- end class com.google.inject.servlet.UriPatternType -->
7296</package>
7297<package name="com.google.inject.spi">
7298  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
7299  <interface name="BindingScopingVisitor"    abstract="true"
7300    static="false" final="false" visibility="public"
7301    deprecated="not deprecated">
7302    <method name="visitEagerSingleton" return="V"
7303      abstract="false" native="false" synchronized="false"
7304      static="false" final="false" visibility="public"
7305      deprecated="not deprecated">
7306      <doc>
7307      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
7308 injector bindings.]]>
7309      </doc>
7310    </method>
7311    <method name="visitScope" return="V"
7312      abstract="false" native="false" synchronized="false"
7313      static="false" final="false" visibility="public"
7314      deprecated="not deprecated">
7315      <param name="scope" type="com.google.inject.Scope"/>
7316      <doc>
7317      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
7318      </doc>
7319    </method>
7320    <method name="visitScopeAnnotation" return="V"
7321      abstract="false" native="false" synchronized="false"
7322      static="false" final="false" visibility="public"
7323      deprecated="not deprecated">
7324      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7325      <doc>
7326      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
7327 that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
7328 Scope) Binder.bindScope()}.]]>
7329      </doc>
7330    </method>
7331    <method name="visitNoScoping" return="V"
7332      abstract="false" native="false" synchronized="false"
7333      static="false" final="false" visibility="public"
7334      deprecated="not deprecated">
7335      <doc>
7336      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
7337 injector should use scoping annotations to find a scope. On an injector, it indicates that
7338 no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
7339 is linked to a scoped binding.]]>
7340      </doc>
7341    </method>
7342    <doc>
7343    <![CDATA[Visits each of the strategies used to scope an injection.
7344
7345 @param <V> any type to be returned by the visit method. Use {@link Void} with
7346     {@code return null} if no return type is needed.
7347 @since 2.0]]>
7348    </doc>
7349  </interface>
7350  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
7351  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
7352  <interface name="BindingTargetVisitor"    abstract="true"
7353    static="false" final="false" visibility="public"
7354    deprecated="not deprecated">
7355    <method name="visit" return="V"
7356      abstract="false" native="false" synchronized="false"
7357      static="false" final="false" visibility="public"
7358      deprecated="not deprecated">
7359      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7360      <doc>
7361      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
7362 found in both module and injector bindings.]]>
7363      </doc>
7364    </method>
7365    <method name="visit" return="V"
7366      abstract="false" native="false" synchronized="false"
7367      static="false" final="false" visibility="public"
7368      deprecated="not deprecated">
7369      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7370      <doc>
7371      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
7372 injections. This target is found in both module and injector bindings.]]>
7373      </doc>
7374    </method>
7375    <method name="visit" return="V"
7376      abstract="false" native="false" synchronized="false"
7377      static="false" final="false" visibility="public"
7378      deprecated="not deprecated">
7379      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7380      <doc>
7381      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
7382 that provider's {@code get} method is invoked. This target is found in both module and injector
7383 bindings.]]>
7384      </doc>
7385    </method>
7386    <method name="visit" return="V"
7387      abstract="false" native="false" synchronized="false"
7388      static="false" final="false" visibility="public"
7389      deprecated="not deprecated">
7390      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7391      <doc>
7392      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
7393 target is found in both module and injector bindings.]]>
7394      </doc>
7395    </method>
7396    <method name="visit" return="V"
7397      abstract="false" native="false" synchronized="false"
7398      static="false" final="false" visibility="public"
7399      deprecated="not deprecated">
7400      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7401      <doc>
7402      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
7403 found in injector bindings.]]>
7404      </doc>
7405    </method>
7406    <method name="visit" return="V"
7407      abstract="false" native="false" synchronized="false"
7408      static="false" final="false" visibility="public"
7409      deprecated="not deprecated">
7410      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7411      <doc>
7412      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
7413 that the injector should use its implicit binding strategies to resolve injections.]]>
7414      </doc>
7415    </method>
7416    <method name="visit" return="V"
7417      abstract="false" native="false" synchronized="false"
7418      static="false" final="false" visibility="public"
7419      deprecated="not deprecated">
7420      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7421      <doc>
7422      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
7423 {@code constructor}. This target is found only on injector bindings.]]>
7424      </doc>
7425    </method>
7426    <method name="visit" return="V"
7427      abstract="false" native="false" synchronized="false"
7428      static="false" final="false" visibility="public"
7429      deprecated="not deprecated">
7430      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7431      <doc>
7432      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
7433 has the same binding annotation but a different type. This target is found only on injector
7434 bindings.]]>
7435      </doc>
7436    </method>
7437    <method name="visit" return="V"
7438      abstract="false" native="false" synchronized="false"
7439      static="false" final="false" visibility="public"
7440      deprecated="not deprecated">
7441      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7442      <doc>
7443      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
7444 provided type. This target is found only on injector bindings.]]>
7445      </doc>
7446    </method>
7447    <doc>
7448    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
7449
7450 @param <V> any type to be returned by the visit method. Use {@link Void} with
7451     {@code return null} if no return type is needed.
7452 @since 2.0]]>
7453    </doc>
7454  </interface>
7455  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
7456  <!-- start interface com.google.inject.spi.ConstructorBinding -->
7457  <interface name="ConstructorBinding"    abstract="true"
7458    static="false" final="false" visibility="public"
7459    deprecated="not deprecated">
7460    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7461    <implements name="com.google.inject.spi.HasDependencies"/>
7462    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
7463      abstract="false" native="false" synchronized="false"
7464      static="false" final="false" visibility="public"
7465      deprecated="not deprecated">
7466      <doc>
7467      <![CDATA[Gets the constructor this binding injects.]]>
7468      </doc>
7469    </method>
7470    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
7471      abstract="false" native="false" synchronized="false"
7472      static="false" final="false" visibility="public"
7473      deprecated="not deprecated">
7474      <doc>
7475      <![CDATA[Returns all instance method and field injection points on {@code type}.
7476
7477 @return a possibly empty set of injection points. The set has a specified iteration order. All
7478      fields are returned and then all methods. Within the fields, supertype fields are returned
7479      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
7480      </doc>
7481    </method>
7482    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
7483      abstract="false" native="false" synchronized="false"
7484      static="false" final="false" visibility="public"
7485      deprecated="not deprecated">
7486      <doc>
7487      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
7488
7489 @return a possibly empty map]]>
7490      </doc>
7491    </method>
7492    <doc>
7493    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
7494 instantiated by invoking the constructor.
7495
7496 @author jessewilson@google.com (Jesse Wilson)
7497 @since 2.0]]>
7498    </doc>
7499  </interface>
7500  <!-- end interface com.google.inject.spi.ConstructorBinding -->
7501  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
7502  <interface name="ConvertedConstantBinding"    abstract="true"
7503    static="false" final="false" visibility="public"
7504    deprecated="not deprecated">
7505    <implements name="com.google.inject.Binding&lt;T&gt;"/>
7506    <implements name="com.google.inject.spi.HasDependencies"/>
7507    <method name="getValue" return="T"
7508      abstract="false" native="false" synchronized="false"
7509      static="false" final="false" visibility="public"
7510      deprecated="not deprecated">
7511      <doc>
7512      <![CDATA[Returns the converted value.]]>
7513      </doc>
7514    </method>
7515    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
7516      abstract="false" native="false" synchronized="false"
7517      static="false" final="false" visibility="public"
7518      deprecated="not deprecated">
7519      <doc>
7520      <![CDATA[Returns the type converter binding used to convert the constant.
7521 
7522 @since 3.0]]>
7523      </doc>
7524    </method>
7525    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
7526      abstract="false" native="false" synchronized="false"
7527      static="false" final="false" visibility="public"
7528      deprecated="not deprecated">
7529      <doc>
7530      <![CDATA[Returns the key for the source binding. That binding can e retrieved from an injector using
7531 {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
7532      </doc>
7533    </method>
7534    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7535      abstract="false" native="false" synchronized="false"
7536      static="false" final="false" visibility="public"
7537      deprecated="not deprecated">
7538      <doc>
7539      <![CDATA[Returns a singleton set containing only the converted key.]]>
7540      </doc>
7541    </method>
7542    <doc>
7543    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
7544 binding annotation but a different type.
7545
7546 @author jessewilson@google.com (Jesse Wilson)
7547 @since 2.0]]>
7548    </doc>
7549  </interface>
7550  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
7551  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
7552  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
7553    abstract="false"
7554    static="false" final="false" visibility="public"
7555    deprecated="not deprecated">
7556    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
7557    <constructor name="DefaultBindingScopingVisitor"
7558      static="false" final="false" visibility="public"
7559      deprecated="not deprecated">
7560    </constructor>
7561    <method name="visitOther" return="V"
7562      abstract="false" native="false" synchronized="false"
7563      static="false" final="false" visibility="protected"
7564      deprecated="not deprecated">
7565      <doc>
7566      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7567      </doc>
7568    </method>
7569    <method name="visitEagerSingleton" return="V"
7570      abstract="false" native="false" synchronized="false"
7571      static="false" final="false" visibility="public"
7572      deprecated="not deprecated">
7573    </method>
7574    <method name="visitScope" return="V"
7575      abstract="false" native="false" synchronized="false"
7576      static="false" final="false" visibility="public"
7577      deprecated="not deprecated">
7578      <param name="scope" type="com.google.inject.Scope"/>
7579    </method>
7580    <method name="visitScopeAnnotation" return="V"
7581      abstract="false" native="false" synchronized="false"
7582      static="false" final="false" visibility="public"
7583      deprecated="not deprecated">
7584      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7585    </method>
7586    <method name="visitNoScoping" return="V"
7587      abstract="false" native="false" synchronized="false"
7588      static="false" final="false" visibility="public"
7589      deprecated="not deprecated">
7590    </method>
7591    <doc>
7592    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7593 {@link #visitOther()}, returning its result.
7594
7595 @param <V> any type to be returned by the visit method. Use {@link Void} with
7596     {@code return null} if no return type is needed.
7597 
7598 @author jessewilson@google.com (Jesse Wilson)
7599 @since 2.0]]>
7600    </doc>
7601  </class>
7602  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
7603  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
7604  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
7605    abstract="true"
7606    static="false" final="false" visibility="public"
7607    deprecated="not deprecated">
7608    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7609    <constructor name="DefaultBindingTargetVisitor"
7610      static="false" final="false" visibility="public"
7611      deprecated="not deprecated">
7612    </constructor>
7613    <method name="visitOther" return="V"
7614      abstract="false" native="false" synchronized="false"
7615      static="false" final="false" visibility="protected"
7616      deprecated="not deprecated">
7617      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
7618      <doc>
7619      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7620      </doc>
7621    </method>
7622    <method name="visit" return="V"
7623      abstract="false" native="false" synchronized="false"
7624      static="false" final="false" visibility="public"
7625      deprecated="not deprecated">
7626      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7627    </method>
7628    <method name="visit" return="V"
7629      abstract="false" native="false" synchronized="false"
7630      static="false" final="false" visibility="public"
7631      deprecated="not deprecated">
7632      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7633    </method>
7634    <method name="visit" return="V"
7635      abstract="false" native="false" synchronized="false"
7636      static="false" final="false" visibility="public"
7637      deprecated="not deprecated">
7638      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7639    </method>
7640    <method name="visit" return="V"
7641      abstract="false" native="false" synchronized="false"
7642      static="false" final="false" visibility="public"
7643      deprecated="not deprecated">
7644      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7645    </method>
7646    <method name="visit" return="V"
7647      abstract="false" native="false" synchronized="false"
7648      static="false" final="false" visibility="public"
7649      deprecated="not deprecated">
7650      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7651    </method>
7652    <method name="visit" return="V"
7653      abstract="false" native="false" synchronized="false"
7654      static="false" final="false" visibility="public"
7655      deprecated="not deprecated">
7656      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7657    </method>
7658    <method name="visit" return="V"
7659      abstract="false" native="false" synchronized="false"
7660      static="false" final="false" visibility="public"
7661      deprecated="not deprecated">
7662      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
7663    </method>
7664    <method name="visit" return="V"
7665      abstract="false" native="false" synchronized="false"
7666      static="false" final="false" visibility="public"
7667      deprecated="not deprecated">
7668      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
7669    </method>
7670    <method name="visit" return="V"
7671      abstract="false" native="false" synchronized="false"
7672      static="false" final="false" visibility="public"
7673      deprecated="not deprecated">
7674      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
7675    </method>
7676    <doc>
7677    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
7678 #visitOther(Binding)}, returning its result.
7679
7680 @param <V> any type to be returned by the visit method. Use {@link Void} with
7681     {@code return null} if no return type is needed.
7682
7683 @author jessewilson@google.com (Jesse Wilson)
7684 @since 2.0]]>
7685    </doc>
7686  </class>
7687  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
7688  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
7689  <class name="DefaultElementVisitor" extends="java.lang.Object"
7690    abstract="true"
7691    static="false" final="false" visibility="public"
7692    deprecated="not deprecated">
7693    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
7694    <constructor name="DefaultElementVisitor"
7695      static="false" final="false" visibility="public"
7696      deprecated="not deprecated">
7697    </constructor>
7698    <method name="visitOther" return="V"
7699      abstract="false" native="false" synchronized="false"
7700      static="false" final="false" visibility="protected"
7701      deprecated="not deprecated">
7702      <param name="element" type="com.google.inject.spi.Element"/>
7703      <doc>
7704      <![CDATA[Default visit implementation. Returns {@code null}.]]>
7705      </doc>
7706    </method>
7707    <method name="visit" return="V"
7708      abstract="false" native="false" synchronized="false"
7709      static="false" final="false" visibility="public"
7710      deprecated="not deprecated">
7711      <param name="message" type="com.google.inject.spi.Message"/>
7712    </method>
7713    <method name="visit" return="V"
7714      abstract="false" native="false" synchronized="false"
7715      static="false" final="false" visibility="public"
7716      deprecated="not deprecated">
7717      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
7718    </method>
7719    <method name="visit" return="V"
7720      abstract="false" native="false" synchronized="false"
7721      static="false" final="false" visibility="public"
7722      deprecated="not deprecated">
7723      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
7724    </method>
7725    <method name="visit" return="V"
7726      abstract="false" native="false" synchronized="false"
7727      static="false" final="false" visibility="public"
7728      deprecated="not deprecated">
7729      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
7730    </method>
7731    <method name="visit" return="V"
7732      abstract="false" native="false" synchronized="false"
7733      static="false" final="false" visibility="public"
7734      deprecated="not deprecated">
7735      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
7736    </method>
7737    <method name="visit" return="V"
7738      abstract="false" native="false" synchronized="false"
7739      static="false" final="false" visibility="public"
7740      deprecated="not deprecated">
7741      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
7742    </method>
7743    <method name="visit" return="V"
7744      abstract="false" native="false" synchronized="false"
7745      static="false" final="false" visibility="public"
7746      deprecated="not deprecated">
7747      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
7748    </method>
7749    <method name="visit" return="V"
7750      abstract="false" native="false" synchronized="false"
7751      static="false" final="false" visibility="public"
7752      deprecated="not deprecated">
7753      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
7754    </method>
7755    <method name="visit" return="V"
7756      abstract="false" native="false" synchronized="false"
7757      static="false" final="false" visibility="public"
7758      deprecated="not deprecated">
7759      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
7760    </method>
7761    <method name="visit" return="V"
7762      abstract="false" native="false" synchronized="false"
7763      static="false" final="false" visibility="public"
7764      deprecated="not deprecated">
7765      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
7766    </method>
7767    <method name="visit" return="V"
7768      abstract="false" native="false" synchronized="false"
7769      static="false" final="false" visibility="public"
7770      deprecated="not deprecated">
7771      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
7772    </method>
7773    <method name="visit" return="V"
7774      abstract="false" native="false" synchronized="false"
7775      static="false" final="false" visibility="public"
7776      deprecated="not deprecated">
7777      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
7778    </method>
7779    <method name="visit" return="V"
7780      abstract="false" native="false" synchronized="false"
7781      static="false" final="false" visibility="public"
7782      deprecated="not deprecated">
7783      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
7784    </method>
7785    <doc>
7786    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
7787 {@link #visitOther(Element)}, returning its result.
7788
7789 @param <V> any type to be returned by the visit method. Use {@link Void} with
7790     {@code return null} if no return type is needed.
7791
7792 @author sberlin@gmail.com (Sam Berlin)
7793 @since 2.0]]>
7794    </doc>
7795  </class>
7796  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
7797  <!-- start class com.google.inject.spi.Dependency -->
7798  <class name="Dependency" extends="java.lang.Object"
7799    abstract="false"
7800    static="false" final="true" visibility="public"
7801    deprecated="not deprecated">
7802    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
7803      abstract="false" native="false" synchronized="false"
7804      static="true" final="false" visibility="public"
7805      deprecated="not deprecated">
7806      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
7807      <doc>
7808      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
7809 nullable.]]>
7810      </doc>
7811    </method>
7812    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
7813      abstract="false" native="false" synchronized="false"
7814      static="true" final="false" visibility="public"
7815      deprecated="not deprecated">
7816      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
7817      <doc>
7818      <![CDATA[Returns the dependencies from the given injection points.]]>
7819      </doc>
7820    </method>
7821    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
7822      abstract="false" native="false" synchronized="false"
7823      static="false" final="false" visibility="public"
7824      deprecated="not deprecated">
7825      <doc>
7826      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
7827      </doc>
7828    </method>
7829    <method name="isNullable" return="boolean"
7830      abstract="false" native="false" synchronized="false"
7831      static="false" final="false" visibility="public"
7832      deprecated="not deprecated">
7833      <doc>
7834      <![CDATA[Returns true if null is a legal value for this dependency.]]>
7835      </doc>
7836    </method>
7837    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
7838      abstract="false" native="false" synchronized="false"
7839      static="false" final="false" visibility="public"
7840      deprecated="not deprecated">
7841      <doc>
7842      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
7843 attached to a particular injection point.]]>
7844      </doc>
7845    </method>
7846    <method name="getParameterIndex" return="int"
7847      abstract="false" native="false" synchronized="false"
7848      static="false" final="false" visibility="public"
7849      deprecated="not deprecated">
7850      <doc>
7851      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
7852 this dependency does not belong to a parameter list. Only method and constuctor dependencies
7853 are elements in a parameter list.]]>
7854      </doc>
7855    </method>
7856    <method name="hashCode" return="int"
7857      abstract="false" native="false" synchronized="false"
7858      static="false" final="false" visibility="public"
7859      deprecated="not deprecated">
7860    </method>
7861    <method name="equals" return="boolean"
7862      abstract="false" native="false" synchronized="false"
7863      static="false" final="false" visibility="public"
7864      deprecated="not deprecated">
7865      <param name="o" type="java.lang.Object"/>
7866    </method>
7867    <method name="toString" return="java.lang.String"
7868      abstract="false" native="false" synchronized="false"
7869      static="false" final="false" visibility="public"
7870      deprecated="not deprecated">
7871    </method>
7872    <doc>
7873    <![CDATA[A variable that can be resolved by an injector.
7874
7875 <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
7876 that's attached to a constructor, method or field.
7877
7878 @author crazybob@google.com (Bob Lee)
7879 @author jessewilson@google.com (Jesse Wilson)
7880 @since 2.0]]>
7881    </doc>
7882  </class>
7883  <!-- end class com.google.inject.spi.Dependency -->
7884  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
7885  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
7886    abstract="false"
7887    static="false" final="true" visibility="public"
7888    deprecated="not deprecated">
7889    <implements name="com.google.inject.spi.Element"/>
7890    <method name="getSource" return="java.lang.Object"
7891      abstract="false" native="false" synchronized="false"
7892      static="false" final="false" visibility="public"
7893      deprecated="not deprecated">
7894    </method>
7895    <method name="applyTo"
7896      abstract="false" native="false" synchronized="false"
7897      static="false" final="false" visibility="public"
7898      deprecated="not deprecated">
7899      <param name="binder" type="com.google.inject.Binder"/>
7900    </method>
7901    <method name="acceptVisitor" return="T"
7902      abstract="false" native="false" synchronized="false"
7903      static="false" final="false" visibility="public"
7904      deprecated="not deprecated">
7905      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7906    </method>
7907    <doc>
7908    <![CDATA[A request to disable circular proxies.
7909
7910 @author sameb@google.com (Sam Berlin)
7911 @since 3.0]]>
7912    </doc>
7913  </class>
7914  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
7915  <!-- start interface com.google.inject.spi.Element -->
7916  <interface name="Element"    abstract="true"
7917    static="false" final="false" visibility="public"
7918    deprecated="not deprecated">
7919    <method name="getSource" return="java.lang.Object"
7920      abstract="false" native="false" synchronized="false"
7921      static="false" final="false" visibility="public"
7922      deprecated="not deprecated">
7923      <doc>
7924      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
7925 configured. Used by Guice in the production of descriptive error messages.
7926
7927 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
7928 example. Tools should simply call {@code toString()} on the source object if the type is
7929 unfamiliar.]]>
7930      </doc>
7931    </method>
7932    <method name="acceptVisitor" return="T"
7933      abstract="false" native="false" synchronized="false"
7934      static="false" final="false" visibility="public"
7935      deprecated="not deprecated">
7936      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
7937      <doc>
7938      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
7939
7940 @param visitor to call back on]]>
7941      </doc>
7942    </method>
7943    <method name="applyTo"
7944      abstract="false" native="false" synchronized="false"
7945      static="false" final="false" visibility="public"
7946      deprecated="not deprecated">
7947      <param name="binder" type="com.google.inject.Binder"/>
7948      <doc>
7949      <![CDATA[Writes this module element to the given binder (optional operation).
7950
7951 @param binder to apply configuration element to
7952 @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
7953     element.]]>
7954      </doc>
7955    </method>
7956    <doc>
7957    <![CDATA[A core component of a module or injector.
7958
7959 <p>The elements of a module can be inspected, validated and rewritten. Use {@link
7960 Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
7961 from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
7962 This can be used for static analysis and generation of Guice modules.
7963
7964 <p>The elements of an injector can be inspected and exercised. Use {@link
7965 com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
7966
7967 @author jessewilson@google.com (Jesse Wilson)
7968 @author crazybob@google.com (Bob Lee)
7969 @since 2.0]]>
7970    </doc>
7971  </interface>
7972  <!-- end interface com.google.inject.spi.Element -->
7973  <!-- start class com.google.inject.spi.Elements -->
7974  <class name="Elements" extends="java.lang.Object"
7975    abstract="false"
7976    static="false" final="true" visibility="public"
7977    deprecated="not deprecated">
7978    <constructor name="Elements"
7979      static="false" final="false" visibility="public"
7980      deprecated="not deprecated">
7981    </constructor>
7982    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
7983      abstract="false" native="false" synchronized="false"
7984      static="true" final="false" visibility="public"
7985      deprecated="not deprecated">
7986      <param name="modules" type="com.google.inject.Module[]"/>
7987      <doc>
7988      <![CDATA[Records the elements executed by {@code modules}.]]>
7989      </doc>
7990    </method>
7991    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
7992      abstract="false" native="false" synchronized="false"
7993      static="true" final="false" visibility="public"
7994      deprecated="not deprecated">
7995      <param name="stage" type="com.google.inject.Stage"/>
7996      <param name="modules" type="com.google.inject.Module[]"/>
7997      <doc>
7998      <![CDATA[Records the elements executed by {@code modules}.]]>
7999      </doc>
8000    </method>
8001    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8002      abstract="false" native="false" synchronized="false"
8003      static="true" final="false" visibility="public"
8004      deprecated="not deprecated">
8005      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8006      <doc>
8007      <![CDATA[Records the elements executed by {@code modules}.]]>
8008      </doc>
8009    </method>
8010    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8011      abstract="false" native="false" synchronized="false"
8012      static="true" final="false" visibility="public"
8013      deprecated="not deprecated">
8014      <param name="stage" type="com.google.inject.Stage"/>
8015      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8016      <doc>
8017      <![CDATA[Records the elements executed by {@code modules}.]]>
8018      </doc>
8019    </method>
8020    <method name="getModule" return="com.google.inject.Module"
8021      abstract="false" native="false" synchronized="false"
8022      static="true" final="false" visibility="public"
8023      deprecated="not deprecated">
8024      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8025      <doc>
8026      <![CDATA[Returns the module composed of {@code elements}.]]>
8027      </doc>
8028    </method>
8029    <doc>
8030    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8031 Element#applyTo(Binder) rewritten}.
8032
8033 @author jessewilson@google.com (Jesse Wilson)
8034 @since 2.0]]>
8035    </doc>
8036  </class>
8037  <!-- end class com.google.inject.spi.Elements -->
8038  <!-- start interface com.google.inject.spi.ElementVisitor -->
8039  <interface name="ElementVisitor"    abstract="true"
8040    static="false" final="false" visibility="public"
8041    deprecated="not deprecated">
8042    <method name="visit" return="V"
8043      abstract="false" native="false" synchronized="false"
8044      static="false" final="false" visibility="public"
8045      deprecated="not deprecated">
8046      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8047      <doc>
8048      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8049 instances of the type.]]>
8050      </doc>
8051    </method>
8052    <method name="visit" return="V"
8053      abstract="false" native="false" synchronized="false"
8054      static="false" final="false" visibility="public"
8055      deprecated="not deprecated">
8056      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8057      <doc>
8058      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8059      </doc>
8060    </method>
8061    <method name="visit" return="V"
8062      abstract="false" native="false" synchronized="false"
8063      static="false" final="false" visibility="public"
8064      deprecated="not deprecated">
8065      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8066      <doc>
8067      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8068      </doc>
8069    </method>
8070    <method name="visit" return="V"
8071      abstract="false" native="false" synchronized="false"
8072      static="false" final="false" visibility="public"
8073      deprecated="not deprecated">
8074      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8075      <doc>
8076      <![CDATA[Visit a registration of type converters for matching target types.]]>
8077      </doc>
8078    </method>
8079    <method name="visit" return="V"
8080      abstract="false" native="false" synchronized="false"
8081      static="false" final="false" visibility="public"
8082      deprecated="not deprecated">
8083      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8084      <doc>
8085      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8086      </doc>
8087    </method>
8088    <method name="visit" return="V"
8089      abstract="false" native="false" synchronized="false"
8090      static="false" final="false" visibility="public"
8091      deprecated="not deprecated">
8092      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8093      <doc>
8094      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8095      </doc>
8096    </method>
8097    <method name="visit" return="V"
8098      abstract="false" native="false" synchronized="false"
8099      static="false" final="false" visibility="public"
8100      deprecated="not deprecated">
8101      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8102      <doc>
8103      <![CDATA[Visit a lookup of the provider for a type.]]>
8104      </doc>
8105    </method>
8106    <method name="visit" return="V"
8107      abstract="false" native="false" synchronized="false"
8108      static="false" final="false" visibility="public"
8109      deprecated="not deprecated">
8110      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8111      <doc>
8112      <![CDATA[Visit a lookup of the members injector.]]>
8113      </doc>
8114    </method>
8115    <method name="visit" return="V"
8116      abstract="false" native="false" synchronized="false"
8117      static="false" final="false" visibility="public"
8118      deprecated="not deprecated">
8119      <param name="message" type="com.google.inject.spi.Message"/>
8120      <doc>
8121      <![CDATA[Visit an error message and the context in which it occured.]]>
8122      </doc>
8123    </method>
8124    <method name="visit" return="V"
8125      abstract="false" native="false" synchronized="false"
8126      static="false" final="false" visibility="public"
8127      deprecated="not deprecated">
8128      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
8129      <doc>
8130      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
8131 private binder}.]]>
8132      </doc>
8133    </method>
8134    <method name="visit" return="V"
8135      abstract="false" native="false" synchronized="false"
8136      static="false" final="false" visibility="public"
8137      deprecated="not deprecated">
8138      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8139      <doc>
8140      <![CDATA[Visit an injectable type listener binding.]]>
8141      </doc>
8142    </method>
8143    <method name="visit" return="V"
8144      abstract="false" native="false" synchronized="false"
8145      static="false" final="false" visibility="public"
8146      deprecated="not deprecated">
8147      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8148      <doc>
8149      <![CDATA[Visit a require explicit bindings command.
8150 
8151 @since 3.0]]>
8152      </doc>
8153    </method>
8154    <method name="visit" return="V"
8155      abstract="false" native="false" synchronized="false"
8156      static="false" final="false" visibility="public"
8157      deprecated="not deprecated">
8158      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8159      <doc>
8160      <![CDATA[Visit a disable circular proxies command.
8161 
8162 @since 3.0]]>
8163      </doc>
8164    </method>
8165    <doc>
8166    <![CDATA[Visit elements.
8167
8168 @param <V> any type to be returned by the visit method. Use {@link Void} with
8169     {@code return null} if no return type is needed.
8170 
8171 @since 2.0]]>
8172    </doc>
8173  </interface>
8174  <!-- end interface com.google.inject.spi.ElementVisitor -->
8175  <!-- start interface com.google.inject.spi.ExposedBinding -->
8176  <interface name="ExposedBinding"    abstract="true"
8177    static="false" final="false" visibility="public"
8178    deprecated="not deprecated">
8179    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8180    <implements name="com.google.inject.spi.HasDependencies"/>
8181    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
8182      abstract="false" native="false" synchronized="false"
8183      static="false" final="false" visibility="public"
8184      deprecated="not deprecated">
8185      <doc>
8186      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
8187      </doc>
8188    </method>
8189    <method name="applyTo"
8190      abstract="false" native="false" synchronized="false"
8191      static="false" final="false" visibility="public"
8192      deprecated="not deprecated">
8193      <param name="binder" type="com.google.inject.Binder"/>
8194      <doc>
8195      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
8196      </doc>
8197    </method>
8198    <doc>
8199    <![CDATA[A binding to a key exposed from an enclosed private environment.
8200
8201 @author jessewilson@google.com (Jesse Wilson)
8202 @since 2.0]]>
8203    </doc>
8204  </interface>
8205  <!-- end interface com.google.inject.spi.ExposedBinding -->
8206  <!-- start interface com.google.inject.spi.HasDependencies -->
8207  <interface name="HasDependencies"    abstract="true"
8208    static="false" final="false" visibility="public"
8209    deprecated="not deprecated">
8210    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8211      abstract="false" native="false" synchronized="false"
8212      static="false" final="false" visibility="public"
8213      deprecated="not deprecated">
8214      <doc>
8215      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
8216 known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
8217 included in the returned set.
8218 
8219 @return a possibly empty set]]>
8220      </doc>
8221    </method>
8222    <doc>
8223    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
8224 providers} and instances that expose their dependencies explicitly.
8225
8226 @author jessewilson@google.com (Jesse Wilson)
8227 @since 2.0]]>
8228    </doc>
8229  </interface>
8230  <!-- end interface com.google.inject.spi.HasDependencies -->
8231  <!-- start interface com.google.inject.spi.InjectionListener -->
8232  <interface name="InjectionListener"    abstract="true"
8233    static="false" final="false" visibility="public"
8234    deprecated="not deprecated">
8235    <method name="afterInjection"
8236      abstract="false" native="false" synchronized="false"
8237      static="false" final="false" visibility="public"
8238      deprecated="not deprecated">
8239      <param name="injectee" type="I"/>
8240      <doc>
8241      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
8242
8243 @param injectee instance that Guice injected dependencies into]]>
8244      </doc>
8245    </method>
8246    <doc>
8247    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
8248 injections, post-injection initialization, and more.
8249
8250 @author crazybob@google.com (Bob Lee)
8251 @author jessewilson@google.com (Jesse Wilson)
8252 @since 2.0]]>
8253    </doc>
8254  </interface>
8255  <!-- end interface com.google.inject.spi.InjectionListener -->
8256  <!-- start class com.google.inject.spi.InjectionPoint -->
8257  <class name="InjectionPoint" extends="java.lang.Object"
8258    abstract="false"
8259    static="false" final="true" visibility="public"
8260    deprecated="not deprecated">
8261    <method name="getMember" return="java.lang.reflect.Member"
8262      abstract="false" native="false" synchronized="false"
8263      static="false" final="false" visibility="public"
8264      deprecated="not deprecated">
8265      <doc>
8266      <![CDATA[Returns the injected constructor, field, or method.]]>
8267      </doc>
8268    </method>
8269    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8270      abstract="false" native="false" synchronized="false"
8271      static="false" final="false" visibility="public"
8272      deprecated="not deprecated">
8273      <doc>
8274      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
8275 constructor, the dependencies will correspond to that member's parameters. Field injection
8276 points always have a single dependency for the field itself.
8277
8278 @return a possibly-empty list]]>
8279      </doc>
8280    </method>
8281    <method name="isOptional" return="boolean"
8282      abstract="false" native="false" synchronized="false"
8283      static="false" final="false" visibility="public"
8284      deprecated="not deprecated">
8285      <doc>
8286      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
8287 for all required dependencies. Both explicit bindings (as specified in a module), and implicit
8288 bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
8289 constructors etc.) may be used to satisfy optional injection points.]]>
8290      </doc>
8291    </method>
8292    <method name="isToolable" return="boolean"
8293      abstract="false" native="false" synchronized="false"
8294      static="false" final="false" visibility="public"
8295      deprecated="not deprecated">
8296      <doc>
8297      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
8298 
8299 @since 3.0]]>
8300      </doc>
8301    </method>
8302    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
8303      abstract="false" native="false" synchronized="false"
8304      static="false" final="false" visibility="public"
8305      deprecated="not deprecated">
8306      <doc>
8307      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
8308 parameterized type, the result will include more type information than the member's {@link
8309 Member#getDeclaringClass() raw declaring class}.
8310 
8311 @since 3.0]]>
8312      </doc>
8313    </method>
8314    <method name="equals" return="boolean"
8315      abstract="false" native="false" synchronized="false"
8316      static="false" final="false" visibility="public"
8317      deprecated="not deprecated">
8318      <param name="o" type="java.lang.Object"/>
8319    </method>
8320    <method name="hashCode" return="int"
8321      abstract="false" native="false" synchronized="false"
8322      static="false" final="false" visibility="public"
8323      deprecated="not deprecated">
8324    </method>
8325    <method name="toString" return="java.lang.String"
8326      abstract="false" native="false" synchronized="false"
8327      static="false" final="false" visibility="public"
8328      deprecated="not deprecated">
8329    </method>
8330    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8331      abstract="false" native="false" synchronized="false"
8332      static="true" final="false" visibility="public"
8333      deprecated="not deprecated">
8334      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8335      <doc>
8336      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
8337 constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
8338 type literal.
8339
8340 @param constructor any single constructor present on {@code type}.
8341 
8342 @since 3.0]]>
8343      </doc>
8344    </method>
8345    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
8346      abstract="false" native="false" synchronized="false"
8347      static="true" final="false" visibility="public"
8348      deprecated="not deprecated">
8349      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
8350      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
8351      <doc>
8352      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
8353
8354 @param constructor any single constructor present on {@code type}.
8355 @param type the concrete type that defines {@code constructor}.
8356 
8357 @since 3.0]]>
8358      </doc>
8359    </method>
8360    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8361      abstract="false" native="false" synchronized="false"
8362      static="true" final="false" visibility="public"
8363      deprecated="not deprecated">
8364      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8365      <doc>
8366      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8367
8368 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8369     or a no-arguments constructor that is not private.
8370 @throws ConfigurationException if there is no injectable constructor, more than one injectable
8371     constructor, or if parameters of the injectable constructor are malformed, such as a
8372     parameter with multiple binding annotations.]]>
8373      </doc>
8374    </method>
8375    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
8376      abstract="false" native="false" synchronized="false"
8377      static="true" final="false" visibility="public"
8378      deprecated="not deprecated">
8379      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8380      <doc>
8381      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
8382
8383 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
8384     or a no-arguments constructor that is not private.
8385 @throws ConfigurationException if there is no injectable constructor, more than one injectable
8386     constructor, or if parameters of the injectable constructor are malformed, such as a
8387     parameter with multiple binding annotations.]]>
8388      </doc>
8389    </method>
8390    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8391      abstract="false" native="false" synchronized="false"
8392      static="true" final="false" visibility="public"
8393      deprecated="not deprecated">
8394      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8395      <doc>
8396      <![CDATA[Returns all static method and field injection points on {@code type}.
8397
8398 @return a possibly empty set of injection points. The set has a specified iteration order. All
8399      fields are returned and then all methods. Within the fields, supertype fields are returned
8400      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8401 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8402      a field with multiple binding annotations. The exception's {@link
8403      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8404      of the valid injection points.]]>
8405      </doc>
8406    </method>
8407    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8408      abstract="false" native="false" synchronized="false"
8409      static="true" final="false" visibility="public"
8410      deprecated="not deprecated">
8411      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8412      <doc>
8413      <![CDATA[Returns all static method and field injection points on {@code type}.
8414
8415 @return a possibly empty set of injection points. The set has a specified iteration order. All
8416      fields are returned and then all methods. Within the fields, supertype fields are returned
8417      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8418 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8419      a field with multiple binding annotations. The exception's {@link
8420      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8421      of the valid injection points.]]>
8422      </doc>
8423    </method>
8424    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8425      abstract="false" native="false" synchronized="false"
8426      static="true" final="false" visibility="public"
8427      deprecated="not deprecated">
8428      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
8429      <doc>
8430      <![CDATA[Returns all instance method and field injection points on {@code type}.
8431
8432 @return a possibly empty set of injection points. The set has a specified iteration order. All
8433      fields are returned and then all methods. Within the fields, supertype fields are returned
8434      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8435 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8436      a field with multiple binding annotations. The exception's {@link
8437      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8438      of the valid injection points.]]>
8439      </doc>
8440    </method>
8441    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8442      abstract="false" native="false" synchronized="false"
8443      static="true" final="false" visibility="public"
8444      deprecated="not deprecated">
8445      <param name="type" type="java.lang.Class&lt;?&gt;"/>
8446      <doc>
8447      <![CDATA[Returns all instance method and field injection points on {@code type}.
8448
8449 @return a possibly empty set of injection points. The set has a specified iteration order. All
8450      fields are returned and then all methods. Within the fields, supertype fields are returned
8451      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8452 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
8453      a field with multiple binding annotations. The exception's {@link
8454      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8455      of the valid injection points.]]>
8456      </doc>
8457    </method>
8458    <doc>
8459    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
8460 {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
8461 omit the annotation.
8462
8463 @author crazybob@google.com (Bob Lee)
8464 @since 2.0]]>
8465    </doc>
8466  </class>
8467  <!-- end class com.google.inject.spi.InjectionPoint -->
8468  <!-- start class com.google.inject.spi.InjectionRequest -->
8469  <class name="InjectionRequest" extends="java.lang.Object"
8470    abstract="false"
8471    static="false" final="true" visibility="public"
8472    deprecated="not deprecated">
8473    <implements name="com.google.inject.spi.Element"/>
8474    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
8475      static="false" final="false" visibility="public"
8476      deprecated="not deprecated">
8477    </constructor>
8478    <method name="getSource" return="java.lang.Object"
8479      abstract="false" native="false" synchronized="false"
8480      static="false" final="false" visibility="public"
8481      deprecated="not deprecated">
8482    </method>
8483    <method name="getInstance" return="T"
8484      abstract="false" native="false" synchronized="false"
8485      static="false" final="false" visibility="public"
8486      deprecated="not deprecated">
8487    </method>
8488    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8489      abstract="false" native="false" synchronized="false"
8490      static="false" final="false" visibility="public"
8491      deprecated="not deprecated">
8492    </method>
8493    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8494      abstract="false" native="false" synchronized="false"
8495      static="false" final="false" visibility="public"
8496      deprecated="not deprecated">
8497      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
8498      <doc>
8499      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
8500 this request.
8501
8502 @return a possibly empty set of injection points. The set has a specified iteration order. All
8503      fields are returned and then all methods. Within the fields, supertype fields are returned
8504      before subtype fields. Similarly, supertype methods are returned before subtype methods.
8505 @throws ConfigurationException if there is a malformed injection point on the class of {@code
8506      instance}, such as a field with multiple binding annotations. The exception's {@link
8507      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
8508      of the valid injection points.]]>
8509      </doc>
8510    </method>
8511    <method name="acceptVisitor" return="R"
8512      abstract="false" native="false" synchronized="false"
8513      static="false" final="false" visibility="public"
8514      deprecated="not deprecated">
8515      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
8516    </method>
8517    <method name="applyTo"
8518      abstract="false" native="false" synchronized="false"
8519      static="false" final="false" visibility="public"
8520      deprecated="not deprecated">
8521      <param name="binder" type="com.google.inject.Binder"/>
8522    </method>
8523    <doc>
8524    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
8525 explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
8526 requestInjection()} statements:
8527 <pre>
8528     requestInjection(serviceInstance);</pre>
8529
8530 @author mikeward@google.com (Mike Ward)
8531 @since 2.0]]>
8532    </doc>
8533  </class>
8534  <!-- end class com.google.inject.spi.InjectionRequest -->
8535  <!-- start interface com.google.inject.spi.InstanceBinding -->
8536  <interface name="InstanceBinding"    abstract="true"
8537    static="false" final="false" visibility="public"
8538    deprecated="not deprecated">
8539    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8540    <implements name="com.google.inject.spi.HasDependencies"/>
8541    <method name="getInstance" return="T"
8542      abstract="false" native="false" synchronized="false"
8543      static="false" final="false" visibility="public"
8544      deprecated="not deprecated">
8545      <doc>
8546      <![CDATA[Returns the user-supplied instance.]]>
8547      </doc>
8548    </method>
8549    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8550      abstract="false" native="false" synchronized="false"
8551      static="false" final="false" visibility="public"
8552      deprecated="not deprecated">
8553      <doc>
8554      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
8555 time only.
8556
8557 @return a possibly empty set]]>
8558      </doc>
8559    </method>
8560    <doc>
8561    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
8562
8563 @author jessewilson@google.com (Jesse Wilson)
8564 @since 2.0]]>
8565    </doc>
8566  </interface>
8567  <!-- end interface com.google.inject.spi.InstanceBinding -->
8568  <!-- start class com.google.inject.spi.InterceptorBinding -->
8569  <class name="InterceptorBinding" extends="java.lang.Object"
8570    abstract="false"
8571    static="false" final="true" visibility="public"
8572    deprecated="not deprecated">
8573    <implements name="com.google.inject.spi.Element"/>
8574    <method name="getSource" return="java.lang.Object"
8575      abstract="false" native="false" synchronized="false"
8576      static="false" final="false" visibility="public"
8577      deprecated="not deprecated">
8578    </method>
8579    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
8580      abstract="false" native="false" synchronized="false"
8581      static="false" final="false" visibility="public"
8582      deprecated="not deprecated">
8583    </method>
8584    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
8585      abstract="false" native="false" synchronized="false"
8586      static="false" final="false" visibility="public"
8587      deprecated="not deprecated">
8588    </method>
8589    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
8590      abstract="false" native="false" synchronized="false"
8591      static="false" final="false" visibility="public"
8592      deprecated="not deprecated">
8593    </method>
8594    <method name="acceptVisitor" return="T"
8595      abstract="false" native="false" synchronized="false"
8596      static="false" final="false" visibility="public"
8597      deprecated="not deprecated">
8598      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8599    </method>
8600    <method name="applyTo"
8601      abstract="false" native="false" synchronized="false"
8602      static="false" final="false" visibility="public"
8603      deprecated="not deprecated">
8604      <param name="binder" type="com.google.inject.Binder"/>
8605    </method>
8606    <doc>
8607    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
8608 explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
8609 Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
8610 <pre>
8611     bindInterceptor(Matchers.subclassesOf(MyAction.class),
8612         Matchers.annotatedWith(Transactional.class),
8613         new MyTransactionInterceptor());</pre>
8614
8615 or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
8616 org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
8617
8618 @author jessewilson@google.com (Jesse Wilson)
8619 @since 2.0]]>
8620    </doc>
8621  </class>
8622  <!-- end class com.google.inject.spi.InterceptorBinding -->
8623  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
8624  <interface name="LinkedKeyBinding"    abstract="true"
8625    static="false" final="false" visibility="public"
8626    deprecated="not deprecated">
8627    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8628    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
8629      abstract="false" native="false" synchronized="false"
8630      static="false" final="false" visibility="public"
8631      deprecated="not deprecated">
8632      <doc>
8633      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
8634 injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8635      </doc>
8636    </method>
8637    <doc>
8638    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
8639
8640 @author jessewilson@google.com (Jesse Wilson)
8641 @since 2.0]]>
8642    </doc>
8643  </interface>
8644  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
8645  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
8646  <class name="MembersInjectorLookup" extends="java.lang.Object"
8647    abstract="false"
8648    static="false" final="true" visibility="public"
8649    deprecated="not deprecated">
8650    <implements name="com.google.inject.spi.Element"/>
8651    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
8652      static="false" final="false" visibility="public"
8653      deprecated="not deprecated">
8654    </constructor>
8655    <method name="getSource" return="java.lang.Object"
8656      abstract="false" native="false" synchronized="false"
8657      static="false" final="false" visibility="public"
8658      deprecated="not deprecated">
8659    </method>
8660    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
8661      abstract="false" native="false" synchronized="false"
8662      static="false" final="false" visibility="public"
8663      deprecated="not deprecated">
8664      <doc>
8665      <![CDATA[Gets the type containing the members to be injected.]]>
8666      </doc>
8667    </method>
8668    <method name="acceptVisitor" return="T"
8669      abstract="false" native="false" synchronized="false"
8670      static="false" final="false" visibility="public"
8671      deprecated="not deprecated">
8672      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8673    </method>
8674    <method name="initializeDelegate"
8675      abstract="false" native="false" synchronized="false"
8676      static="false" final="false" visibility="public"
8677      deprecated="not deprecated">
8678      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
8679      <doc>
8680      <![CDATA[Sets the actual members injector.
8681
8682 @throws IllegalStateException if the delegate is already set]]>
8683      </doc>
8684    </method>
8685    <method name="applyTo"
8686      abstract="false" native="false" synchronized="false"
8687      static="false" final="false" visibility="public"
8688      deprecated="not deprecated">
8689      <param name="binder" type="com.google.inject.Binder"/>
8690    </method>
8691    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
8692      abstract="false" native="false" synchronized="false"
8693      static="false" final="false" visibility="public"
8694      deprecated="not deprecated">
8695      <doc>
8696      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
8697 The delegate will be initialized when this element is processed, or otherwise used to create
8698 an injector.]]>
8699      </doc>
8700    </method>
8701    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
8702      abstract="false" native="false" synchronized="false"
8703      static="false" final="false" visibility="public"
8704      deprecated="not deprecated">
8705      <doc>
8706      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
8707 initialized, which usually happens when the injector is created. The members injector will
8708 throw an {@code IllegalStateException} if you try to use it beforehand.]]>
8709      </doc>
8710    </method>
8711    <doc>
8712    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
8713 {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
8714 <pre>
8715     MembersInjector&lt;PaymentService&gt; membersInjector
8716         = getMembersInjector(PaymentService.class);</pre>
8717
8718 @author crazybob@google.com (Bob Lee)
8719 @since 2.0]]>
8720    </doc>
8721  </class>
8722  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
8723  <!-- start class com.google.inject.spi.Message -->
8724  <class name="Message" extends="java.lang.Object"
8725    abstract="false"
8726    static="false" final="true" visibility="public"
8727    deprecated="not deprecated">
8728    <implements name="java.io.Serializable"/>
8729    <implements name="com.google.inject.spi.Element"/>
8730    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
8731      static="false" final="false" visibility="public"
8732      deprecated="not deprecated">
8733      <doc>
8734      <![CDATA[@since 2.0]]>
8735      </doc>
8736    </constructor>
8737    <constructor name="Message" type="java.lang.Object, java.lang.String"
8738      static="false" final="false" visibility="public"
8739      deprecated="not deprecated">
8740    </constructor>
8741    <constructor name="Message" type="java.lang.String"
8742      static="false" final="false" visibility="public"
8743      deprecated="not deprecated">
8744    </constructor>
8745    <method name="getSource" return="java.lang.String"
8746      abstract="false" native="false" synchronized="false"
8747      static="false" final="false" visibility="public"
8748      deprecated="not deprecated">
8749    </method>
8750    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
8751      abstract="false" native="false" synchronized="false"
8752      static="false" final="false" visibility="public"
8753      deprecated="not deprecated">
8754      <doc>
8755      <![CDATA[@since 2.0]]>
8756      </doc>
8757    </method>
8758    <method name="getMessage" return="java.lang.String"
8759      abstract="false" native="false" synchronized="false"
8760      static="false" final="false" visibility="public"
8761      deprecated="not deprecated">
8762      <doc>
8763      <![CDATA[Gets the error message text.]]>
8764      </doc>
8765    </method>
8766    <method name="acceptVisitor" return="T"
8767      abstract="false" native="false" synchronized="false"
8768      static="false" final="false" visibility="public"
8769      deprecated="not deprecated">
8770      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8771      <doc>
8772      <![CDATA[@since 2.0]]>
8773      </doc>
8774    </method>
8775    <method name="getCause" return="java.lang.Throwable"
8776      abstract="false" native="false" synchronized="false"
8777      static="false" final="false" visibility="public"
8778      deprecated="not deprecated">
8779      <doc>
8780      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
8781 message was not caused by a throwable.
8782
8783 @since 2.0]]>
8784      </doc>
8785    </method>
8786    <method name="toString" return="java.lang.String"
8787      abstract="false" native="false" synchronized="false"
8788      static="false" final="false" visibility="public"
8789      deprecated="not deprecated">
8790    </method>
8791    <method name="hashCode" return="int"
8792      abstract="false" native="false" synchronized="false"
8793      static="false" final="false" visibility="public"
8794      deprecated="not deprecated">
8795    </method>
8796    <method name="equals" return="boolean"
8797      abstract="false" native="false" synchronized="false"
8798      static="false" final="false" visibility="public"
8799      deprecated="not deprecated">
8800      <param name="o" type="java.lang.Object"/>
8801    </method>
8802    <method name="applyTo"
8803      abstract="false" native="false" synchronized="false"
8804      static="false" final="false" visibility="public"
8805      deprecated="not deprecated">
8806      <param name="binder" type="com.google.inject.Binder"/>
8807      <doc>
8808      <![CDATA[@since 2.0]]>
8809      </doc>
8810    </method>
8811    <doc>
8812    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
8813 Guice and its extensions. Messages can be created explicitly in a module using {@link
8814 com.google.inject.Binder#addError(Throwable) addError()} statements:
8815 <pre>
8816     try {
8817       bindPropertiesFromFile();
8818     } catch (IOException e) {
8819       addError(e);
8820     }</pre>
8821
8822 @author crazybob@google.com (Bob Lee)]]>
8823    </doc>
8824  </class>
8825  <!-- end class com.google.inject.spi.Message -->
8826  <!-- start interface com.google.inject.spi.PrivateElements -->
8827  <interface name="PrivateElements"    abstract="true"
8828    static="false" final="false" visibility="public"
8829    deprecated="not deprecated">
8830    <implements name="com.google.inject.spi.Element"/>
8831    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8832      abstract="false" native="false" synchronized="false"
8833      static="false" final="false" visibility="public"
8834      deprecated="not deprecated">
8835      <doc>
8836      <![CDATA[Returns the configuration information in this private environment.]]>
8837      </doc>
8838    </method>
8839    <method name="getInjector" return="com.google.inject.Injector"
8840      abstract="false" native="false" synchronized="false"
8841      static="false" final="false" visibility="public"
8842      deprecated="not deprecated">
8843      <doc>
8844      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
8845 been used to create an injector.]]>
8846      </doc>
8847    </method>
8848    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
8849      abstract="false" native="false" synchronized="false"
8850      static="false" final="false" visibility="public"
8851      deprecated="not deprecated">
8852      <doc>
8853      <![CDATA[Returns the unique exposed keys for these private elements.]]>
8854      </doc>
8855    </method>
8856    <method name="getExposedSource" return="java.lang.Object"
8857      abstract="false" native="false" synchronized="false"
8858      static="false" final="false" visibility="public"
8859      deprecated="not deprecated">
8860      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
8861      <doc>
8862      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
8863 exposed. Used by Guice in the production of descriptive error messages.
8864
8865 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8866 example. Tools should simply call {@code toString()} on the source object if the type is
8867 unfamiliar.
8868
8869 @param key one of the keys exposed by this module.]]>
8870      </doc>
8871    </method>
8872    <doc>
8873    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
8874 default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
8875
8876 @author jessewilson@google.com (Jesse Wilson)
8877 @since 2.0]]>
8878    </doc>
8879  </interface>
8880  <!-- end interface com.google.inject.spi.PrivateElements -->
8881  <!-- start interface com.google.inject.spi.ProviderBinding -->
8882  <interface name="ProviderBinding"    abstract="true"
8883    static="false" final="false" visibility="public"
8884    deprecated="not deprecated">
8885    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8886    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
8887      abstract="false" native="false" synchronized="false"
8888      static="false" final="false" visibility="public"
8889      deprecated="not deprecated">
8890      <doc>
8891      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
8892 can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
8893 Injector.getBinding(providedKey)}]]>
8894      </doc>
8895    </method>
8896    <doc>
8897    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
8898 is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
8899
8900 @author jessewilson@google.com (Jesse Wilson)
8901 @since 2.0]]>
8902    </doc>
8903  </interface>
8904  <!-- end interface com.google.inject.spi.ProviderBinding -->
8905  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
8906  <interface name="ProviderInstanceBinding"    abstract="true"
8907    static="false" final="false" visibility="public"
8908    deprecated="not deprecated">
8909    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8910    <implements name="com.google.inject.spi.HasDependencies"/>
8911    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
8912      abstract="false" native="false" synchronized="false"
8913      static="false" final="false" visibility="public"
8914      deprecated="not deprecated">
8915      <doc>
8916      <![CDATA[Returns the user-supplied, unscoped provider.]]>
8917      </doc>
8918    </method>
8919    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8920      abstract="false" native="false" synchronized="false"
8921      static="false" final="false" visibility="public"
8922      deprecated="not deprecated">
8923      <doc>
8924      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
8925 time only.
8926
8927 @return a possibly empty set]]>
8928      </doc>
8929    </method>
8930    <doc>
8931    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
8932 injections.
8933
8934 @author jessewilson@google.com (Jesse Wilson)
8935 @since 2.0]]>
8936    </doc>
8937  </interface>
8938  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
8939  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
8940  <interface name="ProviderKeyBinding"    abstract="true"
8941    static="false" final="false" visibility="public"
8942    deprecated="not deprecated">
8943    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8944    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
8945      abstract="false" native="false" synchronized="false"
8946      static="false" final="false" visibility="public"
8947      deprecated="not deprecated">
8948      <doc>
8949      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
8950 injector using {@link com.google.inject.Injector#getBinding(Key)
8951 Injector.getBinding(providerKey)}]]>
8952      </doc>
8953    </method>
8954    <doc>
8955    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
8956 provider's {@code get} method is invoked.
8957
8958 @author jessewilson@google.com (Jesse Wilson)
8959 @since 2.0]]>
8960    </doc>
8961  </interface>
8962  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
8963  <!-- start class com.google.inject.spi.ProviderLookup -->
8964  <class name="ProviderLookup" extends="java.lang.Object"
8965    abstract="false"
8966    static="false" final="true" visibility="public"
8967    deprecated="not deprecated">
8968    <implements name="com.google.inject.spi.Element"/>
8969    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
8970      static="false" final="false" visibility="public"
8971      deprecated="not deprecated">
8972    </constructor>
8973    <method name="getSource" return="java.lang.Object"
8974      abstract="false" native="false" synchronized="false"
8975      static="false" final="false" visibility="public"
8976      deprecated="not deprecated">
8977    </method>
8978    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8979      abstract="false" native="false" synchronized="false"
8980      static="false" final="false" visibility="public"
8981      deprecated="not deprecated">
8982    </method>
8983    <method name="acceptVisitor" return="T"
8984      abstract="false" native="false" synchronized="false"
8985      static="false" final="false" visibility="public"
8986      deprecated="not deprecated">
8987      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8988    </method>
8989    <method name="initializeDelegate"
8990      abstract="false" native="false" synchronized="false"
8991      static="false" final="false" visibility="public"
8992      deprecated="not deprecated">
8993      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
8994      <doc>
8995      <![CDATA[Sets the actual provider.
8996
8997 @throws IllegalStateException if the delegate is already set]]>
8998      </doc>
8999    </method>
9000    <method name="applyTo"
9001      abstract="false" native="false" synchronized="false"
9002      static="false" final="false" visibility="public"
9003      deprecated="not deprecated">
9004      <param name="binder" type="com.google.inject.Binder"/>
9005    </method>
9006    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
9007      abstract="false" native="false" synchronized="false"
9008      static="false" final="false" visibility="public"
9009      deprecated="not deprecated">
9010      <doc>
9011      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
9012 will be initialized when this element is processed, or otherwise used to create an injector.]]>
9013      </doc>
9014    </method>
9015    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9016      abstract="false" native="false" synchronized="false"
9017      static="false" final="false" visibility="public"
9018      deprecated="not deprecated">
9019      <doc>
9020      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
9021 which usually happens when the injector is created. The provider will throw an {@code
9022 IllegalStateException} if you try to use it beforehand.]]>
9023      </doc>
9024    </method>
9025    <doc>
9026    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
9027 {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
9028 <pre>
9029     Provider&lt;PaymentService&gt; paymentServiceProvider
9030         = getProvider(PaymentService.class);</pre>
9031
9032 @author jessewilson@google.com (Jesse Wilson)
9033 @since 2.0]]>
9034    </doc>
9035  </class>
9036  <!-- end class com.google.inject.spi.ProviderLookup -->
9037  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
9038  <interface name="ProviderWithDependencies"    abstract="true"
9039    static="false" final="false" visibility="public"
9040    deprecated="not deprecated">
9041    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9042    <implements name="com.google.inject.spi.HasDependencies"/>
9043    <doc>
9044    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
9045 aren't specified in injections, this interface should be used to expose all dependencies.
9046
9047 @since 2.0]]>
9048    </doc>
9049  </interface>
9050  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
9051  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9052  <interface name="ProviderWithExtensionVisitor"    abstract="true"
9053    static="false" final="false" visibility="public"
9054    deprecated="not deprecated">
9055    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9056    <method name="acceptExtensionVisitor" return="V"
9057      abstract="false" native="false" synchronized="false"
9058      static="false" final="false" visibility="public"
9059      deprecated="not deprecated">
9060      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
9061      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
9062      <doc>
9063      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
9064 extension visitor, and if so, visit it using that method. If the visitor is
9065 not an instance of the custom extension visitor, this method <b>MUST</b>
9066 call visitor.visit(binding).
9067 <p> 
9068 Due to issues with generics, the type parameters of this method do not
9069 relate to the type of the provider. In practice, the 'B' type will always
9070 be a supertype of 'T'.]]>
9071      </doc>
9072    </method>
9073    <doc>
9074    <![CDATA[A Provider that is part of an extension which supports a custom
9075 BindingTargetVisitor.
9076 <p> 
9077 When an extension binds a provider instance, the provider can implement this
9078 interface to allow users using the
9079 {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
9080 custom visitor designed for that extension. A typical implementation within
9081 the extension would look like
9082 <pre> 
9083 &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
9084   if(visitor instanceof MyCustomExtensionVisitor) {
9085     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
9086   } else {
9087     return visitor.visit(binding);
9088   }
9089 }</pre> 
9090 'MyCustomExtensionVisitor' in the example above would be an interface the
9091 extension provides that users can implement in order to be notified of custom
9092 extension information. These visitor interfaces must extend from
9093 BindingTargetVisitor.
9094
9095 @since 3.0
9096 @author sameb@google.com (Sam Berlin)]]>
9097    </doc>
9098  </interface>
9099  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
9100  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
9101  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
9102    abstract="false"
9103    static="false" final="true" visibility="public"
9104    deprecated="not deprecated">
9105    <implements name="com.google.inject.spi.Element"/>
9106    <method name="getSource" return="java.lang.Object"
9107      abstract="false" native="false" synchronized="false"
9108      static="false" final="false" visibility="public"
9109      deprecated="not deprecated">
9110    </method>
9111    <method name="applyTo"
9112      abstract="false" native="false" synchronized="false"
9113      static="false" final="false" visibility="public"
9114      deprecated="not deprecated">
9115      <param name="binder" type="com.google.inject.Binder"/>
9116    </method>
9117    <method name="acceptVisitor" return="T"
9118      abstract="false" native="false" synchronized="false"
9119      static="false" final="false" visibility="public"
9120      deprecated="not deprecated">
9121      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9122    </method>
9123    <doc>
9124    <![CDATA[A request to require explicit bindings.
9125
9126 @author sameb@google.com (Sam Berlin)
9127 @since 3.0]]>
9128    </doc>
9129  </class>
9130  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
9131  <!-- start class com.google.inject.spi.ScopeBinding -->
9132  <class name="ScopeBinding" extends="java.lang.Object"
9133    abstract="false"
9134    static="false" final="true" visibility="public"
9135    deprecated="not deprecated">
9136    <implements name="com.google.inject.spi.Element"/>
9137    <method name="getSource" return="java.lang.Object"
9138      abstract="false" native="false" synchronized="false"
9139      static="false" final="false" visibility="public"
9140      deprecated="not deprecated">
9141    </method>
9142    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
9143      abstract="false" native="false" synchronized="false"
9144      static="false" final="false" visibility="public"
9145      deprecated="not deprecated">
9146    </method>
9147    <method name="getScope" return="com.google.inject.Scope"
9148      abstract="false" native="false" synchronized="false"
9149      static="false" final="false" visibility="public"
9150      deprecated="not deprecated">
9151    </method>
9152    <method name="acceptVisitor" return="T"
9153      abstract="false" native="false" synchronized="false"
9154      static="false" final="false" visibility="public"
9155      deprecated="not deprecated">
9156      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9157    </method>
9158    <method name="applyTo"
9159      abstract="false" native="false" synchronized="false"
9160      static="false" final="false" visibility="public"
9161      deprecated="not deprecated">
9162      <param name="binder" type="com.google.inject.Binder"/>
9163    </method>
9164    <doc>
9165    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
9166 explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
9167 statements:
9168 <pre>
9169     Scope recordScope = new RecordScope();
9170     bindScope(RecordScoped.class, new RecordScope());</pre>
9171
9172 @author jessewilson@google.com (Jesse Wilson)
9173 @since 2.0]]>
9174    </doc>
9175  </class>
9176  <!-- end class com.google.inject.spi.ScopeBinding -->
9177  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
9178  <class name="StaticInjectionRequest" extends="java.lang.Object"
9179    abstract="false"
9180    static="false" final="true" visibility="public"
9181    deprecated="not deprecated">
9182    <implements name="com.google.inject.spi.Element"/>
9183    <method name="getSource" return="java.lang.Object"
9184      abstract="false" native="false" synchronized="false"
9185      static="false" final="false" visibility="public"
9186      deprecated="not deprecated">
9187    </method>
9188    <method name="getType" return="java.lang.Class&lt;?&gt;"
9189      abstract="false" native="false" synchronized="false"
9190      static="false" final="false" visibility="public"
9191      deprecated="not deprecated">
9192    </method>
9193    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9194      abstract="false" native="false" synchronized="false"
9195      static="false" final="false" visibility="public"
9196      deprecated="not deprecated">
9197      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9198      <doc>
9199      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
9200 request.
9201
9202 @return a possibly empty set of injection points. The set has a specified iteration order. All
9203      fields are returned and then all methods. Within the fields, supertype fields are returned
9204      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9205 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9206      a field with multiple binding annotations. The exception's {@link
9207      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9208      of the valid injection points.]]>
9209      </doc>
9210    </method>
9211    <method name="applyTo"
9212      abstract="false" native="false" synchronized="false"
9213      static="false" final="false" visibility="public"
9214      deprecated="not deprecated">
9215      <param name="binder" type="com.google.inject.Binder"/>
9216    </method>
9217    <method name="acceptVisitor" return="T"
9218      abstract="false" native="false" synchronized="false"
9219      static="false" final="false" visibility="public"
9220      deprecated="not deprecated">
9221      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9222    </method>
9223    <doc>
9224    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
9225 explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
9226 requestStaticInjection()} statements:
9227 <pre>
9228     requestStaticInjection(MyLegacyService.class);</pre>
9229
9230 @author jessewilson@google.com (Jesse Wilson)
9231 @since 2.0]]>
9232    </doc>
9233  </class>
9234  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
9235  <!-- start class com.google.inject.spi.Toolable -->
9236  <class name="Toolable"    abstract="true"
9237    static="false" final="false" visibility="public"
9238    deprecated="not deprecated">
9239    <implements name="java.lang.annotation.Annotation"/>
9240    <doc>
9241    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
9242 This is typically useful for for extensions to Guice that perform additional validation in an
9243 injected method or field.  This only applies to objects that are already constructed when
9244 bindings are created (ie., something bound using {@link
9245 com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
9246 com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
9247 com.google.inject.Binder#requestInjection requestInjection}.
9248 
9249 @author sberlin@gmail.com (Sam Berlin)
9250 @since 3.0]]>
9251    </doc>
9252  </class>
9253  <!-- end class com.google.inject.spi.Toolable -->
9254  <!-- start interface com.google.inject.spi.TypeConverter -->
9255  <interface name="TypeConverter"    abstract="true"
9256    static="false" final="false" visibility="public"
9257    deprecated="not deprecated">
9258    <method name="convert" return="java.lang.Object"
9259      abstract="false" native="false" synchronized="false"
9260      static="false" final="false" visibility="public"
9261      deprecated="not deprecated">
9262      <param name="value" type="java.lang.String"/>
9263      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9264      <doc>
9265      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
9266      </doc>
9267    </method>
9268    <doc>
9269    <![CDATA[Converts constant string values to a different type.
9270
9271 @author crazybob@google.com (Bob Lee)
9272 @since 2.0]]>
9273    </doc>
9274  </interface>
9275  <!-- end interface com.google.inject.spi.TypeConverter -->
9276  <!-- start class com.google.inject.spi.TypeConverterBinding -->
9277  <class name="TypeConverterBinding" extends="java.lang.Object"
9278    abstract="false"
9279    static="false" final="true" visibility="public"
9280    deprecated="not deprecated">
9281    <implements name="com.google.inject.spi.Element"/>
9282    <constructor name="TypeConverterBinding" type="java.lang.Object, com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;, com.google.inject.spi.TypeConverter"
9283      static="false" final="false" visibility="public"
9284      deprecated="not deprecated">
9285      <doc>
9286      <![CDATA[@since 3.0]]>
9287      </doc>
9288    </constructor>
9289    <method name="getSource" return="java.lang.Object"
9290      abstract="false" native="false" synchronized="false"
9291      static="false" final="false" visibility="public"
9292      deprecated="not deprecated">
9293    </method>
9294    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9295      abstract="false" native="false" synchronized="false"
9296      static="false" final="false" visibility="public"
9297      deprecated="not deprecated">
9298    </method>
9299    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
9300      abstract="false" native="false" synchronized="false"
9301      static="false" final="false" visibility="public"
9302      deprecated="not deprecated">
9303    </method>
9304    <method name="acceptVisitor" return="T"
9305      abstract="false" native="false" synchronized="false"
9306      static="false" final="false" visibility="public"
9307      deprecated="not deprecated">
9308      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9309    </method>
9310    <method name="applyTo"
9311      abstract="false" native="false" synchronized="false"
9312      static="false" final="false" visibility="public"
9313      deprecated="not deprecated">
9314      <param name="binder" type="com.google.inject.Binder"/>
9315    </method>
9316    <method name="toString" return="java.lang.String"
9317      abstract="false" native="false" synchronized="false"
9318      static="false" final="false" visibility="public"
9319      deprecated="not deprecated">
9320    </method>
9321    <doc>
9322    <![CDATA[Registration of type converters for matching target types. Instances are created
9323 explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
9324 TypeConverter) convertToTypes()} statements:
9325 <pre>
9326     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
9327
9328 @author jessewilson@google.com (Jesse Wilson)
9329 @since 2.0]]>
9330    </doc>
9331  </class>
9332  <!-- end class com.google.inject.spi.TypeConverterBinding -->
9333  <!-- start interface com.google.inject.spi.TypeEncounter -->
9334  <interface name="TypeEncounter"    abstract="true"
9335    static="false" final="false" visibility="public"
9336    deprecated="not deprecated">
9337    <method name="addError"
9338      abstract="false" native="false" synchronized="false"
9339      static="false" final="false" visibility="public"
9340      deprecated="not deprecated">
9341      <param name="message" type="java.lang.String"/>
9342      <param name="arguments" type="java.lang.Object[]"/>
9343      <doc>
9344      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
9345 time. Unlike throwing an exception, this enable us to continue configuring the Injector and
9346 discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
9347 into the message.]]>
9348      </doc>
9349    </method>
9350    <method name="addError"
9351      abstract="false" native="false" synchronized="false"
9352      static="false" final="false" visibility="public"
9353      deprecated="not deprecated">
9354      <param name="t" type="java.lang.Throwable"/>
9355      <doc>
9356      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
9357 message of which will be presented to the user at a later time. If your type listener calls
9358 something that you worry may fail, you should catch the exception and pass it to this method.]]>
9359      </doc>
9360    </method>
9361    <method name="addError"
9362      abstract="false" native="false" synchronized="false"
9363      static="false" final="false" visibility="public"
9364      deprecated="not deprecated">
9365      <param name="message" type="com.google.inject.spi.Message"/>
9366      <doc>
9367      <![CDATA[Records an error message to be presented to the user at a later time.]]>
9368      </doc>
9369    </method>
9370    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9371      abstract="false" native="false" synchronized="false"
9372      static="false" final="false" visibility="public"
9373      deprecated="not deprecated">
9374      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9375      <doc>
9376      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
9377 provider will not be valid until the injector has been created. The provider will throw an
9378 {@code IllegalStateException} if you try to use it beforehand.]]>
9379      </doc>
9380    </method>
9381    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9382      abstract="false" native="false" synchronized="false"
9383      static="false" final="false" visibility="public"
9384      deprecated="not deprecated">
9385      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9386      <doc>
9387      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
9388 provider will not be valid until the injetor has been created. The provider will throw an
9389 {@code IllegalStateException} if you try to use it beforehand.]]>
9390      </doc>
9391    </method>
9392    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9393      abstract="false" native="false" synchronized="false"
9394      static="false" final="false" visibility="public"
9395      deprecated="not deprecated">
9396      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9397      <doc>
9398      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9399 of the given type {@code T}. The returned members injector will not be valid until the main
9400 injector has been created. The members injector will throw an {@code IllegalStateException}
9401 if you try to use it beforehand.
9402
9403 @param typeLiteral type to get members injector for]]>
9404      </doc>
9405    </method>
9406    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9407      abstract="false" native="false" synchronized="false"
9408      static="false" final="false" visibility="public"
9409      deprecated="not deprecated">
9410      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9411      <doc>
9412      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
9413 of the given type {@code T}. The returned members injector will not be valid until the main
9414 injector has been created. The members injector will throw an {@code IllegalStateException}
9415 if you try to use it beforehand.
9416
9417 @param type type to get members injector for]]>
9418      </doc>
9419    </method>
9420    <method name="register"
9421      abstract="false" native="false" synchronized="false"
9422      static="false" final="false" visibility="public"
9423      deprecated="not deprecated">
9424      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
9425      <doc>
9426      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
9427 performed its own injections on an instance of {@code I}.]]>
9428      </doc>
9429    </method>
9430    <method name="register"
9431      abstract="false" native="false" synchronized="false"
9432      static="false" final="false" visibility="public"
9433      deprecated="not deprecated">
9434      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
9435      <doc>
9436      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
9437 injections have been performed on an instance of {@code I}.]]>
9438      </doc>
9439    </method>
9440    <method name="bindInterceptor"
9441      abstract="false" native="false" synchronized="false"
9442      static="false" final="false" visibility="public"
9443      deprecated="not deprecated">
9444      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
9445      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
9446      <doc>
9447      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
9448 method is eligible for interception if:
9449
9450 <ul>
9451  <li>Guice created the instance the method is on</li>
9452  <li>Neither the enclosing type nor the method is final</li>
9453  <li>And the method is package-private or more accessible</li>
9454 </ul>
9455
9456 @param methodMatcher matches methods the interceptor should apply to. For
9457     example: {@code annotatedWith(Transactional.class)}.
9458 @param interceptors to bind]]>
9459      </doc>
9460    </method>
9461    <doc>
9462    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
9463 listeners and binding method interceptors for injectable type {@code I}. It is an error to use
9464 an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
9465 returned.
9466
9467 @param <I> the injectable type encountered
9468 @since 2.0]]>
9469    </doc>
9470  </interface>
9471  <!-- end interface com.google.inject.spi.TypeEncounter -->
9472  <!-- start interface com.google.inject.spi.TypeListener -->
9473  <interface name="TypeListener"    abstract="true"
9474    static="false" final="false" visibility="public"
9475    deprecated="not deprecated">
9476    <method name="hear"
9477      abstract="false" native="false" synchronized="false"
9478      static="false" final="false" visibility="public"
9479      deprecated="not deprecated">
9480      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
9481      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
9482      <doc>
9483      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
9484 Called during injector creation (or afterwords if Guice encounters a type at run time and
9485 creates a JIT binding).
9486
9487 @param type encountered by Guice
9488 @param encounter context of this encounter, enables reporting errors, registering injection
9489     listeners and binding method interceptors for {@code type}.
9490
9491 @param <I> the injectable type]]>
9492      </doc>
9493    </method>
9494    <doc>
9495    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
9496 one situation but only its methods and fields injected in another, Guice will notify this
9497 listener once.
9498
9499 <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
9500 registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
9501 com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
9502 binding method interceptors}.
9503 
9504 @since 2.0]]>
9505    </doc>
9506  </interface>
9507  <!-- end interface com.google.inject.spi.TypeListener -->
9508  <!-- start class com.google.inject.spi.TypeListenerBinding -->
9509  <class name="TypeListenerBinding" extends="java.lang.Object"
9510    abstract="false"
9511    static="false" final="true" visibility="public"
9512    deprecated="not deprecated">
9513    <implements name="com.google.inject.spi.Element"/>
9514    <method name="getListener" return="com.google.inject.spi.TypeListener"
9515      abstract="false" native="false" synchronized="false"
9516      static="false" final="false" visibility="public"
9517      deprecated="not deprecated">
9518      <doc>
9519      <![CDATA[Returns the registered listener.]]>
9520      </doc>
9521    </method>
9522    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
9523      abstract="false" native="false" synchronized="false"
9524      static="false" final="false" visibility="public"
9525      deprecated="not deprecated">
9526      <doc>
9527      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
9528      </doc>
9529    </method>
9530    <method name="getSource" return="java.lang.Object"
9531      abstract="false" native="false" synchronized="false"
9532      static="false" final="false" visibility="public"
9533      deprecated="not deprecated">
9534    </method>
9535    <method name="acceptVisitor" return="T"
9536      abstract="false" native="false" synchronized="false"
9537      static="false" final="false" visibility="public"
9538      deprecated="not deprecated">
9539      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9540    </method>
9541    <method name="applyTo"
9542      abstract="false" native="false" synchronized="false"
9543      static="false" final="false" visibility="public"
9544      deprecated="not deprecated">
9545      <param name="binder" type="com.google.inject.Binder"/>
9546    </method>
9547    <doc>
9548    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
9549 a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
9550
9551 <pre>
9552     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
9553
9554 @author jessewilson@google.com (Jesse Wilson)
9555 @since 2.0]]>
9556    </doc>
9557  </class>
9558  <!-- end class com.google.inject.spi.TypeListenerBinding -->
9559  <!-- start interface com.google.inject.spi.UntargettedBinding -->
9560  <interface name="UntargettedBinding"    abstract="true"
9561    static="false" final="false" visibility="public"
9562    deprecated="not deprecated">
9563    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9564    <doc>
9565    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
9566 strategies to resolve injections.
9567
9568 @author jessewilson@google.com (Jesse Wilson)
9569 @since 2.0]]>
9570    </doc>
9571  </interface>
9572  <!-- end interface com.google.inject.spi.UntargettedBinding -->
9573</package>
9574<package name="com.google.inject.spring">
9575  <!-- start class com.google.inject.spring.SpringIntegration -->
9576  <class name="SpringIntegration" extends="java.lang.Object"
9577    abstract="false"
9578    static="false" final="false" visibility="public"
9579    deprecated="not deprecated">
9580    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
9581      abstract="false" native="false" synchronized="false"
9582      static="true" final="false" visibility="public"
9583      deprecated="not deprecated">
9584      <param name="type" type="java.lang.Class&lt;T&gt;"/>
9585      <param name="name" type="java.lang.String"/>
9586      <doc>
9587      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
9588 Expects a binding to {@link
9589 org.springframework.beans.factory.BeanFactory}. Example usage:
9590
9591 <pre>
9592 bind(DataSource.class)
9593   .toProvider(fromSpring(DataSource.class, "dataSource"));
9594 </pre>]]>
9595      </doc>
9596    </method>
9597    <method name="bindAll"
9598      abstract="false" native="false" synchronized="false"
9599      static="true" final="false" visibility="public"
9600      deprecated="not deprecated">
9601      <param name="binder" type="com.google.inject.Binder"/>
9602      <param name="beanFactory" type="ListableBeanFactory"/>
9603      <doc>
9604      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
9605 named "foo", this method creates a binding to the bean's type and
9606 {@code @Named("foo")}.
9607
9608 @see com.google.inject.name.Named
9609 @see com.google.inject.name.Names#named(String)]]>
9610      </doc>
9611    </method>
9612    <doc>
9613    <![CDATA[Integrates Guice with Spring.
9614
9615 @author crazybob@google.com (Bob Lee)]]>
9616    </doc>
9617  </class>
9618  <!-- end class com.google.inject.spring.SpringIntegration -->
9619</package>
9620<package name="com.google.inject.struts2">
9621  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
9622  <class name="GuiceObjectFactory" extends="ObjectFactory"
9623    abstract="false"
9624    static="false" final="false" visibility="public"
9625    deprecated="Use {@link com.google.inject.servlet.Struts2Factory} instead.">
9626    <constructor name="GuiceObjectFactory"
9627      static="false" final="false" visibility="public"
9628      deprecated="not deprecated">
9629    </constructor>
9630    <method name="isNoArgConstructorRequired" return="boolean"
9631      abstract="false" native="false" synchronized="false"
9632      static="false" final="false" visibility="public"
9633      deprecated="not deprecated">
9634    </method>
9635    <method name="getClassInstance" return="java.lang.Class"
9636      abstract="false" native="false" synchronized="false"
9637      static="false" final="false" visibility="public"
9638      deprecated="not deprecated">
9639      <param name="name" type="java.lang.String"/>
9640      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
9641    </method>
9642    <method name="buildBean" return="java.lang.Object"
9643      abstract="false" native="false" synchronized="false"
9644      static="false" final="false" visibility="public"
9645      deprecated="not deprecated">
9646      <param name="clazz" type="java.lang.Class"/>
9647      <param name="extraContext" type="java.util.Map"/>
9648    </method>
9649    <method name="buildInterceptor" return="Interceptor"
9650      abstract="false" native="false" synchronized="false"
9651      static="false" final="false" visibility="public"
9652      deprecated="not deprecated">
9653      <param name="interceptorConfig" type="InterceptorConfig"/>
9654      <param name="interceptorRefParams" type="java.util.Map"/>
9655      <exception name="ConfigurationException" type="ConfigurationException"/>
9656    </method>
9657    <doc>
9658    <![CDATA[@deprecated Use {@link com.google.inject.servlet.Struts2Factory} instead.]]>
9659    </doc>
9660  </class>
9661  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
9662  <!-- start class com.google.inject.struts2.Struts2Factory -->
9663  <class name="Struts2Factory" extends="ObjectFactory"
9664    abstract="false"
9665    static="false" final="false" visibility="public"
9666    deprecated="not deprecated">
9667    <constructor name="Struts2Factory"
9668      static="false" final="false" visibility="public"
9669      deprecated="not deprecated">
9670    </constructor>
9671    <method name="isNoArgConstructorRequired" return="boolean"
9672      abstract="false" native="false" synchronized="false"
9673      static="false" final="false" visibility="public"
9674      deprecated="not deprecated">
9675    </method>
9676    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
9677      abstract="false" native="false" synchronized="false"
9678      static="false" final="false" visibility="public"
9679      deprecated="not deprecated">
9680      <param name="name" type="java.lang.String"/>
9681      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
9682    </method>
9683    <method name="buildBean" return="java.lang.Object"
9684      abstract="false" native="false" synchronized="false"
9685      static="false" final="false" visibility="public"
9686      deprecated="not deprecated">
9687      <param name="clazz" type="java.lang.Class"/>
9688      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
9689    </method>
9690    <method name="buildInterceptor" return="Interceptor"
9691      abstract="false" native="false" synchronized="false"
9692      static="false" final="false" visibility="public"
9693      deprecated="not deprecated">
9694      <param name="interceptorConfig" type="InterceptorConfig"/>
9695      <param name="interceptorRefParams" type="java.util.Map"/>
9696      <exception name="ConfigurationException" type="ConfigurationException"/>
9697    </method>
9698    <doc>
9699    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
9700 GS2 and fixes several bugs.
9701
9702 @author dhanji@gmail.com
9703 @author benmccann.com]]>
9704    </doc>
9705  </class>
9706  <!-- end class com.google.inject.struts2.Struts2Factory -->
9707  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
9708  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
9709    abstract="false"
9710    static="false" final="false" visibility="public"
9711    deprecated="not deprecated">
9712    <constructor name="Struts2GuicePluginModule"
9713      static="false" final="false" visibility="public"
9714      deprecated="not deprecated">
9715    </constructor>
9716    <method name="configure"
9717      abstract="false" native="false" synchronized="false"
9718      static="false" final="false" visibility="protected"
9719      deprecated="not deprecated">
9720    </method>
9721    <doc>
9722    <![CDATA[Initializes the Struts 2 Guice Plugin.
9723 Must be added to the injector returned by
9724     {@link GuiceServletContextListener.getInjector()}.
9725
9726 @author benmccann.com]]>
9727    </doc>
9728  </class>
9729  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
9730</package>
9731<package name="com.google.inject.throwingproviders">
9732  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
9733  <interface name="CheckedProvider"    abstract="true"
9734    static="false" final="false" visibility="public"
9735    deprecated="not deprecated">
9736    <method name="get" return="T"
9737      abstract="false" native="false" synchronized="false"
9738      static="false" final="false" visibility="public"
9739      deprecated="not deprecated">
9740      <exception name="Exception" type="java.lang.Exception"/>
9741    </method>
9742    <doc>
9743    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
9744 a checked Exception. Users may not inject {@code T} directly.
9745
9746 <p>This interface must be extended to use application-specific exception types.
9747 Such subinterfaces may not define new methods, but may narrow the exception type.
9748 <pre>
9749 public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; { 
9750   T get() throws CustomExceptionOne, CustomExceptionTwo;
9751 }
9752 </pre>
9753
9754 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
9755 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
9756 will invoked at most once within each scope.
9757 
9758 @since 3.0]]>
9759    </doc>
9760  </interface>
9761  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
9762  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
9763  <class name="CheckedProvides"    abstract="true"
9764    static="false" final="false" visibility="public"
9765    deprecated="not deprecated">
9766    <implements name="java.lang.annotation.Annotation"/>
9767    <doc>
9768    <![CDATA[Annotates methods of a {@link Module} to create a {@link CheckedProvider}
9769 method binding that can throw exceptions. The method's return type is bound
9770 to a {@link CheckedProvider} that can be injected. Guice will pass
9771 dependencies to the method as parameters. Install {@literal @}CheckedProvides
9772 methods by using
9773 {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
9774 module where the methods are declared.
9775 
9776 @author sameb@google.com (Sam Berlin)
9777 @since 3.0]]>
9778    </doc>
9779  </class>
9780  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
9781  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
9782  <interface name="ThrowingProvider"    abstract="true"
9783    static="false" final="false" visibility="public"
9784    deprecated="use {@link CheckedProvider} instead.">
9785    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
9786    <method name="get" return="T"
9787      abstract="false" native="false" synchronized="false"
9788      static="false" final="false" visibility="public"
9789      deprecated="not deprecated">
9790      <exception name="Exception" type="java.lang.Exception"/>
9791    </method>
9792    <doc>
9793    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
9794 a checked Exception. Users may not inject {@code T} directly.
9795
9796 <p>This interface must be extended to use application-specific exception types.
9797 Such subinterfaces may not define new methods:
9798 <pre>
9799 public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
9800 </pre>
9801
9802 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
9803 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
9804 will invoked at most once within each scope.
9805
9806 @author jmourits@google.com (Jerome Mourits)
9807 @author jessewilson@google.com (Jesse Wilson)
9808 @deprecated use {@link CheckedProvider} instead.]]>
9809    </doc>
9810  </interface>
9811  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
9812  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
9813  <class name="ThrowingProviderBinder" extends="java.lang.Object"
9814    abstract="false"
9815    static="false" final="false" visibility="public"
9816    deprecated="not deprecated">
9817    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
9818      abstract="false" native="false" synchronized="false"
9819      static="true" final="false" visibility="public"
9820      deprecated="not deprecated">
9821      <param name="binder" type="com.google.inject.Binder"/>
9822    </method>
9823    <method name="forModule" return="com.google.inject.Module"
9824      abstract="false" native="false" synchronized="false"
9825      static="true" final="false" visibility="public"
9826      deprecated="not deprecated">
9827      <param name="module" type="com.google.inject.Module"/>
9828      <doc>
9829      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
9830 
9831 @since 3.0]]>
9832      </doc>
9833    </method>
9834    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9835      abstract="false" native="false" synchronized="false"
9836      static="false" final="false" visibility="public"
9837      deprecated="not deprecated">
9838      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
9839      <param name="valueType" type="java.lang.reflect.Type"/>
9840    </method>
9841    <doc>
9842    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
9843 
9844 <p>You can use a fluent API and custom providers:
9845 <pre><code>ThrowingProviderBinder.create(binder())
9846    .bind(RemoteProvider.class, Customer.class)
9847    .to(RemoteCustomerProvider.class)
9848    .in(RequestScope.class);
9849 </code></pre>
9850 or, you can use throwing provider methods:
9851 <pre><code>class MyModule extends AbstractModule {
9852   configure() {
9853     ThrowingProviderBinder.install(this, binder());
9854   }
9855   
9856   {@literal @}CheckedProvides(RemoteProvider.class)
9857   {@literal @}RequestScope
9858   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
9859     return creator.getCustomerOrThrow();
9860   }
9861 }
9862 </code></pre>
9863 
9864 @author jmourits@google.com (Jerome Mourits)
9865 @author jessewilson@google.com (Jesse Wilson)]]>
9866    </doc>
9867  </class>
9868  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
9869  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
9870  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
9871    abstract="false"
9872    static="false" final="false" visibility="public"
9873    deprecated="not deprecated">
9874    <constructor name="ThrowingProviderBinder.SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
9875      static="false" final="false" visibility="public"
9876      deprecated="not deprecated">
9877    </constructor>
9878    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9879      abstract="false" native="false" synchronized="false"
9880      static="false" final="false" visibility="public"
9881      deprecated="not deprecated">
9882      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
9883    </method>
9884    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
9885      abstract="false" native="false" synchronized="false"
9886      static="false" final="false" visibility="public"
9887      deprecated="not deprecated">
9888      <param name="annotation" type="java.lang.annotation.Annotation"/>
9889    </method>
9890    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9891      abstract="false" native="false" synchronized="false"
9892      static="false" final="false" visibility="public"
9893      deprecated="not deprecated">
9894      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
9895    </method>
9896    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9897      abstract="false" native="false" synchronized="false"
9898      static="false" final="false" visibility="public"
9899      deprecated="not deprecated">
9900      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
9901    </method>
9902    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
9903      abstract="false" native="false" synchronized="false"
9904      static="false" final="false" visibility="public"
9905      deprecated="not deprecated">
9906      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
9907    </method>
9908  </class>
9909  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
9910</package>
9911<package name="com.google.inject.tools.jmx">
9912  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
9913  <interface name="ManagedBindingMBean"    abstract="true"
9914    static="false" final="false" visibility="public"
9915    deprecated="not deprecated">
9916    <method name="getSource" return="java.lang.String"
9917      abstract="false" native="false" synchronized="false"
9918      static="false" final="false" visibility="public"
9919      deprecated="not deprecated">
9920      <doc>
9921      <![CDATA[Gets the source of this binding.]]>
9922      </doc>
9923    </method>
9924    <method name="getProvider" return="java.lang.String"
9925      abstract="false" native="false" synchronized="false"
9926      static="false" final="false" visibility="public"
9927      deprecated="not deprecated">
9928      <doc>
9929      <![CDATA[Gets the provider to which this binding is bound.]]>
9930      </doc>
9931    </method>
9932    <method name="getKey" return="java.lang.String"
9933      abstract="false" native="false" synchronized="false"
9934      static="false" final="false" visibility="public"
9935      deprecated="not deprecated">
9936      <doc>
9937      <![CDATA[Gets the binding key.]]>
9938      </doc>
9939    </method>
9940    <doc>
9941    <![CDATA[JMX interface to bindings.
9942
9943 @author crazybob@google.com (Bob Lee)]]>
9944    </doc>
9945  </interface>
9946  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
9947  <!-- start class com.google.inject.tools.jmx.Manager -->
9948  <class name="Manager" extends="java.lang.Object"
9949    abstract="false"
9950    static="false" final="false" visibility="public"
9951    deprecated="not deprecated">
9952    <constructor name="Manager"
9953      static="false" final="false" visibility="public"
9954      deprecated="not deprecated">
9955    </constructor>
9956    <method name="manage"
9957      abstract="false" native="false" synchronized="false"
9958      static="true" final="false" visibility="public"
9959      deprecated="not deprecated">
9960      <param name="domain" type="java.lang.String"/>
9961      <param name="injector" type="com.google.inject.Injector"/>
9962      <doc>
9963      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
9964 Consider using the name of your root {@link Module} class as the domain.]]>
9965      </doc>
9966    </method>
9967    <method name="manage"
9968      abstract="false" native="false" synchronized="false"
9969      static="true" final="false" visibility="public"
9970      deprecated="not deprecated">
9971      <param name="server" type="javax.management.MBeanServer"/>
9972      <param name="domain" type="java.lang.String"/>
9973      <param name="injector" type="com.google.inject.Injector"/>
9974      <doc>
9975      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
9976 Consider using the name of your root {@link Module} class as the domain.]]>
9977      </doc>
9978    </method>
9979    <method name="main"
9980      abstract="false" native="false" synchronized="false"
9981      static="true" final="false" visibility="public"
9982      deprecated="not deprecated">
9983      <param name="args" type="java.lang.String[]"/>
9984      <exception name="Exception" type="java.lang.Exception"/>
9985      <doc>
9986      <![CDATA[Run with no arguments for usage instructions.]]>
9987      </doc>
9988    </method>
9989    <doc>
9990    <![CDATA[Provides a JMX interface to Guice.
9991
9992 @author crazybob@google.com (Bob Lee)]]>
9993    </doc>
9994  </class>
9995  <!-- end class com.google.inject.tools.jmx.Manager -->
9996</package>
9997<package name="com.google.inject.util">
9998  <!-- start class com.google.inject.util.Modules -->
9999  <class name="Modules" extends="java.lang.Object"
10000    abstract="false"
10001    static="false" final="true" visibility="public"
10002    deprecated="not deprecated">
10003    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10004      abstract="false" native="false" synchronized="false"
10005      static="true" final="false" visibility="public"
10006      deprecated="not deprecated">
10007      <param name="modules" type="com.google.inject.Module[]"/>
10008      <doc>
10009      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10010 modules. If a key is bound in both sets of modules, only the binding from the override modules
10011 is kept. If a single {@link PrivateModule} is supplied or all elements are from
10012 a single {@link PrivateBinder}, then this will overwrite the private bindings.
10013 Otherwise, private bindings will not be overwritten unless they are exposed. 
10014 This can be used to replace the bindings of a production module with test bindings:
10015 <pre>
10016 Module functionalTestModule
10017     = Modules.override(new ProductionModule()).with(new TestModule());
10018 </pre>
10019
10020 <p>Prefer to write smaller modules that can be reused and tested without overrides.
10021
10022 @param modules the modules whose bindings are open to be overridden]]>
10023      </doc>
10024    </method>
10025    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
10026      abstract="false" native="false" synchronized="false"
10027      static="true" final="false" visibility="public"
10028      deprecated="not deprecated">
10029      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10030      <doc>
10031      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
10032 modules. If a key is bound in both sets of modules, only the binding from the override modules
10033 is kept. If a single {@link PrivateModule} is supplied or all elements are from
10034 a single {@link PrivateBinder}, then this will overwrite the private bindings.
10035 Otherwise, private bindings will not be overwritten unless they are exposed. 
10036 This can be used to replace the bindings of a production module with test bindings:
10037 <pre>
10038 Module functionalTestModule
10039     = Modules.override(getProductionModules()).with(getTestModules());
10040 </pre>
10041
10042 <p>Prefer to write smaller modules that can be reused and tested without overrides.
10043
10044 @param modules the modules whose bindings are open to be overridden]]>
10045      </doc>
10046    </method>
10047    <method name="combine" return="com.google.inject.Module"
10048      abstract="false" native="false" synchronized="false"
10049      static="true" final="false" visibility="public"
10050      deprecated="not deprecated">
10051      <param name="modules" type="com.google.inject.Module[]"/>
10052      <doc>
10053      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10054      </doc>
10055    </method>
10056    <method name="combine" return="com.google.inject.Module"
10057      abstract="false" native="false" synchronized="false"
10058      static="true" final="false" visibility="public"
10059      deprecated="not deprecated">
10060      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10061      <doc>
10062      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
10063      </doc>
10064    </method>
10065    <field name="EMPTY_MODULE" type="com.google.inject.Module"
10066      transient="false" volatile="false"
10067      static="true" final="true" visibility="public"
10068      deprecated="not deprecated">
10069    </field>
10070    <doc>
10071    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
10072
10073 @author jessewilson@google.com (Jesse Wilson)
10074 @since 2.0]]>
10075    </doc>
10076  </class>
10077  <!-- end class com.google.inject.util.Modules -->
10078  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10079  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
10080    static="true" final="false" visibility="public"
10081    deprecated="not deprecated">
10082    <method name="with" return="com.google.inject.Module"
10083      abstract="false" native="false" synchronized="false"
10084      static="false" final="false" visibility="public"
10085      deprecated="not deprecated">
10086      <param name="overrides" type="com.google.inject.Module[]"/>
10087      <doc>
10088      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10089      </doc>
10090    </method>
10091    <method name="with" return="com.google.inject.Module"
10092      abstract="false" native="false" synchronized="false"
10093      static="false" final="false" visibility="public"
10094      deprecated="not deprecated">
10095      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
10096      <doc>
10097      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10098      </doc>
10099    </method>
10100    <doc>
10101    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
10102    </doc>
10103  </interface>
10104  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
10105  <!-- start class com.google.inject.util.Providers -->
10106  <class name="Providers" extends="java.lang.Object"
10107    abstract="false"
10108    static="false" final="true" visibility="public"
10109    deprecated="not deprecated">
10110    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
10111      abstract="false" native="false" synchronized="false"
10112      static="true" final="false" visibility="public"
10113      deprecated="not deprecated">
10114      <param name="instance" type="T"/>
10115      <doc>
10116      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
10117 be necessary to use in your application, but is helpful for several types
10118 of unit tests.
10119
10120 @param instance the instance that should always be provided.  This is also
10121     permitted to be null, to enable aggressive testing, although in real
10122     life a Guice-supplied Provider will never return null.]]>
10123      </doc>
10124    </method>
10125    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
10126      abstract="false" native="false" synchronized="false"
10127      static="true" final="false" visibility="public"
10128      deprecated="not deprecated">
10129      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
10130      <doc>
10131      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
10132 JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
10133 since Guice providers directly implement the JSR-330 interface.
10134 
10135 @since 3.0]]>
10136      </doc>
10137    </method>
10138    <doc>
10139    <![CDATA[Static utility methods for creating and working with instances of
10140 {@link Provider}.
10141
10142 @author Kevin Bourrillion (kevinb9n@gmail.com)
10143 @since 2.0]]>
10144    </doc>
10145  </class>
10146  <!-- end class com.google.inject.util.Providers -->
10147  <!-- start class com.google.inject.util.Types -->
10148  <class name="Types" extends="java.lang.Object"
10149    abstract="false"
10150    static="false" final="true" visibility="public"
10151    deprecated="not deprecated">
10152    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
10153      abstract="false" native="false" synchronized="false"
10154      static="true" final="false" visibility="public"
10155      deprecated="not deprecated">
10156      <param name="rawType" type="java.lang.reflect.Type"/>
10157      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10158      <doc>
10159      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10160 {@code rawType}. The returned type does not have an owner type.
10161
10162 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10163      </doc>
10164    </method>
10165    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
10166      abstract="false" native="false" synchronized="false"
10167      static="true" final="false" visibility="public"
10168      deprecated="not deprecated">
10169      <param name="ownerType" type="java.lang.reflect.Type"/>
10170      <param name="rawType" type="java.lang.reflect.Type"/>
10171      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
10172      <doc>
10173      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
10174 {@code rawType} and enclosed by {@code ownerType}.
10175
10176 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10177      </doc>
10178    </method>
10179    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
10180      abstract="false" native="false" synchronized="false"
10181      static="true" final="false" visibility="public"
10182      deprecated="not deprecated">
10183      <param name="componentType" type="java.lang.reflect.Type"/>
10184      <doc>
10185      <![CDATA[Returns an array type whose elements are all instances of
10186 {@code componentType}.
10187
10188 @return a {@link java.io.Serializable serializable} generic array type.]]>
10189      </doc>
10190    </method>
10191    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
10192      abstract="false" native="false" synchronized="false"
10193      static="true" final="false" visibility="public"
10194      deprecated="not deprecated">
10195      <param name="bound" type="java.lang.reflect.Type"/>
10196      <doc>
10197      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
10198 For example, if {@code bound} is {@code CharSequence.class}, this returns
10199 {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
10200 this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
10201      </doc>
10202    </method>
10203    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
10204      abstract="false" native="false" synchronized="false"
10205      static="true" final="false" visibility="public"
10206      deprecated="not deprecated">
10207      <param name="bound" type="java.lang.reflect.Type"/>
10208      <doc>
10209      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
10210 example, if {@code bound} is {@code String.class}, this returns {@code ?
10211 super String}.]]>
10212      </doc>
10213    </method>
10214    <method name="listOf" return="java.lang.reflect.ParameterizedType"
10215      abstract="false" native="false" synchronized="false"
10216      static="true" final="false" visibility="public"
10217      deprecated="not deprecated">
10218      <param name="elementType" type="java.lang.reflect.Type"/>
10219      <doc>
10220      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
10221 {@code elementType}.
10222
10223 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10224      </doc>
10225    </method>
10226    <method name="setOf" return="java.lang.reflect.ParameterizedType"
10227      abstract="false" native="false" synchronized="false"
10228      static="true" final="false" visibility="public"
10229      deprecated="not deprecated">
10230      <param name="elementType" type="java.lang.reflect.Type"/>
10231      <doc>
10232      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
10233 {@code elementType}.
10234
10235 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10236      </doc>
10237    </method>
10238    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
10239      abstract="false" native="false" synchronized="false"
10240      static="true" final="false" visibility="public"
10241      deprecated="not deprecated">
10242      <param name="keyType" type="java.lang.reflect.Type"/>
10243      <param name="valueType" type="java.lang.reflect.Type"/>
10244      <doc>
10245      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
10246 {@code keyType} and whose values are of type {@code valueType}.
10247
10248 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10249      </doc>
10250    </method>
10251    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
10252      abstract="false" native="false" synchronized="false"
10253      static="true" final="false" visibility="public"
10254      deprecated="not deprecated">
10255      <param name="providedType" type="java.lang.reflect.Type"/>
10256      <doc>
10257      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
10258 {@code elementType}.
10259
10260 @return a {@link java.io.Serializable serializable} parameterized type.]]>
10261      </doc>
10262    </method>
10263    <doc>
10264    <![CDATA[Static methods for working with types.
10265
10266 @author crazybob@google.com (Bob Lee)
10267 @since 2.0]]>
10268    </doc>
10269  </class>
10270  <!-- end class com.google.inject.util.Types -->
10271</package>
10272
10273</api>
10274